Элементы формы как массивы в Drupal - PullRequest
0 голосов
/ 27 января 2011

Использование Drupal 6.20.

Мы можем настроить некоторые элементы формы следующим образом: -

<input type="select" name="somename[]"><option>ohai</option></select>

, а затем перебирать их в PHP с

foreach ($somename as $name) { ... }

Я пытаюсь сделать то же самое в Drupal. У меня есть список select-elements, которые идентичны по стилю. Количество элементов может измениться в будущем, поэтому обработка формы должна быть динамичной.

Если я использую описанный выше подход, каждый элемент будет перезаписывать предыдущий, так что в итоге на экран выводится только один элемент. Я не могу написать name="somename[$someid]", так как это не будет интерпретировать $somename как массив.
Поддерживает ли это Drupal или я это делаю?

Кроме того, есть ли другая альтернатива для достижения того же?

Ответы [ 2 ]

6 голосов
/ 27 января 2011

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


function test_form( &$form_state )
{
  $form = array();
  $delta = 0;
  $form["test_field"]["#tree"] = TRUE;
  $form["test_field"][$delta++] = array(
        "#type" => "textfield",
        "#title" => "Title",
    );
  $form["test_field"][$delta++] = array(
        "#type" => "textfield",
        "#title" => "Title",
    );
  $form["test_field"][$delta++] = array(
        "#type" => "textfield",
        "#title" => "Title",
    );
  $form["submit"] = array(
        "#type" => "submit",
        "#value" => "Submit",
    );
  return $form;
}

В функции отправки и проверки вы получите массив значений под именем вашего поля.

Помните, ключом к этому подходу является включение #tree для вашего элемента. Кроме того, API форм Drupal является одним из лучших фреймворков форм, с которыми я работал.

Надеюсь, это поможет.

2 голосов
/ 15 марта 2011

Я знаю, что на этот вопрос ответили, но я думаю, что есть более простой способ, который является менее многословным, и вам нужно только изменить количество полей (или передать его в качестве аргумента при получении формы).1003 * При отправке вашего $ form_state ['values'] будет содержать (среди прочего) значение ваших элементов формы в виде массива:

  'somename' => 
    array
      1 => string '' (length=0)
      2 => string '' (length=0)
      3 => string '' (length=0)
      4 => string '' (length=0)
      5 => string '' (length=0)
...