Többlépcsős tartalomlétrehozás, végén a regisztrációval

ipeto képe

Sziasztok!

Talán kicsit túlzott bátorsággal, de nekifogtam egy olyan modul összerakásának, amivel a nem regisztrált felhasználók egy több részből álló formán első tartalmukat beküldhetik, majd az utolsó űrlaprészen adják meg a személyes adatokat (itt történik a regisztráció). Találtam erre több jónak tűnő leírást, amikben a Ctools Form Wizard-ját használják, úgymint ezt vagy ezt.
Első körben egy egészen egyszerűt szerettem volna összehozni (modal és ajax nélkül, néhány demo formmal), de rögtön beleálltam a talajba. A hook_menu() által létrehozott útvonal "Az oldal nem található"-t ad vissza. Ürítettem a cache-t, újraépítette a menü router táblát, de nem segített egyik sem. Alighanem valahol a page callback-ben meghívott függvénnyel lehet a gond, de hogy mi, azt nem tudtam kitalálni.

Ez szerepel a contentadd_register.module-ban:

  1. <?php
  2.  
  3. /**
  4. * Implements hook_menu().
  5. */
  6. function contentadd_register_menu() {
  7. $items = array();
  8. $items['demo/%step'] = array(
  9. 'title' => 'Multistep registration',
  10. 'page callback' => 'contentadd_register_ctools_wizard',
  11. 'page arguments' => array(1),
  12. 'access callback' => TRUE,
  13. 'file' => 'contentadd_register.inc',
  14. 'type' => MENU_CALLBACK,
  15. );
  16. return $items;
  17. }

Ez pedig a contentadd_register.inc egy része:

  1. <?php
  2.  
  3. /**
  4. * Create callback for standard ctools registration wizard.
  5. */
  6.  
  7. function contentadd_register_ctools_wizard($step = NULL) {
  8. ctools_include('wizard');
  9. ctools_include('object-cache');
  10.  
  11. $form_info = array(
  12. 'id' => 'contentadd_register',
  13. 'path' => 'demo/%step',
  14. 'show trail' => TRUE,
  15. 'show back' => FALSE,
  16. 'show cancel' => TRUE,
  17. 'show return' => FALSE,
  18. 'next callback' => 'contentadd_register_subtask_next',
  19. 'finish callback' => 'contentadd_register_subtask_finish',
  20. 'cancel callback' => 'contentadd_register_subtask_cancel',
  21.  
  22. 'order' => array(
  23. 'test_1' => t('Demo form 1'),
  24. 'test_2' => t('Demo form 2'),
  25. 'test_3' => t('Demo form 3'),
  26. ),
  27.  
  28. 'forms' => array(
  29. 'test_1' => array(
  30. 'form id' => 'contentadd_register_demo_1'
  31. ),
  32. 'test_2' => array(
  33. 'form id' => 'contentadd_register_demo_2'
  34. ),
  35. 'test_3' => array(
  36. 'form id' => 'contentadd_register_demo_3'
  37. ),
  38. ),
  39. );
  40.  
  41. $object_id = 1;
  42.  
  43. if (empty($step)) {
  44. contentadd_register_clear_cache($object_id);
  45. $step = 'test_1';
  46. }
  47.  
  48. $object = contentadd_register_get_cache($object_id);
  49.  
  50. $form_state = array(
  51. 'object_id' => $object_id,
  52. 'object' => &$object,
  53. );
  54.  
  55. $output = ctools_wizard_multistep_form($form_info, $step, $form_state);
  56. //$output = drupal_render($form);
  57. return $output;
  58. }

illetve ugyaninnen az első űrlap:

  1. function contentadd_register_demo_1($form, &$form_state) {
  2. $form_state['title']=t('Demo form 1');
  3. $form['name1'] = array(
  4. '#type' => 'textfield',
  5. '#title' => t('Blah 1'),
  6. '#default_value' => isset($form_state['object']->name1) ? $form_state['object']->name1 : '',
  7. '#required' => TRUE,
  8. );
  9. return $form;
  10. }
  11.  
  12. function contentadd_register_demo_1_submit(&$form, &$form_state) {
  13. $form_state['object']->name1 = $form_state['values']['name1'];
  14. }

Ha valaki tudna adni egy kis segítséget, hogy mi lehet a hiba, azt megköszönném.

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: