Как передать переменную обратному вызову Drupal?

Я создал структуру поля, как показано ниже, из кода и не использовал пользовательский интерфейс веб-формы. Причина, по которой я сделал это программно, заключается в том, что у меня есть сотни форм, и я хотел сделать это один раз и навсегда.

введите здесь описание изображения

Ниже приведен мой код:

for ($i = 0; $i <= 4; $i++) {
            $form['submitted']['file' . $i] = array(
                '#title' => t('File'),
                '#type' => 'managed_file',
                '#description' => t('Please upload a document or image.'),
                '#default_value' => variable_get('file' . $i, ''),
                '#weight' => 100,
               );

                $form['submitted']['remove_name'] = array(
               '#type' => 'submit',
               '#value' => t('Remove'),
               //I NEED A WAY TO PASS $i AS ARGUMENT TO THE CALLBACK
               '#submit' => array('form_remove_attachment'),
               // Since we are removing a name, don't validate until later.
              '#limit_validation_errors' => array(),
);
        }

И ниже обратного вызова

function form_remove_attachment($i) {

    $form_state['submitted']['file' . $i]--;
   // Setting $form_state['rebuild'] = TRUE causes the form to be rebuilt again.
    $form_state['rebuild'] = TRUE;
}

Теперь мне нужна кнопка удаления для каждого поля вложения, чтобы пользователи могли изменить свое мнение относительно вложенных файлов. Я могу, конечно, добавить его с помощью JS, но таким образом вложения не удаляются из $form_state.

Есть ли у кого-нибудь предложения, как передать $i в callback form_remove_attachment?


person Kandinski    schedule 21.01.2013    source источник


Ответы (1)


Во-первых, вместо $form['submitted']['remove_name'] вы должны использовать что-то похожее на $form['submitted']['remove_name' . $i], как вы сделали с $form['submitted']['file' . $i].

Для $form['submitted']['remove_name' . $i] вы можете использовать настраиваемое свойство, например $form['submitted']['remove_name' . $i]['#mymodule_file_id']. (Замените mymodule на короткое имя модуля, который вы используете.) Форма отправки должна использовать следующий код.

function form_remove_attachment($form, &$form_state) {
  // This is the same value used for #mymodule_file_id for the clicked button.
  $file_id = $form_state['triggering_element']['#mymodule_file_id'];
  // ...
}

В качестве примечаний:

  • Элемент формы manage_file не использует свойство #default_value
  • Перед каждой функцией, реализуемой модулем, должно стоять короткое имя модуля; если функция private, первым символом в имени функции должно быть подчеркивание, за которым следует короткое имя модуля

Рекомендации

person apaderno    schedule 21.01.2013