我現在使用的 Ajax Comments 是跟據 Squible » Ajax Comments — How I did It 內的方法作出修改的,但因為在該文章內的講解不夠清晰,省略了很多 comments.php 內的修改,我自己要幾番參考及嘗試方能成功地運行,以為將中文亂碼問題解決後,應該沒有什麼問題了,但幸得窩子發現留言者資料不能儲存的問題,才知道原來在 Squible theme 內的 ajax_comments.php 都有 cookie 不能儲存留言者資料的問題,在我修改後終於將問題解決,想到公開出來可能會幫到其他人,所以便寫了這篇文章。
AvP 亦寫了一個 Ajax Comments plugin,內裡的 files 和 Ajax Comments — How I did It 的大同小異,希望 AvP 不會介意,因為我覺得這個 plugin 的作用不大,因為只是將 prototype.js、effects.js 及 ajax_comments.js 等 javascript file 自動 include 在 header 內,不用自行修改 header.php 而已,不過真的多謝 AvP 這麼詳細講解怎樣修改 comments.php,我便不需再花時間講解,詳情請參閱 AvP 的 Ajax Comments 文章,我在這裡只會談及怎樣解決以下的問題:
- 沒有啟動 javascript 支援不能留言
- 中文亂碼
- Cookie 不能儲存留言者資料
1. 沒有啟動 javascript 支援不能留言
原有 Squible theme 內的 comments.php 及 AvP 談及的 comments.php 的修改都有一個問題,就是當 browser 沒有啟動 javascript 支援時,便不能夠留言了,現在我以 AvP 談的修改作基本,將原有 form 的那句由
<form method="post" id="commentform" onsubmit="new Ajax.Updater({success:'comol'}, '<?php bloginfo('siteurl'); ?>/wp-content/plugins/ajaxcom/ajax_comments.php', {asynchronous:true, evalScripts:true, insertion:Insertion.Bottom, onComplete:function(request){complete(request)}, onFailure:function(request){failure(request)}, onLoading:function(request){loading()}, parameters:Form.serialize(this)}); ClearTextDiv(); return false;">改為
<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform" onsubmit="new Ajax.Updater({success: 'commentlist'}, '< ?php bloginfo('stylesheet_directory') ?>/ajax_comments.php', {asynchronous: true, evalScripts: true, insertion: Insertion.Bottom, onComplete: function(request){complete(request)}, onFailure: function(request){failure(request)}, onLoading: function(request){loading()}, parameters: Form.serialize(this)}); return false;">2. 中文亂碼
如果大家是使用 MySQL 4.1.x 而 table 及 database 的 collation 是 utf8_general_ci 的話,有可能會遇到中文亂碼問題,即是當留言即時顯示的時候,所有中文字會變成亂碼,但當 refresh 整頁後,中文字會回復正常。
修改方法是將網頁內容硬性限制使用 UTF-8 編碼,在 ajax_comments.php 內的第 3 行加入
header('Content-type: text/html; charset=UTF-8');即是由原來的
require_once('../../../wp-config.php');
global $comment, $comments, $post, $wpdb, $user_ID, $user_identity, $user_email, $user_url;改為
require_once('../../../wp-config.php');
header('Content-type: text/html; charset=UTF-8');
global $comment, $comments, $post, $wpdb, $user_ID, $user_identity, $user_email, $user_url;3. Cookie 不能儲存留言者資料
至於這個問題,原因是 ajax_comments.php 內根本是缺少了 save cookies 的 codes,所以便出現這個問題,解決方法是在第 63 行加入 save cookies 的 codes,即是為原本
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID');
wp_new_comment($commentdata);
$comment = $wpdb->get_row("SELECT * FROM {$wpdb->comments} WHERE comment_ID = {$wpdb->insert_id};");改為
$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID');
wp_new_comment($commentdata);
if ( !$user_ID ) :
setcookie('comment_author_' . COOKIEHASH, stripslashes($comment_author), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
setcookie('comment_author_email_' . COOKIEHASH, stripslashes($comment_author_email), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
setcookie('comment_author_url_' . COOKIEHASH, stripslashes($comment_author_url), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
endif;
$comment = $wpdb->get_row("SELECT * FROM {$wpdb->comments} WHERE comment_ID = {$wpdb->insert_id};");後話
因為本人的能力有限,實在不懂得怎樣在 Brian's Threaded Comments 內加入這個 Ajax Comments,希望小踢聽到不要介意,亦希望有其他高人能夠幫到小踢及窩子完成這個心願。
未細看文章~ :p
不過, 窩子好像教過羽房, 亦好像成功了...
頭痛中... 所以未能細閱文章, 先謝謝~ :)
呵呵,做成插件加载那几个JS也是让新手少一些麻烦而已,的确没有什么技术含量,^_^。
Cookie这个问题很好啊;我一开始测试就是登录过的,所以一直也没发现这个问题。
小踢:我不知道窩子已經搞定了呢。:sweatdrop:
AvP:我也是一直處於登入狀態,就算登出了,之前 cookie 已經儲了資料,所以我都一直沒有發覺這個問題。
剛剛試安裝了,因為懶的關係,開始是用 AVP 的插件的 :whistling: 只是不知為何每次留這後都會出現 404 error :cold: 這個問題在 AVP兄 的 blog 也有人問過,但好像還沒知道原因。
那唯有用上 Squible » Ajax Comments — How I did It 的正統方法加上 AVP 兄和天佑兄般修改了 comments.php 和 ajax_comments.php。但留這時卻沒有出現預期般的效果 :bye2:
看來這樣拆解這個插件的兼容度還不是太高 :giveup:
TONG:你可以參考 WordPress Ajax Commenting Revisited 這篇文章,講解得很清楚,而且還使用了較新的 script.aculo.us library。
呀,這個我也試過了,還是不行呢... 不若請到我的 blog 隨便試試:
http://blog.hoktong.net
我的 blog 總是有很多問題 :yucky: :thumbdown:
我還是不行呢>
phper:怎樣不行?有沒有參考 WordPress Ajax Commenting Revisited 這篇文章?
谢谢,解决了我遇到的乱码问题
试试看
试试看
[quote comment="什么效果啊"]试试看[/quote]
搜索到這個頁面
想學習