web-dev-qa-db-ja.com

モジュールのコメントフォームを有効/無効にしますか?

特定の条件に応じて、カスタムモジュールを介して、特定のノードのコメントフラグを1または2に設定します(コメントフォームを表示または非表示にするため)。

私はhook_node_viewを使用してみましたが、このアプローチは機能していないようです:

 function custom_node_view($ node、$ view_mode、$ langcode){
 $ node-> comment = 1; 
} 

コメントフラグを明示的に1に設定しても、特定のノードでは2のままです。フラグを設定した直後にdpm($node);を実行すると、正しい値が開発情報に表示されますが、コメントフォームは引き続き表示されます...

Comment.moduleによると、値は次のとおりです。

/**
 * Comments for this node are closed.
 */
define('COMMENT_NODE_CLOSED', 1);

/**
 * Comments for this node are open.
 */
define('COMMENT_NODE_OPEN', 2);

プログラムでコメントフォームを表示/非表示にするために使用する必要がある別のフックはありますか?

3
geerlingguy

Hook_node_load()内でコメント表示を正しく設定できるようです。これはプロセスの少し前に実行され、comment.moduleに特定のノードのフォームを表示しないように指示していると思います。

これが私が最終的に実装したものの例です:

<?php
/**
 * Implements hook_node_load().
 */
function custom_node_load($nodes, $types) {
  foreach ($nodes as $node) {
    $node->comment = COMMENT_NODE_CLOSED; // to close comments
  }
}
?>
4
geerlingguy