Travailler avec le module Comment

Posté le: jeu 22/11/2018 - 15:13 Par: rcowebdev
comment

 

Déjà on commence par activer le module Comment s'il n'est pas déjà activé en se rendant dans

/admin/modules

Il faut regarder les permissions aussi c'est à dire préciser à qui on donne la permission de poster un commentaire: un visiteur anonyme, un utilisateur enregistré ou à un des administrateurs.

/admin/people/permissions

Après il suffit d'ajouter un champ Comment au type de contenu concerné (Article dans mon cas). Là on est bon, on a un formulaire sur chaque page du type concerné.

default comment

Bon, par contre, ca m'a rajouté tout un tas de liens partout; dans les listes ainsi que sur les pages ce que je ne souhaitais pas forcément.

Sur les listes :

comment link list

 

Et sur les articles : 

comment link node

Malheureusement, ces liens ne sont pas administrables, donc pour les supprimer il va falloir ruser ! On va éviter la solution facile du display:none; mais plutôt tâcher de le faire proprement - sans dépendre du thème - et pour se faire il faut surcharger quelques fichiers. Et bien, je crois que c'est parti pour la création d'un nouveau module (tout petit, promis) qu'on va nommer comment_overwrite !

La structure des fichiers :

/root
-- modules
---- custom
------ comment_overwrite
--------- src
----------- CommentLinkBuilder.php
----------- comment_overwrite.info.yml
----------- comment_overwrite.services.yml

CommentLinkBuilder.php

<?php

namespace Drupal\comment_overwrite;

use Drupal\comment\CommentLinkBuilder as Base;
use Drupal\Core\Entity\FieldableEntityInterface;

class CommentLinkBuilder extends Base{
  public function buildCommentedEntityLinks(FieldableEntityInterface $entity, array &$context) {
    return [];
  }
}

Alors c'est assez radical, en gros, ca ne crée aucun lien pour l'entité concernée et c'est ce dont j'avais besoin, après s'il en faut quelques uns, il faut jouer avec le tableau context et profiter des méthodes de l'objet entity.

Les YML comme d'hab.

comment_overwrite.info.yml

name: Comment Overwrite
description: Overwrite Comment native module
package: Custom

type: module
core: 8.x

comment_overwrite.services.yml

services:
  comment.link_builder:
    class: Drupal\comment_overwrite\CommentLinkBuilder
    arguments: ['@current_user', '@comment.manager', '@module_handler', '@string_translation', '@entity.manager']

Pas grand chose à dire sur ces YML, juste peut-être éviter de nommer son module personnalisé Comment comme je l'ais fait au début, je n'avais pas fait attention et Drupal n'a pas aimé du tout, à raison (il connait déjà un module Comment lui... ) 

On vide le cache et on active notre nouveau venu.

comment overwrite module

 

En se rendant sur les listes et les pages, les liens "indésirables" ont disparu :)

no comment link

C'est bien, on a notre formulaire, fonctionnel sur chaque article sans ces liens encombrants mais ... oui il y a un mais

IL FAUT LE SECURISER !

 

Les champs de formulaire sont protégés dans Drupal - pour les modules natifs j'entends - mais personne n'est à l'abri d'une attaque (notamment par SPAM qui pourrait poluer la BDD, ou pire, faire tomber le site). Une solution pratique et simple à mettre en oeuvre sur Drupal 8 est celle du CAPTCHA et pour ma part j'ai choisi reCAPTCHA de Google.

Mots clés
Drupal 8