ノードの下のコメントを非表示にするが、閉じない方法は?


8

А自分でノードのコメントをリストしたいので(たとえば、ビューによって)、コアコメントモジュールから標準のコメントリストを非表示にする必要があります。私はそのようにすることができます:

  unset($node['comments']['comments']);

しかし、それはコメントのためのDBクエリを妨げません。
だから、コメントモジュールをだますいくつかのクレイジーな方法を見つけました。たとえば、偽の$node->previewプロパティを設定したり、新しいビューモードを作成して標準のnode/%nodeコールバックを上書きしたりします。

ノードの下にコメントを非表示にして、それでも新しいコメントを追加できるようにするのは本当に難しいですか、それとも何かを見逃しましたか?

「非表示」オプションに関する更新

コンテンツタイプの「非表示」値についてはどうですか:
コメントに対して閉じる/開く動作が必要です。しかし、コンテンツタイプに「非表示」を設定すると、新しいコンテンツは非表示ではなく「コメントクローズ」に設定されます(ここにコードがあります)。もう1つの問題は、「コメントを投稿」する権限を持つユーザーがコメントを非表示にすると、コメントを追加できないことです(ここにコードがあります)。
だから私はアイデアを得ることができません。

回答

で見つかったソリューションhook_module_implements_alter()。どうもありがとう!


簡単...コンテンツタイプを編集し、コメント設定で[非表示]を選択します。これによりコメントが非表示になります
subhojit777

@ subhojit777 OPは、私が考えるDBクエリを防ぎたいと考えています。
niksmac 2012

回答:


9

modules / comment / comment.moduleで、hook_node_view()(comment_node_view())が614行目で実行されていることがわかります。ここで、すべてのコメントをロードしてノードにアタッチするために関数が起動されます。最初の2セットのif(){...}は、コメントの追加フォームとアクションリンクを処理しているようです。次に、コードの最後のブロックで最終的にコメントが追加されます。これは、実際に非表示にすることについて最も懸念していることだと思います。パフォーマンス上の理由から、これをスキップしたいと思います。

// Only append comments when we are building a node on its own node detail
// page. We compare $node and $page_node to ensure that comments are not
// appended to other nodes shown on the page, for example a node_reference
// displayed in 'full' view mode within another node.
if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
  $node->content['comments'] = comment_node_page_additions($node);
}

コメントモジュールは特定のハードコードされたビューモードに依存するべきではないため、このコードはばかげていると思います。うまくいけば、これが変更され、UIの設定になります。

とにかく、私はあなたに興味があるかもしれない同様の投稿を見つけました:comment_node_viewの起動を停止する方法はありますか?

基本的に、hook_module_implements_alter()を使用して、コメントモジュールがhook_node_view()を起動できないようにする必要があります。カスタムモジュールに追加する必要があるものは次のとおりです。

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}

1
どうもありがとうございました!特にhook_module_implements_alter
kalabro 2012

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.