如何在评论表单上方添加免责声明?

时间:2010-09-20 22:47:11

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

我正在寻找一种好的,标准友好的方式来更改默认评论表单,以便在“回复”标题下面有一个免责声明。我只希望此免责声明显示在评论表单上方,而不是在查看评论时显示。

这个帖子(Drupal: adding disclaimer text above the submit button in a webform)部分回答了我想要的内容,但我不确定如何将解决方案专门应用于评论表单。

我知道这可能是一个排名业余的问题,但任何和所有帮助都表示赞赏。感谢。

编辑: 我已经尝试按照建议实现hook_form_alter,并设法让免责声明显示在表单中。一个问题:在回复评论时,我的免责声明的初稿似乎被困在评论表格之上。清除缓存,重置主题注册表(在每个页面加载,感谢devel模块)都没有效果。

Reply to Comment:
[first version of disclaimer] // won't go away, ever
[comment form]
[current version of disclaimer] // this one is fine
[submit button]

这里的任何帮助都将再次受到赞赏。

编辑(redux): 实现了template.php中心解决方案。如上所述,没有任何外部影响,它能够正常工作。仍不确定解决上述问题的方法。谢谢大家。

2 个答案:

答案 0 :(得分:4)

评论表单是Drupal表单中的一个独特的动物,因为默认情况下它不是主题,所以如果没有一些额外的帮助,通常的方法将无法工作。

简而言之,您首先需要在template.php文件中将表单注册为主题:

/**
* Implementation of hook_theme().
*/
function mytheme_theme(){
  return array(
    'comment_form' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

接下来,您可以添加一个主题功能,以便在表单中添加一些其他元素:

/**
* Theme the output of the comment_form.
*
* @param $form
*   The form that  is to be themed.
*/
function mytheme_comment_form($form) {
  $form['new_element'] = array(
    '#type' => 'markup',
    '#title' => t('Disclaimer'),
    '#value' => '<p>You have been disclaimed, sir!</p>',
    '#weight' => -20 // Lighter elements float to the top of the form
  );
  return drupal_render($form);
}

了解Forms API(http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html)的工作原理将帮助您完成这些编辑。但是,如果你只是添加一些HTML,那应该很容易。

当然,在添加主题功能后,请务必重建主题注册表。

答案 1 :(得分:4)

虽然anschauung发布的内容可行,但与在自定义模块中使用hook_form_alter相比,这是一项额外的工作。在你的情况下,它看起来像这样,使用密切相关的hook_form_FORM_ID_alter

function module_name_form_comment_form_alter(&$form, &$form_state) {
    $form['disclaimer'] = array(
      '#value' => t('Disclaimer text'),
      '#prefix' => '<div>',
      '#suffix' => '</div>',
      '#weight' => 0,  
    );
}
  • 在上面的示例中,您需要将module_name替换为您创建的自定义模块的名称。
  • #weight将决定展示位置,展位越高,展位越高。所以调整它直到放置正确。
  • #prefix#suffix是在元素之前和之后创建的标记,可以是任何内容。
  • #value表单元素的值,实际的免责声明文本。
  • 此表单元素没有#type,因此它使用默认值markup,这意味着它只是一些自定义html。