Posted by moyassy on March 4, 2015 at 3:05pm
いつもお世話になっております。moyassyと申します。
amazonのカスタマーレビューのような機能を実現する為にコメントにfivestarモジュールを組み合わせてそれらしき物を実現しています。
今回投稿したレビューにコメントする機能も欲しくなったのでreviewsモジュールというモジュールを改造して、タイトルを追加しfivestarモジュールを使った星評価を投稿できるようにしてレビュー機能を実現させました。
改造したモジュール自体は今の所問題なく動作しているのですが、一点だけ。モジュールで追加した件のレビューにコメントを投稿できるようにしたいのです。
何処をどう触れば自分で追加したレビューにコメント欄が導入されるのでしょうか?
色々と調べてhook_comment_insertというのを見つけたのですが、これをreviewsモジュール内に書けば良いのか、それとも別途モジュールを作らなければならないのか・・・
出来ればUIで設定できるようになると嬉しいのですが、何分素人な物で何をどうすれば良いのか見当が付きません。
御教授の程、よろしくお願いいたします。
Comments
hook_comment_insertはコメントが新規登録
hook_comment_insertはコメントが新規登録された後に任意の処理を行うためのフックです。
これを実装してコメントとreviewsのデータを関連付けするような処理を書く、という方向性は合っています。
reviewsのデータは、reviewsという独自テーブルに保存されるようになっており、
実体はノードではありません。
しかし、commentモジュールのデータはノードと紐づく設計となっているため、
特定のreviewにコメントをつける事は標準の機能ではできなさそうです。
hook_comment_insertでコメントとreviewsのデータを紐付けるような処理を書けば、
目的の事はできそうです(UIの作りこみも別途必要ですが)。
実装はreviewsモジュールではなく、新規にモジュールを作成した方が良いです。
理由は、reviewsモジュールに手を入れるとセキュリティ更新の度に手を入れた部分の再修正が必要になるためです。
すでにfivestarと連動するための修正をされたようですが、セキュリティの要件が厳しい使い方をするのなら、
この部分も別にモジュールを作って実現した方が望ましいです。
分かりやすい解説、ありがとうございます
そうですね、冷静に考えたらhook_comment_insertの説明の所に、コメント挿入時云々と書かれていました・・・
現在、User profile commentsというモジュールを見付けたので内容を参考にしながら実現できないかどうかを色々試していた所です。
セキュリティに関する御助言も感謝に堪えません。
reviewsモジュールを改造した際、セキュリティに関してもモジュールに関しても素人なので、取り敢えずreviewsモジュールにレビュー本文に対し書かれていた内容、行われていた処理を、そのままレビューのタイトル欄と星評価欄にも適用するようにはしておきました。
と言ってもド素人なので、セキュリティに役立っていそうな処理はcheck_markup程度しか理解できませんでしたが……
しかし仰る通り、一から組み上げた方がコメント機能にしてもセキュリティにしても安全かもしれませんね。
ちなみに、コンテンツ同士やコンテンツとコメントを紐付けるには具体的にどのような処理をすれば良いのでしょうか?
ちなみに、コンテンツ同士やコンテンツとコメントを紐付けるに
上記は、紐付けたいデータがEntityかどうかで変わってきます。
ノードなどのEntityを他のEntityに紐付ける場合は、Entity Referenceモジュールを導入するのが簡単です。この方法だとUIから設定可能です。
しかし、reviewsのデータはEntityではなく、フィールドをUIから追加できる機能も持っていないので、上記の方法は使えなさそうです。
データ的には、reviewsテーブルのrid(review id)とcommentテーブルのcid(comment id)が紐付けば良いので、この2つのカラムを持つテーブルを追加し、hook_comment_insert でテーブルにレコードを追加する、といった方法が考えられます。
ありがとうございます。助かりました!
Entity Reference!こんな便利なモジュールがあったんですね。
自分でも色々探したつもりだったのですが、完全に見落としていたようです。
完全に手詰まりになっていたので、どうしようかと思っていました。ありがとうございます。
一先ずは大人しくレビューを作り直して、Entity Referenceで紐付けすることにしました。
教えて頂いたridとcidを直接紐付けする方法もその後で試してみます。
自分の技術で実際の使用に耐え得る物が出来るかどうかは分かりませんが、折角教えて頂いたので勉強も兼ねて・・・
とにかく、丁寧な解説本当にありがとうございました!