您在這裡

批量開通Drupal網站留言的驗證碼及郵件提醒功能

James Qi 在 2015年1月14日 - 18:02 發表

  剛開始用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"));'

 

回應

  下面是設置在博客内容類型提交内容、提交評論時是否需要預覽功能的設置:

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 / 祁勁松

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。