web-dev-qa-db-fra.com

comment modifier les commentaires et le formulaire de commentaire

J'essaie de changer la façon dont les commentaires sont affichés dans drupal 7 pour un type de contenu spécifique. J'utilise le thème de la guirlande. Idéalement, je voudrais modifier l'affichage des commentaires dans mon module plutôt que de le faire dans le thème.

J'ai réussi à implémenter hook_form_comment_form_alter pour masquer le nom de l'auteur de cette façon:

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;
  }
}

Maintenant, je voudrais modifier les commentaires pour:

  1. Masquer le lien du titre du commentaire
  2. Masquer les liens "Répondre Supprimer Modifier"

J'ai essayé d'implémenter hook_comment_view_alter() et hook_node_alter() mais ceux-ci ne semblent pas être appelés. Lorsque j'utilise le code suivant, rien ne se passe (pas de sorties krumo et pas de modifications).

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

La seule façon que j'ai trouvée était de modifier garland_preprocess_comment() dans template.php dans le thème guirlande. Mais cela s'applique à tous les types de contenu et j'aimerais également avoir tout mon code dans mon module.

Existe-t-il une bonne façon de procéder?

Comment se fait-il que hook_comment_view_alter() et hook_node_alter() ne semblent pas être appelés?

Remarque J'utilise des panneaux pour ajouter mon contenu. J'ai donc ajouté les commentaires et le formulaire de commentaire en utilisant le module panneaux. Par conséquent, il n'y a pas de champ pour basculer "autoriser le titre du commentaire" comme dans Structure-> Type de contenu-> Paramètres de commentaire. Même si le champ "autoriser le titre du commentaire" n'est pas coché, les titres sont toujours affichés. il semble que les panneaux remplacent ce paramètre d'une manière ou d'une autre.

4
Baba

Pour mettre cela dans mon module, je viens de mettre le code suivant dans mon module:

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

J'ai en fait trouvé une semi-solution qui consiste à modifier garland_preprocess_comment dans template.php en tant que tel:

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;
 }
}

mais je voudrais faire quelque chose de similaire, mais dans mon module plutôt que dans le thème. Quel hook dois-je utiliser ou comment obtenir hook_comment_view_alter ou hook_node_alter pour être réellement appelé dans mon module?

0
Baba

Je ne peux pas dire que c'est la "bonne" façon puisque techniquement vous modifieriez un fichier core, mais normalement la manière la plus simple serait de créer un fichier personnalisé dans le répertoire de votre thème appelé comment.tpl.php Et de faire vos modifications Là. Mais, puisque vous utilisez le thème Garland depuis le noyau, qui a déjà un fichier comment.tpl.php ... Eh bien, toutes les modifications que vous y apporterez seront remplacées la prochaine fois que vous mettrez à jour à la prochaine version de Drupal. De plus, ne pas pirater le noya.

Cela dit, en supposant que vous utilisiez un thème différent, vous pouvez utiliser le fichier comment.tpl.php De Garland comme point de référence et appliquer des modifications mineures comme ceci:

Fichier comment.tpl.php De Garland:

<?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>

Version modifiée pour votre thème:

<?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>

Après avoir effectué de telles modifications, n'oubliez pas de vider le cache afin que les modifications soient reconnues par le système.

0
jerdiggity