О проекте

Данный сайт попытка повысить коммуникацию самых активных разработчиков на CMS Drupal - блоггеров. Если Вы ведете свой блог о Друпале, значит Вы готовы делиться вашими знаниями, помочь другим. Не всегда ваши знания доходят до потребителя. Задача данного сайта агрегировать знания различных блогов в единую ленту и привести на Ваши блоги активных пользователей.

Активность пользователей на Вашем сайте будет дополнительным стимулом к дальнейшей работе.

Удачи во всех Ваших начинаниях!

Несколько одинаковых submit-кнопок в форме

-8 votes
+
-

Всем известен лозунг о том, что Друпал, будучи открытой системой, обладает обширной и подробной документацией. Безусловно, это так и есть. Тем не менее, работа с этой документацией зачастую происходит в режиме «Слепой котенок vs. Огромный страшный мир». В основном потому, что обширная и подробная документация не очень удачно организована, так что в результате нужные сведения зачастую лежат в странных, неожиданных местах. И спасает зачастую только опыт: если знаешь, где искать — найдешь, а не знаешь — фиг тебе.
Сегодня, к примеру, решал задачу с формой, у которой несколько (переменное число) одинаковых submit-кнопок с одним и тем же submit-обработчиком, который, все же, должен уметь эти кнопки различать. Задачу решал не в первый раз, поэтому знал, что в описание каждой кнопки нужно добавить собственные свойства, содержащие их отличительные черты, например, вот так:

  1. for ($i=0; $i<5; $i ++) {
  2.   $form['line_' .$i]['work'] = array(
  3.     '#type' => 'submit',
  4.     '#value' => t('Work'),
  5.     '#line_index' => $i,
  6.   );
  7. }

И тогда в submit-обработчике можно будет из определенного поля $form_state вынуть ['#line_index'] и понять, какая именно кнопка была нажата.
Однако я напрочь забыл, где именно в $form_state должна быть эта информация. На странице Form API, естественно, ничего об этом нет — это ж, понятно, ерунда, зачем о ней в описании форм Друпала писать. В общем, с горем пополам вспомнил, что эти данные были где-то на странице о различиях между Form API пятерки и шестерки:$form_state['clicked_button']
A full copy of the button element that was clicked to submit the form. This is more reliable than the old $form_values['op'] name, and also carries any additional information that was placed in the button element's form definition.
Помню, с месяц назад меня как раз об этом кто-то спрашивал, а я так и не вспомнил ответ: описание нажатой кнопки полностью, включая все дополнительные и самодельные параметры, передается в $form_state['clicked_button'].
Теперь не забуду.

Полный оригинальный материал:

Graker