2

我正在寻找一种良好的、标准友好的方式来更改默认评论表单,以便在“回复”标题下方立即出现免责声明。我只希望这个免责声明出现在评论表单本身的上方,而不是仅仅在查看评论时出现。

该线程(Drupal:在网络表单中的提交按钮上方添加免责声明文本)部分回答了我想要的内容,但我不确定如何将解决方案专门应用于评论表单。

我知道这可能是一个级别的业余问题,但任何和所有的帮助都是值得赞赏的。谢谢。

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

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 为中心的解决方案。它能够在没有任何上述外部影响的情况下正常工作。仍然不确定上述问题的解决方案。谢谢大家。

4

2 回答 2

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,它应该很容易。

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

于 2010-09-21T01:35:06.453 回答
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。
于 2010-09-21T07:29:14.903 回答