Что не так в Form api?[Решено]

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

Аватар пользователя darkdim darkdim 1 сентября 2011 в 21:42

Доброго времени суток!
Есть такой затык, скажем есть некая форма, и необходимо упорядочить поля с помощью филдсетов. В книжке вроде все правильно написано, поля "присваиваются" массиву филдсета и затем очищаются ненужные. Но в жизни почему-то не все так гладко. Т.е. форматировать таким образом получается, но вот при сабмите и последующем редактировании значения полей в филдсете не сохраняется. Значит ли это, что их надо обрабатывать как-то вручную? Может кто-то сталкивался и пнет в нужном направлении? Где искать, что смотреть?

/**
* Implementation of hook_form_alter().
*/

function mysite_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'contact_mail_page') {
// Wrap the name and mail fields in a fieldset.
$form['contact_fields'] = array(
'#type' => 'fieldset',
'#title' => t('Contact information')
);
// Move existing fields to fieldset.
$form['contact_fields']['name'] = $form['name'];
$form['contact_fields']['mail'] = $form['mail'];
// Wrap the subject, message, category and copy fields
// in a fieldset.
$form['message_fields'] = array(
'#type' => 'fieldset',
'#title' => t('Message')
);
// Move existing fields to fieldset.
$form['message_fields']['subject'] = $form['subject'];
$form['message_fields']['cid'] = $form['cid'];
$form['message_fields']['message'] = $form['message'];
$form['message_fields']['copy'] = $form['copy'];
// Move the submit button below our fieldsets.
$form['submit']['#weight'] = 1;
// Clear out the now unnecessary form elements.
unset($form['name'], $form['mail'], $form['subject'],
$form['message'], $form['copy'], $form['cid']);
}
}

Заранее благодарен!

Комментарии

Аватар пользователя shp@drupal.org shp@drupal.org 1 сентября 2011 в 23:19

#default_value по идее должны подставиться автоматом на этапе генерации формы (drupal_get_form()). Сначала надо определить, на каком этапе проблемы - введенные значения не сохраняются куда должны (кстати, куда?), или сохраняются, но не подставляются обратно в форму.

Аватар пользователя darkdim darkdim 2 сентября 2011 в 9:34

<a href="mailto:shp@drupal.org">shp@drupal.org</a> wrote:
#default_value по идее должны подставиться автоматом на этапе генерации формы (drupal_get_form()). Сначала надо определить, на каком этапе проблемы - введенные значения не сохраняются куда должны (кстати, куда?), или сохраняются, но не подставляются обратно в форму.

в моем случае есть филдсет taxonomy с полями из терминов таксономии и cck поле data(field_data), мне надо их сгруппировать в одном филдсете и выставить в определенном порядке(в виде таблицы). Я делаю так:
$form['taxonomy']['field_data'] = $form['field_data'];
unset ($form['field_data']);
на этом этапе все нормально, поле попадает в нужный филдсет, а дальше, выбираем значение и кнопку "submit" и все, значение этого поля не сохранилось. Может потому что оно стало вместо переменной массива $form['field_data'] вложенной переменной массива $form['taxonomy']['...']? Естественно и при редактировании ноды значение тоже не появляется.
Пробовал $form['taxonomy']['#tree'] = TRUE; но желаемого результата не получил

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 10:44

Таксономия сохраняется, а это поле нет?? Тогда вроде понятно Smile В общем, вам дали правильный совет - посмотрите, какие значения приходят от формы, думаю, разберетесь.

Аватар пользователя darkdim darkdim 2 сентября 2011 в 13:34

$form_state['values'] у меня ARRAY, а как его содержание увидеть? dpm() не проходит, а $form_state['values']['field_data'] дает пустой результат((

Аватар пользователя darkdim darkdim 2 сентября 2011 в 13:42

Вообщем вывел старым дедовским способом через foreach, получается передается переменная $form_state['values']['taxonomy']['field_date'] и она к сожалению пустая

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 14:01

Ага, а теперь посмотрите html-код - какое имя (name) у вашего поля field_date. И какое у него имя, если его не перемещать в $form['taxonomy'] (когда все работает).

Вывод массива - print_r()

Аватар пользователя darkdim darkdim 2 сентября 2011 в 14:15

да, и кстати через print_r() в form_submit массив не выводит, не знаю почему, но приходится использовать drupal_set_message

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 15:00

"darkdim" wrote:
taxonomy[field_date][0][value][date] это если в taxonomy,
реальное - field_date[0][value][date]
Ну, с одним name работает, с другим name не работает. Что надо сделать чтоб работало? Smile

"darkdim" wrote:
да, и кстати через print_r() в form_submit массив не выводит, не знаю почему, но приходится использовать drupal_set_message
Потому что после сабмита формы скорее всего идет переадресация на другую страницу. Т.е. вы этого принта не увидите. А вот сообщения показываются на следующей сгенерированной странице, поэтому вы их видите.

Аватар пользователя darkdim darkdim 2 сентября 2011 в 15:32

<a href="mailto:shp@drupal.org">shp@drupal.org</a> wrote:
"darkdim" wrote:
taxonomy[field_date][0][value][date] это если в taxonomy,
реальное - field_date[0][value][date]
Ну, с одним name работает, с другим name не работает. Что надо сделать чтоб работало? Smile

не вижу логики, т.к. в form_alter() стоит unset($form['field_date']);

Аватар пользователя darkdim darkdim 2 сентября 2011 в 15:50

G.A. Vinogradov wrote:
Сделайте так:

<?php
echo '<pre>';
print_r($form_state['values']);
die();
?>


сделал, принцип тот же, результат тоже:
[taxonomy] => Array
(
[14] =>
[11] => 2176
[tags] => Array
(
[13] =>
[16] =>
)

[15] => 2329
[field_date] => Array
(
[0] => Array
(
[value] =>
[value2] =>
[timezone] =>
[offset] =>
[offset2] =>
[rrule] =>
)

)

)

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 16:01

См. http://api.drupal.org/ - изучите доки по FormAPI, как формируется имя эл-та. Есть там одно св-во у эл-та формы, которое на это влияет, вы его сами упоминали в комментарии номер 3 Smile Скорее всего, причина в нем.

Аватар пользователя darkdim darkdim 2 сентября 2011 в 16:10

<a href="mailto:shp@drupal.org">shp@drupal.org</a> wrote:
См. http://api.drupal.org/ - изучите доки по FormAPI, как формируется имя эл-та. Есть там одно св-во у эл-та формы, которое на это влияет, вы его сами упоминали в комментарии номер 3 Smile Скорее всего, причина в нем.

вот спасибо за ссылку "в никуда"

Аватар пользователя darkdim darkdim 2 сентября 2011 в 16:49

В этой "теме" есть еще один прикол: для элементов ['taxonomy']['11'] задаешь #prefix #suffix и все как надо работает, но есть два поля ['taxonomy']['tags']['13'] и аналогичное, где #prefix и #suffix не дает результат. Мне кажется это тоже все из-за "уровня вложенности" элемента.

Что, никто с таким что ли не сталкивался?

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 22:49

"darkdim" wrote:
вот спасибо за ссылку "в никуда"
Ну почему же "в никуда"? Там есть все, что нужно, надо только посмотреть. Снизу написано "Forms API Reference", а еще для 6-го Друпала есть "Form API Quickstart Guide". Must-have ссылка. Вот и гляньте там инфу по свойству "#tree" Smile Заодно и по #prefix/#suffix может чего найдете.

Аватар пользователя darkdim darkdim 2 сентября 2011 в 23:11

"<a href="mailto:shp@drupal.org">shp@drupal.org</a>" wrote:
Там есть все, что нужно, надо только посмотреть

не в обиду, но если сказать нечего, лучше пройти мимо

Аватар пользователя shp@drupal.org shp@drupal.org 2 сентября 2011 в 23:33

Просто я думаю, что ценнее разобраться самому, чем просто получить готовое решение. Если надо второе могу рассказать - мне не сложно. Только все равно потом новые вопросы появятся.