web-dev-qa-db-ja.com

コメントとコメントフォームを変更する方法

drupal 7で特定のコンテンツタイプに対してコメントを表示する方法を変更しようとしています。ガーランドテーマを使用しています。理想的には、モジュールのコメント表示を変更するのではなく、テーマで。

このようにして、著者名を非表示にするためにhook_form_comment_form_alterを正常に実装しました。

_function mymodule_form_comment_form_alter(&$form, &$form_state, $form_id) {
  //  krumo($form_id);                                                   
  switch($form_id) {
    case 'comment_node_mycontenttype_form':
      hide($form['author']);
      break;
  }
}
_

次に、コメントを次のように変更します。

  1. コメントのタイトルリンクを非表示にする
  2. 「返信削除編集」リンクを非表示にする

hook_comment_view_alter()hook_node_alter()を実装しようとしましたが、これらは呼び出されないようです。次のコードを使用しても、何も起こりません(krumo出力も変更もありません)。

_function mymodule_comment_view_alter(&$build) {
  krumo($build);
}
_
_function mymodule_node_alter(&$build) {
  krumo($build);
  hide($build['links']['comment']['#links']['comment-reply']);
}
_

私が見つけた唯一の方法は、garlandテーマのtemplate.phpのgarland_preprocess_comment()を変更することでした。しかし、これはすべてのコンテンツタイプに適用され、モジュールにすべてのコードを含めたいと思います。

これを行う適切な方法はありますか?

hook_comment_view_alter()hook_node_alter()が呼び出されないのはなぜですか?

コンテンツを追加するためにパネルを使用していることに注意してください。そこで、パネルモジュールを使用してコメントとコメントフォームを追加しました。したがって、構造->コンテンツタイプ->コメント設定にあるように、「コメントタイトルを許可する」を切り替えるフィールドはありません。 [コメントのタイトルを許可]フィールドがオフの場合でも、タイトルは表示されます。パネルが何らかの形でこの設定をオーバーライドしているようです。

4
Baba

これを自分のモジュールに配置するために、実際には次のコードを自分のモジュールに配置しました。

function mymodule_preprocess_comment(&$vars) {
$vars['submitted'] = $vars['created'] . ' — ' . $vars['author'];
switch( $vars['node']->type )
 {
 case 'myContentType':
 $vars['title'] =FALSE;
 $vars['content']['links']['comment']['#links']['comment-reply'] = FALSE;
 $vars['content']['links']['comment']['#links']['comment-edit'] = FALSE;
 $vars['content']['links']['comment']['#links']['comment-delete'] = FALSE;
 break;
 }
} 
2
Baba

実際に、template.phpのgarland_preprocess_commentを次のように変更する半解決策を見つけました。

function garland_preprocess_comment(&$vars) {
 $vars['submitted'] = $vars['created'] . ' — ' . $vars['author'];
switch( $vars['node']->type )
{
  case 'myContentType':
  $vars['title'] =FALSE;
  $vars['content']['links']['comment']['#links']['comment-reply'] = FALSE;
  $vars['content']['links']['comment']['#links']['comment-edit'] = FALSE;
  $vars['content']['links']['comment']['#links']['comment-delete'] = FALSE;
  break;
 }
}

しかし、私は似たようなことをしたいのですが、テーマではなくモジュールで行います。どのフックを使用する必要があるか、または実際にモジュールでhook_comment_view_alterまたはhook_node_alterを実際に呼び出すにはどうすればよいですか?

0
Baba

技術的にはコアファイルを変更するため、これが「適切な」方法であるとは言えませんが、通常、最も簡単な方法は、テーマのディレクトリcomment.tpl.phpにカスタムファイルを作成し、そこに変更を加えることです。 。 ただし、すでにcomment.tpl.phpファイルが含まれているコアのガーランドテーマを使用しているため、これに加えた変更は、次に更新するときに上書きされます。 Drupalの次のリリース。さらに、コアをハックしない

とはいえ、別のテーマを使用している場合は、ガーランドのcomment.tpl.phpファイルを参照ポイントとして使用し、次のような小さな変更を加えることができます。

ガーランドのcomment.tpl.phpファイル:

<?php
?>
<div class="<?php print $classes . ' ' . $zebra; ?>"<?php print $attributes; ?>>

  <div class="clearfix">

    <span class="submitted"><?php print $submitted ?></span>

  <?php if ($new): ?>
    <span class="new"><?php print drupal_ucfirst($new) ?></span>
  <?php endif; ?>

  <?php print $picture ?>

    <?php print render($title_prefix); ?>
    <h3<?php print $title_attributes; ?>><?php print $title ?></h3>
    <?php print render($title_suffix); ?>

    <div class="content"<?php print $content_attributes; ?>>
      <?php hide($content['links']); print render($content); ?>
      <?php if ($signature): ?>
      <div class="clearfix">
        <div>—</div>
        <?php print $signature ?>
      </div>
      <?php endif; ?>
    </div>
  </div>

  <?php print render($content['links']) ?>
</div>

テーマの変更バージョン:

<?php
?>
<div class="<?php print $classes . ' ' . $zebra; ?>"<?php print $attributes; ?>>

  <div class="clearfix">

    <span class="submitted"><?php print $submitted ?></span>

  <?php if ($new): ?>
    <span class="new"><?php print drupal_ucfirst($new) ?></span>
  <?php endif; ?>

  <?php print $picture ?>

    <div class="content"<?php print $content_attributes; ?>>
      <?php hide($content['links']); print render($content); ?>
      <?php if ($signature): ?>
      <div class="clearfix">
        <div>—</div>
        <?php print $signature ?>
      </div>
      <?php endif; ?>
    </div>
  </div>
</div>

このような変更を行った後は、必ずキャッシュをクリアして、変更がシステムに認識されるようにしてください。

0
jerdiggity