drupal形式改变

时间:2009-07-01 07:42:42

标签: drupal

我正在开发一个模块,用于更改添加/编辑节点表单的显示。我是模块开发的初学者。

我写了以下代码,但是工作不正常。请告诉我这有什么问题?

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

这是针对drupal 6。

4 个答案:

答案 0 :(得分:19)

此外,节点添加/编辑表单具有内容类型特定的ID。所以故事节点将是:

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

答案 1 :(得分:3)

你不应该调用你的函数“hook_form_alter”而是“yourmodule_form_alter”。 yourmodule应该是模块文件的名称,所以如果你的模块被称为“hello”,那么函数名应该是“hello_form_alter”。

答案 2 :(得分:1)

如果要进行模块开发,您需要了解Drupal使用的钩子系统。当在Drupal的某处实现一个钩子时,它被称为hook_something。这种方式的工作方式是每次模块想要实现钩子时,你需要用'modelname'替换'hook'。 Drupal会知道它是该钩子的一个实例,并将其称为。 Drupal也在主题层中使用相同的系统,并且有一个扭曲。因为它将查看不同的主题功能并根据排名系统对它们进行优先级排序,这使主题能够覆盖模块输出数据的方式。

答案 3 :(得分: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
  4. 表单更改期间最重要的变量是$ 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
    }
    

    注意:检查您是否已正确编写自定义模块并启用它..也清除缓存