freoのコメント表示のカスタマイズ

freo のコメント周りのカスタマイズネタです。

メールアドレスを管理人(と記事投稿者)にだけ見えるようにする

デフォルトのテンプレートだとコメント投稿時にメールアドレスを記入してもらうと mail:to リンクで表示されちゃいます。こうなってるとスパムのターゲットにもなりやすく、メアドの記入をためらう人も多いと思います(コメントにメアドが必要かどうかはここではおいておきます)。そこで、メアドが記入された場合は管理画面にログインしたサイト管理者と記事投稿者のみにだけ表示させるカスタマイズをしました。

templates/view/default.html の135行目

<!--{if $comment.mail}--><li><a href="mailto:{$comment.mail}">メールアドレス</a></li><!--{/if}-->

を以下のように書き換えます。

<!--{if $comment.mail and ($freo.user.authority == 'root' or $freo.user.authority == 'author')}--><li><a href="mailto:{$comment.mail}">メールアドレス</a><!--{/if}-->

メールアドレスを数値参照で表示する

別にメアドが訪問者全員に見えちゃってもいいけどスパムのターゲットにはなってほしくない場合は

<!--{if $comment.mail}--><li><a href="mailto:{$comment.mail|escape:hexentity}">メールアドレス</a></li><!--{/if}-->

とするとメールアドレスが数値参照で表示されます。人的なスパムには無力かもしれませんがメアド収集ロボットとかには効果があるかもしれません。

ログインしてても名前などを入力できるようにする

freo はデフォルトではログインした状態でコメントしようと思うと本文入力欄しか表示されません。これを名前はその都度入力できるようにしたいと某所で質問があったのでそこで答えたのを引っ張ってきました。

<!--{if !$freo.user.id}-->
 <dt>名前</dt>
 <dd><input type="text" name="comment[name]" size="30" value="{$input.comment.name}" /></dd>
 <dt>メールアドレス</dt>
 <dd><input type="text" name="comment[mail]" size="30" value="{$input.comment.mail}" /></dd>
 <dt>URL</dt>
 <dd><input type="text" name="comment[url]" size="30" value="{$input.comment.url}" /></dd>
<!--{/if}-->

この一行目 <!--{if !$freo.user.id}--> の位置をずらします。名前だけ記入できるようにするなら以下。

 <dt>名前</dt>
 <dd><input type="text" name="comment[name]" size="30" value="{$input.comment.name}" /></dd>
<!--{if !$freo.user.id}-->
 <dt>メールアドレス</dt>
 <dd><input type="text" name="comment[mail]" size="30" value="{$input.comment.mail}" /></dd>
 <dt>URL</dt>
 <dd><input type="text" name="comment[url]" size="30" value="{$input.comment.url}" /></dd>
<!--{/if}-->

管理者のコメント表示を特別にする

うまい表現が見つからなかったのですが、もらったコメントに管理者としてレスした場合に他の訪問者のコメントと違った表示をする方法です。

templates/view/default.html の124行目付近

<div class="comment">
 <h3><!--{if $comment.user_id}-->{$freo.refer.users[$comment.user_id].name}<!--{else}-->{$comment.name}<!--{/if}--></h3>

を以下のように書き換えます。

<div class="comment{if $comment.user_id} {$comment.user_id}{/if}">
 <h3><!--{if $comment.user_id}-->{$freo.refer.users[$comment.user_id].name}<!--{else}-->{$comment.name}<!--{/if}--></h3>

こうすると、ログイン状態で書き込んだ時に HTML が <div class="comment hoge"> のようになります。「hoge(例)」はユーザー登録時に設定したユーザー ID です。ユーザー ID は管理画面の「ユーザー管理」から確認できます。あとはその class に CSSを設定すると管理者のコメント表示だけ他のコメントと差をつけることが出来ます。