我正在寻找一种好的,标准友好的方式来更改默认评论表单,以便在“回复”标题下面有一个免责声明。我只希望此免责声明显示在评论表单上方,而不是在查看评论时显示。
这个帖子(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中心解决方案。如上所述,没有任何外部影响,它能够正常工作。仍不确定解决上述问题的方法。谢谢大家。
答案 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,
);
}
#weight
将决定展示位置,展位越高,展位越高。所以调整它直到放置正确。#prefix
和#suffix
是在元素之前和之后创建的标记,可以是任何内容。#value
表单元素的值,实际的免责声明文本。#type
,因此它使用默认值markup
,这意味着它只是一些自定义html。