Drupal 6 получает название узла из отправленной формы - PullRequest
1 голос
/ 08 сентября 2010

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

function mymodule_myfunction(&$form) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

Заголовок не присоединяется к «Некоторому тексту»

Я вызываю свою функцию, используя следующую строку в моем form_alter:

$form['#submit'][] = 'mymodule_myfunction';

Ответы [ 3 ]

1 голос
/ 08 сентября 2010

Все передающие функции получают два передаваемых им параметра: $ form, который является окончательным массивом формы после всех корректировок для hook_form_alter и тому подобного, и $ form_state, который среди других значений содержит отправленные значения, которые были очищены ипроверил на диапазоны.(Например, если у вас есть три элемента в поле выбора, данные в $ form_state ['values'] уже убедились, что значение для этого ввода является одним из трех допустимых значений.)

Обычновам не следует использовать $ form ['# post'] - это не является частью опубликованного способа получения значений, и обновление ядра для решения некоторой проблемы с FAPI может привести к поломке вашего кода.

Попробуйте это:

function mymodule_myfunction($form, &$form_state) {
  drupal_set_message(t('Some Message @title'), 
  array('@title' => $form_state['values']['title'])));
}

Обратите внимание на исправленное использование функции t () - цель этой функции - позволить другим пользователям переводить текст, и поэтому с помощью «НекоторыеСообщение @title 'переводчик знает больше о том, что происходит.Кроме того, вы получаете преимущество, заключающееся в том, что текст, передаваемый через функцию t таким образом, также подается через check_plain () , что не позволяет кому-либо делать что-либо вредоносное с помощью ввода.

0 голосов
/ 08 сентября 2010

DKinzer рекомендуется использовать dsm ($ form) для просмотра переменных.Название узла не заполняется.Его можно найти в массиве Post.Следующая строка позволила мне сделать то, что я хотел.

drupal_set_message(t('Some Text '.$form['#post']['title']));
0 голосов
/ 08 сентября 2010

Попробуйте изменить подпись вашего

function mymodule_myfunction(&$form) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

На:

function mymodule_myfunction($form, &$form_state) {
    drupal_set_message(t('Some text ' . $form['#node']->title));
}

Также попробуйте установить модуль devel, чтобы вы могли выполнять такие действия, как

dsm($form);
dsm($form_state);

И точно посмотрите, с чем вы имеете дело.

Кроме того, если все, что вы хотите сделать, это дать сообщение, когда создается новый узел типа 'X', лучше использовать hook_nodeapi ;

Это может выглядеть примерно так;

function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {

if ($op == 'insert' && $node->type == 'my node  type') {
  drupal_set_message($node-title . ' is cool.');
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...