自定义模块形成问题

时间:2011-11-08 17:26:18

标签: php forms drupal drupal-6 drupal-modules

我在尝试以编程方式显示要在节点页面视图区域中显示的表单时遇到了困难。我在“simplemodule”中有以下代码。

function simplemodule_newcomer_form($form_state){
    $form   =   array();
    $form['simplemodule_newcomer']['name']  =   array(
        '#type'         =>  'textfield',
        '#title'        =>  t('name'),
        '#description'      =>  t(''),
        '#weight'       =>  -1,
    );
    $form['simplemodule_newcomer']['email'] =   array(
        '#title'        =>  t('email'),
        '#type'         =>  'textfield',
        '#description'      =>  t(''),
        '#weight'       =>  0,
    );
    $form['simplemodule_newcomer']['phone'] =   array(
        '#title'        =>  t('telephone No.'),
        '#type'         =>  'textfield',
        '#description'      =>  t(''),
        '#weight'       =>  0,
    );
    $form['submit_button'] =    array(
        '#type' =>  'submit',
        '#value'    =>  'enter',
    );
    return $form;
}

function simplemodule_newcomer_form_submit($form_id, &$form_state){
    //dealing with submitted data
}

此代码有效,但仅限于我的管理菜单中的已定义链接。

我想要做的是让表单在视图模式下在特定节点上显示和提交。因此,它会产生在访问节点时有一个表单要填充的效果。

2 个答案:

答案 0 :(得分:2)

您可以使用hook_nodeapi()实施drupal_get_form()并附上表单:

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

  if ($node->nid == $the_nid && $op == 'view') {
    $node->content['my_additional_field'] = array(
      '#value' => drupal_get_form('simplemodule_newcomer_form'), 
      '#weight' => 10,
    );
  }

}

您可以使用#weight键指定表单中页面上其他内容的相关位置。此外,当你实现这个钩子时,你需要清除Drupal的缓存,以确保它被拾取。

答案 1 :(得分:1)

当然可以使用

hook_form_alter(&$form, &$form_state, $form_id) and 

hook_nodeapi(&$node, $op, $teaser = NULL, $page = NULL)

http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_form_alter/7

http://drupal.org/node/1011692