【Drupal】Anonymousでもコメントに名前を入力できるようにする
Drupalの機能は全般的にユーザ登録・ログインありきで作ってあるっぽく、コメントに表示される名前もログインしてないユーザはすべて『Anonymous』でした。
これを改造して、ユーザ登録しなくてもコメントに自分の名前を入力できるようにしました。
方針としては、
- 新たにコメントIDとコメント者名を紐付けるテーブルを作成
- 入力時はそのテーブルにIDと名前を入れるようにする
- 出力時はコメントIDが0のときにコメント者名を使用する(コメントID=0のときがAnonymousなので)
思ったより簡単にできた。
詳細は眠いのでまた今度…
==========終了==========
==========再開==========
2004.10.08
台風で家から出られず暇なので続きを書きます。
1.新たにコメントIDとコメント者名を紐付けるテーブルを作成
CREATE TABLE `comments_uname` (
`cid` int(10) NOT NULL default '0',
`uname` varchar(60) NOT NULL default '',
PRIMARY KEY (`cid`)
) TYPE=MyISAM;↑こんな感じの簡単なテーブルを新たに作成。
2.入力時はそのテーブルにIDと名前を入れるようにする
まずコメント入力フォームに名前を入力する欄を作らねばなりません。
comment.moduleの中で、theme_comment_form()という関数が定義されているので、そこをちくちくといじります。
デフォルトでは、ログインしていればログインユーザ名、していなければAnonymousが表示されるようになっています。
// name field:
$form .= form_item(t("Your name"), format_name($user));これ(1250行目付近)を、ログインしていればログインユーザ名ってのはそのままに、ログインしていないときに入力フォームを表示するようにしました。
// name field:
if ($user->uid) {
$form .= form_item(t("Your name"), format_name($user));
} else {
$form .= form_textfield(t("Name"), "uname", $edit["uname"], 50, 64);
}※$user->uid == 0のときがAnonymous
次に、入力した名前をDBに入れなければナリマセン。
同じくcomment.moduleの中のcomment_post()をいじります。
db_query("INSERT INTO {comments} (略) VALUES (略)", (略));このあたり(430行目付近)を
db_query("INSERT INTO {comments} (略) VALUES (略)", (略));
db_query("INSERT INTO comments_uname (cid, uname) VALUES (%d, '%s')", $edit["cid"], $edit["uname"]);こんな感じにすればOK。
3.出力時はコメントIDが0のときにコメント者名を使用する(コメントID=0のときがAnonymousなので)
これもcomment.moduleの中のcomment_render()を変更します。
680行目付近に、
while ($comment = db_fetch_object($result)) {
$comment = drupal_unpack($comment);
(後略)
}というのがあるので、先頭に条件分岐を加えます。
while ($comment = db_fetch_object($result)) {
if ($comment->uid == 0) {
$kotehan_query = "SELECT uname FROM comments_uname WHERE cid = {$comment->cid} LIMIT 1";
$kotehan_result = db_query($kotehan_query);
$kotehan_obj = db_fetch_object($kotehan_result);
if ($kotehan_obj->uname) $comment->name = $kotehan_obj->uname;
}
$comment = drupal_unpack($comment);
(後略)
}Anonymousで名前が入力されていればその名前を、未入力であればAnonymousを表示するようになりました。
【2004/11/04追記】
ver 4.5.0を入れたらネイティブ対応してやがった。orz...
まぁいいことなんだけど。

