Переход на произвольную страницу в HTML_QuickForm_Controller

encyclop

Guest
Переход на произвольную страницу в HTML_QuickForm_Controller

Приветствую всех!

Кто-нибудь знает, как сделать переход на произвольную страницу в HTML_QuickForm_Controller

http://pear.php.net/package/HTML_QuickForm_Controller

Скажем, форма создана, в ней 10 страниц, юзер посылается то на 3-ю, тона 5-ю, то на 1-ю страницу (по собственному выбору)...

Что касается джампов при нексте и беке я знаю, а вот как быть, когда еще ни одна страница формы еще не пройдена, но форма создана, и надо послать юзера, скажем, сразу же на третью страницу формы (если кто интересуется, это мне надо, само собой, для работы с формами, уже содержащими данные).
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Встречный вопрос: при отправке email'а через сайт pear над формой большими красными буквами написано следующее
Do not send email to this developer if you are in need of support for any of his/her package(s), instead we recommend emailing [email protected] where you are more likely to get answer.
Неужели этот текст настолько непонятен и обязательно надо лично слать вопросы по техподдержке?..


По существу: посмотри пример под названием tabbed.php, прилагающийся к пакету. Перекинуть из скрипта на конкретную страницу можно при помощи действия "jump".
 

encyclop

Guest
Большое, нет, ОГРОМНОЕ спасибо за ответ!

А я об этом знаю (пожалуйста, внимательно читайте текст моего сообщения, он не настолько велик)...

По поводу вашей бесценной информации...

Смотреть надо не tabbed.php, а statemachine.php, что я прежде уже сделал...

Только там описана работа с джампом, когда уже нажата кнопка на какой-либо странице формы, после чего юзер куда-либо посылается... (обработка next или back)

У меня же ситуация ДРУГАЯ...

ЕЩЕ РАЗ...

Надо послать юзера хоть джампом, хоть словом :)-)) СПАЗУ на определенную страницу формы без обработки акций типа Next или Back, без гуляний по страницам, то есть одну из страниц полностью непройденной формы, скажем, на третью из десятистраничной формы.

Иными словами, как в многостраничной форме задать первую страницу по умолчанию? Вместо первой по порядку - любую другую?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: encyclop
Большое, нет, ОГРОМНОЕ спасибо за ответ!

А я об этом знаю (пожалуйста, внимательно читайте текст моего сообщения, он не настолько велик)...

По поводу вашей бесценной информации...

Смотреть надо не tabbed.php, а statemachine.php, что я прежде уже сделал...

Только там описана работа с джампом, когда уже нажата кнопка на какой-либо странице формы, после чего юзер куда-либо посылается... (обработка next или back)

У меня же ситуация ДРУГАЯ...
Дружок, меньше пафоса, ты всё же не забывай, что разговариваешь с автором используемого тобой пакета, и он таки знает, в какую именно лужу тебя надо ткнуть носом, ок?


Иными словами, как в многостраничной форме задать первую страницу по умолчанию? Вместо первой по порядку - любую другую?
После создания контроллера, загрузки в него значений и т.п. сделать
PHP:
$page->handle('jump');
где $page --- страница, которую ты хочешь показать.
 

encyclop

Guest
ООО, мЭтр...

Кстати, после первого сообщению было нетрудно догадаться...

Без приколов, прошу прощения, если чем-либо задел...

Однако не работает...

Все виснет вплоть до истечения времени выполнения скрипта...

$wizard =& new HTML_QuickForm_Controller();

$page1 =& new PageFirst('page1');
$page2 =& new PageSecond('page2');
$page3 =& new PageThird('page3');
$page4 =& new PageForth('page4');
$page5 =& new PageFifth('page5');
$page6 =& new PageSixth('page6');
$page7 =& new PageSeventh('page7');
$page8 =& new PageEighth('page8');

$wizard->addPage($page1);
$wizard->addPage($page2);
$wizard->addPage($page3);
$wizard->addPage($page4);
$wizard->addPage($page5);
$wizard->addPage($page6);
$wizard->addPage($page7);
$wizard->addPage($page8);

$page2->addAction('next', new PageSecondActionNext());
$page3->addAction('next', new PageThirdActionNext());
$page4->addAction('next', new PageForthActionNext());
$page5->addAction('back', new PageFifthActionBack());
$page5->addAction('next', new PageFifthActionNext());
$page6->addAction('back', new PageSixthActionBack());
$page6->addAction('next', new PageSixthActionNext());
$page7->addAction('back', new PageSeventhActionBack());
$page7->addAction('next', new PageSeventhActionNext());
$page8->addAction('back', new PageEighthActionBack());

$wizard->addAction('display', new ActionDisplay());
$wizard->addAction('next', new HTML_QuickForm_Action_Next());
$wizard->addAction('back', new HTML_QuickForm_Action_Back());
$wizard->addAction('jump', new HTML_QuickForm_Action_Jump());
$wizard->addAction('process', new ActionProcess());

$page4->handle('jump');

$wizard->run();

Где я только этот $page4->handle('jump'); не ставил, увы...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: encyclop
Однако не работает...

Все виснет вплоть до истечения времени выполнения скрипта...
собственно и немудрено:

PHP:
    $page4->handle('jump');
    
    $wizard->run();
при таком коде он просто будет зацикливаться с переброской на 4ую страницу формы.

Объясняю поподробней: действие 'jump' просто выполняет редирект на нужную страницу. Выполнить его надо ровно один раз, когда пользователь впервые попадает на скрипт, где ему будут показываться формы и первый раз инициализируется контроллер. Для этого можно, например, передавать скрипту какой-то флаг, который после редиректа уже естественно не будет установлен. Кроме того, создавать контроллер надо с параметром $modal = false, иначе перейти на форму за номером 4 будет нельзя до тех пор, пока пользователь не увидит формы за № 1, 2 и 3.
 
Сверху