Как вывести определенное поле из формы?

Главные вкладки

Аватар пользователя Антоха82 Антоха82 21 июля 2018 в 6:16

Странно, проблема вроде бы типовая, но почему-то решения нигде нет.
Пользователь решает тест. Каждый вопрос выводится на новой странице. Под вопросом есть форма с текстбоксом "введите ответ" и тремя кнопками "назад", "отправить" и "вперед". На всех страницах кроме первого вопроса и последнего нужны все эти четыре поля (может с терминологией что-то путаю, но я называю все это вместе формой, а каждый элемент полем). Когда пользователь переходит на первый вопрос, не должно быть кнопки "назад", а когда на последний, соответственно "вперед". Вопрос - как реализовать подобное?

Была идея сделать что-то вроде такого:

<?php
function my_form($var) {

if (

$var 1) {
    
$form['nazad'] = array(
    
'#type' => 'submit',
    
'#value' => 'назад',
);
}
if (
$var 2) {
    
$form['vpered'] = array(
    
'#type' => 'submit',
    
'#value' => 'вперед',
    );
}
$form['otvet'] = array(
'#title' => 'Введите ответ',
'#type' => 'textfield',
);
$form['otpravit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);

return 

$form;
}
?>

А потом во время рендеринга формы задавать нужное мне значение $var, что-то вроде:

<?php
if (страница является первой) {
$var 2
}
?>

Но, что-то не получилось. Может быть в function my_form($var) нельзя ничего передавать.

Можно конечно сделать несколько форм, для каждой кнопки свою, но это уже крайний вариант, хотелось бы более правильного и изящного решения. Что скажете?
p.s. webform не предлагать

Комментарии

Аватар пользователя Антоха82 Антоха82 21 июля 2018 в 8:05

Olegars, интересная штука, но мне нужно чтобы каждое конкретное задание было на отдельной странице, а там, как я понял, используется технология AJAX.
Я думал есть какое-то простое решение, без использования сторонних модулей. Вот такая идея у меня появилась. В функцию, вызывающую форму пишем все как обычно, без всяких переменных и условий:

<?php
function my_form() {
    
$form['nazad'] = array(
    
'#type' => 'submit',
    
'#value' => 'назад',
);
}
    
$form['vpered'] = array(
    
'#type' => 'submit',
    
'#value' => 'вперед',
    );
$form['otvet'] = array(
'#title' => 'Введите ответ',
'#type' => 'textfield',
);
$form['otpravit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);

return 

$form;
}
?>

Когда вызываем эту функцию, из массива формы удаляем ненужные при необходимости:

<?php
if (страница является первой) { 
$a drupal_get_form('formexample_nameform'); 
unset(
$a['nazad']); //удаляем из массива формы поле nazad
}
?>

Потом рендерим все это
return drupal_render ($a);

В принципе все работает, я только не уверен, что не получу каких-нибудь неожиданных проблем потом. Что скажете? Понятно что код кривой, но в принципе можно так делать, не будет каких-нибудь проблем потом?