代码之家  ›  专栏  ›  技术社区  ›  Sharique

Drupal形式改变

  •  3
  • Sharique  · 技术社区  · 17 年前

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

    我写了以下代码,它不能正常工作。请告诉我这是怎么回事?

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

    这是给Drupal 6的。

    4 回复  |  直到 12 年前
        1
  •  19
  •   Eaton    17 年前

    此外,节点添加/编辑表单具有特定于内容类型的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!'));
      }  
    }
    
        2
  •  3
  •   Nir Levy    17 年前

    您不应该调用您的函数“hook-form-alter”,而应该调用“yourmodel-form-alter”。您的模块应该是模块文件的名称,所以如果您的模块被称为“hello”,那么函数名应该是“hello-form-alter”。

        3
  •  1
  •   googletorp    17 年前

    如果要进行模块开发,您需要了解Drupal使用的钩子系统。当一个钩子在Drupal的某个地方实现时,它被称为钩子。这样做的方式是,每次模块想要实现钩子时,都需要将“钩子”替换为“modelname”。Drupal会知道这是一个钩子的实例,并这样称呼它。Drupal在主题层也使用相同的系统,但有一个扭曲。因为它将查看不同的主题功能,并基于排名系统对它们进行优先级排序,这使得主题能够覆盖模块输出数据的方式。

        4
  •  0
  •   jalil    12 年前
    function hook_form_alter(&$form, $form_state, $form_id) {
       if ($form_id == 'node_form') {    
         drupal_set_message(t('some message.'));
       }  
    }
    

    首先,必须将关键字“挂钩”到模块关键字。假设您的模块名是“联系我们”,那么

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

    现在这个函数有三个变量

    1. $表格
    2. 美元格式
    3. 美元形式

    表单更改过程中最重要的变量是$form_id,它基本上记录了页面中加载的表单。

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

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

    注意:检查您是否正确地编写了自定义模块并启用它。同时清除缓存