【问题标题】:How to add a disclaimer above the comments form?如何在评论表上方添加免责声明?
【发布时间】:2010-09-20 22:47:10
【问题描述】:

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

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

我知道这可能是一个业余级别的问题,但我们不胜感激。谢谢。

编辑: 我已经尝试按照建议实施 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]

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

编辑(还原): 实现了以 template.php 为中心的解决方案。它能够在没有任何上述外部影响的情况下正常工作。仍然不确定上述问题的解决方案。谢谢大家。

【问题讨论】:

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


    【解决方案1】:

    评论表单在 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,那应该很容易。

    当然,添加主题功能后一定要重建主题注册表。

    【讨论】:

    • 我尝试实现这个 template.php 解决方案,它能够做我想做的事而没有任何奇怪的副作用。我同意,因为这是一个小的主题升级(“在此处显示一些 html”),创建一个新模块可能不是最简单的解决方案。
    【解决方案2】:

    虽然 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。

    【讨论】:

    • 我认为“创建一个自定义模块来完成例行主题练习,因为你不想注册 mytheme_theme”需要更多的工作:)
    • @anschauung 当我创建网站时,我通常有很多模块可以放入其中。
    • 哦,我也是。但是问一个基本主题问题的人可能还没有到那个时候:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多