剛開始用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"));' #匿名用戶可以發布評論