CMS freoのページで未承認コメントが表示されない件

20230110_freo_com.jpg

このサイトは国産創作サイト向けコンテンツ管理システム(CMS)freoで構築しています。freoにはいわゆるブログ的コンテンツ用の「エントリー」と固定ページ用の「ページ」があり、それぞれに訪問者からのコメントを受け付けることができます。

ここ数年はサイト自体の動きが少なかったこともあり基本的にコメント受け付けは閉じており、ゲストブックというページでのみコメントフォームを開いていたのですが、そこですら海外スパムの標的になってしまったので「承認後にコメントを表示する」設定にしていました。コメント書き込みがあった場合はメールで通知が来るので管理画面にログイン→確認→スパムじゃなければ承認して初めてサイト上にコメントが表示される、という流れです。

今年に入っててがろぐスキンの配布を開始したので久々にゲストブック以外のページのコメントフォームを開けたのですがメールで通知が来たのでサイトを確認しても何の表示もされていませんでした。管理画面からはいただいたコメントが確認できました。

本来ならページ上でも「管理者の承認待ちです」的な表示がされているはずなのになぜ…?と思い調べてみました。で、原因を突き止めたので対処法の覚書です。今回コメントを頂かなければこれに気づけませんでした。本来の目的の内容にもこの件に関しても非常に感謝しております、ありがとうございます。

当サイトのfreo

  • バージョンは1.21.0
  • 独自にPHP8.1・Smarty3対応カスタマイズ済
  • そのほか細かいカスタマイズをしています

ただ、配布元サイトで配布されているファイルを確認したところ後述の部分は同じだったので素のfreoをそのまま使っていても「ページ」で未承認のコメントがあった場合に何も表示されないというバグはあると思います(1.21.0以前のどのバージョンからそうなっているかは未確認)

libs/freo/internal/page/default.php

242行目

$stmt = $freo->pdo->prepare('SELECT * FROM ' . FREO_DATABASE_PREFIX . 'comments WHERE page_id = :id AND approved = \'yes\' ORDER BY id');

コメントデータをデータベースから読み出す記述なのですがここが「承認済みのもの」に指定されているために未承認のデータは省かれサイト上では「なかったもの」のように扱われてしまっています。これを下記のように修正すると

$stmt = $freo->pdo->prepare('SELECT * FROM ' . FREO_DATABASE_PREFIX . 'comments WHERE page_id = :id ORDER BY id');

未承認のコメントがある場合にサイト上には「管理者の承認待ちです」的な表示をすることができます(設定・テンプレートの書き方で変わります)。

ブログ(エントリー)用のコメント読み出し部分は後者のようになっていたので修正は不要だと思います。

おまけ

最初のうちはテンプレートの書き方がどこか間違ったのかを疑っていて原因を突き止めるのが難しそうだなと思ってせめて書き込んでくださった方にコメントは承認後に表示されるよと分かるようにしようと思って無い知恵を絞った方法も置いておきます。

設定管理→コメント設定→「コメント承認の初期値」が「未承認」の場合に専用メッセージを表示する

テンプレートのview(エントリー)またはpage(ページ)/default.htmlのコメント表示部分の任意の場所に

<!--{if $freo.config.comment.approve == 'no'}-->コメント承認の初期値が未承認の場合に表示したいもの<!--{/if}-->

と追記します。自分はこんな感じにしました(画像赤枠内が追記した部分)。
20230110_freo_com_2.jpg