当前位置

批量开通Drupal网站留言的验证码及邮件提醒功能

James Qi 在 2015年1月14日 - 18:02 提交
内容摘要:刚开始用Drupal搭建网站的时候就开启了留言Comment功能,验证码Captcha是必须启用的,否则垃圾信息会迅猛增加,而当子网站数量、系列网站增多(例如有几十、几百个)以后,因为查看哪些网站有留......

  刚开始用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_poings表,让“联系网站”功能使用默认的验证方式

# 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_poings表,让“联系网站”功能使用默认的验证方式

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"));'

评论

-- 发自IP地址: 58.48.155.101 (位置 | 谁是)

  下面是设置在博客内容类型提交内容、提交评论时是否需要预览功能的设置:

drush vset comment_preview_blog 0 # 停用博客评论提交前预览
drush vset comment_preview_blog 1 # 可选博客评论提交前预览
drush vset comment_preview_blog 2 # 必须博客评论提交前预览

drush vset node_preview_blog 0 # 停用博客内容提交前预览
drush vset node_preview_blog 1 # 可选博客内容提交前预览
drush vset node_preview_blog 2 # 必须博客内容提交前预览

  如果要求提交保存前必须预览,对防范垃圾有一定作用。

James Qi / 祁劲松

-- 发自IP地址: 46.161.9.39 (位置 | 谁是)

ПОИСКОВОЕ ПРОДВИЖЕНИЕ.
Комплексное интернет-продвижение сайтов без посредников и переплат в одном месте!
Сбор различных баз для продвижения в интернете
Эффективно и недорого. Писать в ICQ 656310373