[РЕШЕНО] изменение значений полей ноды при сохранении

Аватар пользователя JhonyLe JhonyLe 11 июня 2012 в 12:22

Добрый день! возникла необходимость изменять значения полей при добавлении ноды в зависимости от названия. То есть после заполнения формы добавления ноды и нажатия на кнопку сохранить, мне нужно перехватить форму, взять поле имени ноды и в зависимости от него изменить значения некоторых полей. Через какие функции это лучше сделать?

Комментарии

Аватар пользователя JhonyLe JhonyLe 11 июня 2012 в 14:04

значит я шел в правильном направлении) а подскажите пожалуйста ещё, как правильно к полям обращаться? на пример пробовал брать имя ноды как $form_state['values']['title'], $form_state['values']['name'], $form_state['values']['field_...'] и ещё много как, что-то не получилось. Как универсально обращаться ко всем полям? по какой форме составлять запрос? и чем будет отличаться вызов полей стандартных и CCK?

Аватар пользователя Frantsuzzz Frantsuzzz 11 июня 2012 в 15:09

Как правило, при генерации формы
$form['geo'] = array(
'#type' => 'textfield',
....);
'geo' будет именем переменной в formstate

$form_state['values']['geo']

Можно в обработчике формы вывести
echo "< pre>";
print_r($form_state['values']);
echo "< /pre>";
и смотреть какие переменные есть

Аватар пользователя JhonyLe JhonyLe 11 июня 2012 в 16:52
<?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'] нет. Что-то не правильно делаю?

Аватар пользователя JhonyLe JhonyLe 11 июня 2012 в 17:05

вывел в сообщение так

<?php    

drupal_set_message

("hello<pre>".print_r($form_state['values'], true)."</pre>");

?>
Аватар пользователя Frantsuzzz Frantsuzzz 11 июня 2012 в 17:19

JhonyLe wrote:
вывел в сообщение так

<?php    

drupal_set_message

("hello<pre>".print_r($form_state['values'], true)."</pre>");

?>

Через drupal_set_message правильнее будет. По друпаловски)

Аватар пользователя Orion76 Orion76 11 июня 2012 в 18:04

А еще есть:

<?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']);
  }
}
?>