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

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

  •  2
  • ford  · 技术社区  · 15 年前

    我正在寻找一种好的、标准友好的方法来修改默认的注释表单,这样在“reply”标题的正下方就有一个免责声明。我只希望此免责声明出现在评论表单本身的上方,而不是在查看评论时温和。

    这条线( 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 回复  |  直到 15 年前
        1
  •  4
  •   anschauung    15 年前

    在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);
    }
    

    了解如何形成API( http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html )Works将帮助您完成这些编辑。但是,如果您只是添加一些HTML,那么应该非常容易。

    当然,在添加theme函数之后,一定要重建主题注册表。

        2
  •  4
  •   googletorp    15 年前

    虽然安昌所贴的东西会有用,但与使用相比,这是很多额外的工作 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,  
        );
    }
    
    • 在上面的示例中,您需要用您创建的自定义模块的名称替换模块的名称。
    • 这个 #weight 将决定放置的位置,越低,它将被放置的高度越高。所以调整它直到正确的位置。
    • #prefix #suffix 是在元素之前和之后创建的标记,可以是任何内容。
    • #value 表单元素的值,实际免责声明文本。
    • 此表单元素没有 #type ,因此它使用默认值,即 markup 这意味着它只是一些自定义的HTML。
    推荐文章