2009-07-01 3 views
3

Я разрабатываю модуль, который изменяет отображение форм добавления/редактирования узлов. Я новичок в разработке модулей.drupal form alter

Я написал следующий код, он не работает должным образом. Скажите, пожалуйста, что случилось с этим?

function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

Это для Drupal 6.

ответ

19

Кроме того, формы добавления/редактирования узлов имеют идентификаторы типа содержимого. так сюжетные узлы будут:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'story_node_form') {  
    drupal_set_message(t('Editing a story node!')); 
    } 
} 

Если вы хотите, чтобы поймать каждый узел формы редактирования, независимо от типа, попробуйте следующее:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if (isset($form['#node']) && $form_id == $form['#node']->type .'_node_form') { 
    drupal_set_message(t('Editing a node!')); 
    } 
} 
+0

Спасибо вам, я могу добавить новые поля в форме, но не могут изменять или удалять существующие поля. – Sharique

+1

Вы должны иметь возможность выполнять все эти действия - вы должны проверить, что ваш модуль работает ПОСЛЕ других модулей, которые изменяют форму узла истории; если ваш модуль вносит свои изменения, то CCK (например) добавляет другое поле, вы не можете многое сделать. Если вам нужно получить самую последнюю трещину в форме, после того, как все остальные модули сделают свое дело, проверьте модуль http://drupal.org/project/util. Помимо прочего, он позволяет вам изменить порядок, в котором модули выполняют свои перехватчики. – Eaton

+1

вы также можете использовать mymodule_form_story_node_form_alter в качестве имени функции для определенных типов –

3

не следует вызвать функцию "hook_form_alter", а "yourmodule_form_alter". yourmodule должен быть именем вашего файла модуля, поэтому, если ваш модуль называется «привет», имя функции должно быть «hello_form_alter».

1

Вы должны понимать систему крюка, который использует Drupal, если вы хотите сделать разработку модуля. Когда крючок реализован где-то в Drupal, он называется hook_something. Как это работает, каждый раз, когда модуль хочет реализовать hook, вам нужно заменить «hook» на «modelname». Drupal будет знать, что это экземпляр этого крючка и называет его как таковой. Drupal также использует одну и ту же систему в слое для воспроизведения, с завихрением. Поскольку он будет смотреть на различные функции тематики и приоритизировать их на основе системы ранжирования, это позволило тем темам переопределять способ вывода данных.

0
function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

Сначала вы должны "крюк" ключевое слово для вашего модуля ключевое слово .. позволяет предположить ваше имя модуля "CONTACT_US", то

function contact_us_form_alter(&$form, $form_state, $form_id) { 

Теперь эта функция имеет три переменных

  1. $ Форма
  2. $ form_id
  3. $ form_state

Наиболее важной переменной при изменении формы является $ form_id, которая в основном отмечает, какая форма является загрузкой на странице.

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    print_r($form_id);exit; // Used to find the form id 
} 

После обнаружения form_id

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    if($form_id=='contact_us_form') 
     // Do your stuff 
} 

Примечание: проверьте, что вы правильно написать собственный модуль и включить его .. также очистить кэш