Доброго времени суток!
Есть такой затык, скажем есть некая форма, и необходимо упорядочить поля с помощью филдсетов. В книжке вроде все правильно написано, поля "присваиваются" массиву филдсета и затем очищаются ненужные. Но в жизни почему-то не все так гладко. Т.е. форматировать таким образом получается, но вот при сабмите и последующем редактировании значения полей в филдсете не сохраняется. Значит ли это, что их надо обрабатывать как-то вручную? Может кто-то сталкивался и пнет в нужном направлении? Где искать, что смотреть?
* 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']);
}
}
Заранее благодарен!
Комментарии
'#default_value' => ...
#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; но желаемого результата не получил
Поставьте перехватчик form_submit и посмотрите значение form_state['values']
Таксономия сохраняется, а это поле нет?? Тогда вроде понятно В общем, вам дали правильный совет - посмотрите, какие значения приходят от формы, думаю, разберетесь.
$form_state['values'] у меня ARRAY, а как его содержание увидеть? dpm() не проходит, а $form_state['values']['field_data'] дает пустой результат((
Вообщем вывел старым дедовским способом через foreach, получается передается переменная $form_state['values']['taxonomy']['field_date'] и она к сожалению пустая
Ага, а теперь посмотрите html-код - какое имя (name) у вашего поля field_date. И какое у него имя, если его не перемещать в $form['taxonomy'] (когда все работает).
Вывод массива - print_r()
taxonomy[field_date][0][value][date] это если в taxonomy,
реальное - field_date[0][value][date]
да, и кстати через print_r() в form_submit массив не выводит, не знаю почему, но приходится использовать drupal_set_message
не вижу логики, т.к. в form_alter() стоит unset($form['field_date']);
Сделайте так:
<?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] =>
)
)
)
См. http://api.drupal.org/ - изучите доки по FormAPI, как формируется имя эл-та. Есть там одно св-во у эл-та формы, которое на это влияет, вы его сами упоминали в комментарии номер 3 Скорее всего, причина в нем.
вот спасибо за ссылку "в никуда"
В этой "теме" есть еще один прикол: для элементов ['taxonomy']['11'] задаешь #prefix #suffix и все как надо работает, но есть два поля ['taxonomy']['tags']['13'] и аналогичное, где #prefix и #suffix не дает результат. Мне кажется это тоже все из-за "уровня вложенности" элемента.
Что, никто с таким что ли не сталкивался?
не в обиду, но если сказать нечего, лучше пройти мимо
Просто я думаю, что ценнее разобраться самому, чем просто получить готовое решение. Если надо второе могу рассказать - мне не сложно. Только все равно потом новые вопросы появятся.
Помогло натолкнуть на мысль http://www.drupal.ru/node/26266