Добрый день! возникла необходимость изменять значения полей при добавлении ноды в зависимости от названия. То есть после заполнения формы добавления ноды и нажатия на кнопку сохранить, мне нужно перехватить форму, взять поле имени ноды и в зависимости от него изменить значения некоторых полей. Через какие функции это лучше сделать?
Комментарии
Повесить свой обработчик формы перед основным (http://xandeadx.ru/blog/drupal/381)
В нем массив $form_state['values']где все данные, введенные пользователем. Меняй по своим условиям.
значит я шел в правильном направлении) а подскажите пожалуйста ещё, как правильно к полям обращаться? на пример пробовал брать имя ноды как $form_state['values']['title'], $form_state['values']['name'], $form_state['values']['field_...'] и ещё много как, что-то не получилось. Как универсально обращаться ко всем полям? по какой форме составлять запрос? и чем будет отличаться вызов полей стандартных и CCK?
Как правило, при генерации формы
$form['geo'] = array(
'#type' => 'textfield',
....);
'geo' будет именем переменной в formstate
$form_state['values']['geo']
Можно в обработчике формы вывести
echo "< pre>";
print_r($form_state['values']);
echo "< /pre>";
и смотреть какие переменные есть
<?php
function framework__wish_node_form_submit(&$form, &$form_state, $form_id)
{
echo "<pre>";
print_r($form_state['values']);
echo "</pre>";
drupal_set_message("hello");
}
function
framework_form__wish_node_form_alter(&$form, &$form_state, $form_id) {array_unshift($form['#submit'], 'framework__wish_node_form_submit');
}
?>hello выводит, а $form_state['values'] нет. Что-то не правильно делаю?
вывел в сообщение так
<?php
drupal_set_message
("hello<pre>".print_r($form_state['values'], true)."</pre>"); ?>Через drupal_set_message правильнее будет. По друпаловски)
А еще есть:
<?php
/**
* Act on a node after validated form values have been copied to it.
*
* This hook is invoked when a node form is submitted with either the "Save" or
* "Preview" button, after form values have been copied to the form state's node
* object, but before the node is saved or previewed. It is a chance for modules
* to adjust the node's properties from what they are simply after a copy from
* $form_state['values']. This hook is intended for adjusting non-field-related
* properties. See hook_field_attach_submit() for customizing field-related
* properties.
*
* @param $node
* The node object being updated in response to a form submission.
* @param $form
* The form being used to edit the node.
* @param $form_state
* The form state array.
*
* @ingroup node_api_hooks
*/
function hook_node_submit($node, $form, &$form_state) {
// Decompose the selected menu parent option into 'menu_name' and 'plid', if
// the form used the default parent selection widget.
if (!empty($form_state['values']['menu']['parent'])) {
list($node->menu['menu_name'], $node->menu['plid']) = explode(':', $form_state['values']['menu']['parent']);
}
}
?>