刚开始用Drupal搭建网站的时候就开启了留言Comment功能,验证码Captcha是必须启用的,否则垃圾信息会迅猛增加,而当子网站数量、系列网站增多(例如有几十、几百个)以后,因为查看哪些网站有留言就太麻烦了,只好基本上都关闭了留言功能,只保留了少数几个交互性比较强、内容必须由用户来提供的网站开启留言等功能。
考虑到网站的未来发展,还是需要尽量让用户参与网站的互动,所以近期准备把留言功能再打开,其中有两点是必须的:开启验证码和邮件提醒,而且因为涉及到的站点多,初次设置及未来修改还需要能够批量进行才好。
这里把最近的一些尝试记录下来,注意前提是安装了drush命令行方式,多站点就用linux脚本来循环批量设置,如果需要开启的模块还没有下载的话,需要先下载再开启:
Drupal 7:
# 开启相关模块 drush en comment -y #开启评论 drush en trigger -y #开启触发器 drush en contact -y #开启联系 drush en token -y #开启令牌 drush en captcha -y #开启验证码 drush en image_captcha -y #开启图片验证码 # 修改匿名用户、注册用户权限 drush ev 'user_role_grant_permissions(1, array("post comments"));' #给予匿名用户发帖权限 drush ev 'user_role_grant_permissions(1, array("access site-wide contact form"));' #给予匿名用户使用联络表单权限 drush ev 'user_role_revoke_permissions(1, array("use text format filtered_html"));' #不允许匿名用户使用过滤的html格式,只能用纯文本格式 drush ev 'user_role_grant_permissions(2, array("post comments"));' #给予注册用户发帖权限 drush ev 'user_role_grant_permissions(2, array("access site-wide contact form"));' #给予注册用户使用联络表单权限 drush ev 'user_role_grant_permissions(2, array("use text format filtered_html"));' #允许注册用户使用过滤的html格式 drush vset comment_anonymous_gongshang 1 #设置匿名用户评论某内容类型时是否可以输入联系方式:0不能、1可以、2必须 # 设置动作、触发器 drush sql-query "INSERT INTO actions (aid, type, callback, parameters, label) VALUES ('1', 'system', 'system_send_email_action', 'a:3:{s:9:\"recipient\";s:15:\"mingluji@qq.com\";s:7:\"subject\";s:61:\"[comment:author] at [comment:node:title] post [comment:title]\";s:7:\"message\";s:46:\"From:[comment:node:url] Comment:[comment:body]\";}', 'send email to admin');" #直接修改actions表,添加send email to admin这个动作,注意insert只能执行一次,如果修改的话,再用update命令 drush sql-query "INSERT INTO trigger_assignments (hook, aid, weight) VALUES ('comment_presave', '1', 1);" #直接修改trigger_assignments表,添加评论预保存时触发send email to admin这个动作,注意insert只能执行一次,如果修改的话,再用update命令 # 设置每个页面是否开启评论:0不能(默认)、1关闭(只读)、2开放(读写)comments are allowed on this node: 0 = no, 1 = closed (read only), 2 = open (read/write) drush sql-query "UPDATE node SET comment = 2 WHERE type = 'gongshang';" #直接修改node表,设置gongshang内容类型的每个页面是否允许留言 drush sql-query "UPDATE node_revision SET comment = 2 WHERE nid IN (SELECT nid FROM node WHERE type = 'gongshang');" #直接修改node_revision表,也是以上目的 # 设置验证码 drush vset captcha_default_challenge "image_captcha/Image" #设置默认的验证方式为图片验证码 drush sql-query "UPDATE captcha_points SET captcha_type = 'default' WHERE captcha_points.form_id = 'comment_node_gongshang_form';" #直接修改captcha_points表,让gongshang评论使用默认的验证方式 drush sql-query "UPDATE captcha_points SET captcha_type = 'default' WHERE captcha_points.form_id = 'contact_site_form';" #直接修改captcha_points表,让“联系网站”功能使用默认的验证方式 # 2016-4-13补充:中文网站留言的地方如果提示是“Comment”就不太友好,可以修改为“评论”更好,这时需要修改“field_config_instance”表中“comment_body”字段中“label”的值,可以运行: drush ev '$field=field_info_instance("comment","comment_body","comment_node_hangye");$field["label"]="评论";field_update_instance($field);' #其中hangye是内容类型的机器码。
有留言时发送e-mail给管理员
[site:mail]
[comment:author]在“[comment:node:title]”发布留言“[comment:title]”
from:[comment:node:url]
Comment:[comment:body]
Drupal 6:
# 开启相关模块 drush en comment -y #开启评论 drush en trigger -y #开启触发器 drush en contact -y #开启联系 drush en token -y #开启令牌 drush en captcha -y #开启验证码 drush en image_captcha -y #开启图片验证码 drush en permissions_api -y #开启修改权限的api drush en permissions_reset -y #开启重置权限(可以查看权限列表) # 修改匿名用户权限 drush perm-grant --roles='anonymous user' --permissions='access comments' #匿名用户可以查看评论 drush perm-grant --roles='anonymous user' --permissions='post comments' #匿名用户可以发布评论 drush perm-grant --roles='anonymous user' --permissions='access site-wide contact form' #匿名用户可以使用联络网站表单 drush perm-grant --roles='authenticated user' --permissions='access comments' #注册用户可以查看评论 drush perm-grant --roles='authenticated user' --permissions='post comments' #注册用户可以发布评论 drush perm-grant --roles='authenticated user' --permissions='access site-wide contact form' #注册用户可以使用联络网站表单 drush perm-grant --roles='admin' --permissions='access comments' #管理员可以查看评论 drush perm-grant --roles='admin' --permissions='post comments' #管理员可以发布评论 drush perm-grant --roles='admin' --permissions='administer comments' #管理员可以管理评论 drush perm-grant --roles='admin' --permissions='post comments without approval' #管理员户可以不需要审核而发布评论 #不允许匿名用户使用过滤的html格式,只能用纯文本格式,设置办法还没有找到 drush vset comment_anonymous_gongshang 1 #设置匿名用户评论某内容类型时是否可以输入联系方式:0不能、1可以、2必须 drush vset comment_form_location_gongshang 1 #设置某内容类型评论的表单是放置在页面下方(默认的0是在新页面) # 设置动作、触发器 drush sql-query "INSERT INTO actions (aid, type, callback, parameters, description) VALUES ('1', 'system', 'token_actions_send_email_action', 'a:3:{s:9:\"recipient\";s:15:\"mingluji@qq.com\";s:7:\"subject\";s:88:\"[comment-author-name] post comment [comment-title] @ [comment-node-title] of [site-name]\";s:7:\"message\";s:63:\"From: [node-url]#comment-[comment-cid]\r\nComment: [comment-body]\";}', 'Send tokenized e-mail to webmaster');" #直接修改actions表,添加send tokenized email to admin这个动作,注意insert只能执行一次,如果修改的话,再用update命令 drush sql-query "INSERT INTO trigger_assignments (hook, op, aid, weight) VALUES ('comment', 'insert', '1', 1), ('comment', 'update', '1', 1);" #直接修改trigger_assignments表,添加评论预保存时触发send tokenized email to admin这个动作,注意insert只能执行一次,如果修改的话,再用update命令 # 设置每个页面是否开启评论:0不能(默认)、1关闭(只读)、2开放(读写)comments are allowed on this node: 0 = no, 1 = closed (read only), 2 = open (read/write) drush sql-query "UPDATE node SET comment = 2 WHERE type = 'gongshang';" #直接修改node表,设置gongshang内容类型的每一个页面是否允许留言 # 设置验证码 drush vset captcha_default_challenge "image_captcha/Image" #设置默认的验证方式为图片验证码 drush sql-query "UPDATE captcha_points SET captcha_type = 'default' WHERE captcha_points.form_id = 'comment_form';" #直接修改captcha_points表,让所有内容类型的评论使用默认的验证方式 drush sql-query "UPDATE captcha_points SET captcha_type = 'default' WHERE captcha_points.form_id = 'contact_mail_page';" #直接修改captcha_points表,让“联系网站”功能使用默认的验证方式
send tokenized e-mail
标题: [comment-author-name] post comment [comment-title] @ [comment-node-title] of [site-name]
消息:
From: [node-url]#comment-[comment-cid]
Comment: [comment-body]
翻译:
Comment改为留言
E-mail改为邮箱
Homepage原始翻译为“首页”,改为“网址”更合适
2015年12月补充:
在Drupal 6升级到Drupal 7后,action, trigger 机制及actions、trigger_assignments表内容格式有些变化,可以用update的办法来批量修改,先列出各站目前的情况:
drush sql-query "select * from actions where aid=1 or aid=2;" drush sql-query "select * from trigger_assignments;"
根据实际情况,可能需要改动aid,然后再用update命令来更新,例如:
drush sql-query "UPDATE actions SET aid='1',type='system',callback='system_send_email_action',parameters='a:3:{s:9:\"recipient\";s:15:\"mingluji@qq.com\";s:7:\"subject\";s:61:\"[comment:author] at [comment:node:title] post [comment:title]\";s:7:\"message\";s:46:\"From:[comment:node:url] Comment:[comment:body]\";}',label='send email to admin' WHERE aid='1';"
上面是更新actions表的例子,如果测试留言提醒都没有问题,trigger_assignments可以沿用,也可以删除以前trigger_assignments中的项目然后添加新的,或者执行更新命令。
2017年1月24日补充:一些站打开留言功能后流量依然下滑,也很少有正常留言,倒是垃圾留言时常骚扰耗费时间精力,现在把一些英文bizdirlib.com的网站匿名用户留言功能关闭,只需要执行一条命令:
drush ev 'user_role_revoke_permissions(1, array("post comments"));'
2019年7月18日补充:批量设置匿名用户可以使用“联系”表单:
drush ev 'user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array("access site-wide contact form"));' drush ev 'user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array("access site-wide contact form"));'
评论3
关于提交内容前是否预览的设置
下面是设置在博客内容类型提交内容、提交评论时是否需要预览功能的设置:
如果要求提交保存前必须预览,对防范垃圾有一定作用。
drush ev 'user_role_revoke
drush ev 'user_role_revoke_permissions(1, array("post comments"));' #不给匿名用户发帖权限drush ev 'user_role_grant
drush ev 'user_role_grant_permissions(1, array("post comments"));' #匿名用户可以发布评论