Date de publication: le lundi 3 septembre 2007 à 22h19
Dernière modification: par Pascal BOYER le mardi 30 octobre 2007 à 20h04
« Article précédent: eZ Publish : lien Prec. et Suiv.
» Article suivant: eZ publish : crontab et runcronjobs.php
Commentaires : hypothèse de départ
- les visiteurs utilisent Firefox (je ne présente pas l'adaptation des règles CSS pour IE. Et y a du boulot... ! )
- on veut que les visiteurs anonymes puissent laisser des commentaires sans avoir à se loguer
- les commentaires ne seront pas modérés
- les utilisateurs doivent pouvoir commenter les commentaires (commentaires imbriqués)
En clair, voici ce que l'on souhaite obtenir:
Fig. 1: Exemple de commentaires imbriqués c'est à dire de commentaire de commentaire
Commentaires : configurer les classes d'objets
Pour la suite de l'article, on supposera que l'on ne souhaite ajouter des commentaires qu'au bas des objets instanciés à partir de la classe Article dont l'identifiant est article.
Une fois le système de commentaire configurer, il peut fonctionner avec n'importe quel type d'objet configurer à cet effet.
Pour que les objets article puissent être commentés il faut que la classe d'objet article possède un attribut basé sur le datatype Case à cocher comme l'illustre l'image ci-dessous:
Fig. 2: L'attribut Enable comments basé sur le datatype Case à cocher
Lorsqu'une classe d'objet possède un tel attribut, voici l'affichage qu'il produit lors de la création ou de l'édition d'un objet de cette classe:
Fig. 3: Affichage produit lors de l'édition de l'objet d'une classe possédant un attribut enable_comments ( Autoriser commentaire en français)
Pour tous objets que l'on souhaite commenter il faut s'assurer que leur classe possède un tel attribut et l'ajouter dans le cas contraire.
Commentaires : activer le droit create
Pour que chaque visiteur puisse ajouter un commentaire il est nécessaire d'attribuer les bons droits au groupe Anonymous. Pour cela, procédez comme suit:
-
Cliquez sur l'onglet Comptes utilisateurs puis sur le lien Rôles et droits situé en bas à gauche:
Fig. 4: Affichage de la liste des rôles du système
-
Pour éditer les droits assignés au rôle Anonymous, cliquez sur l'icône d'édition (représentant un crayon et placé à l'extrême droite de la ligne Anonymous):
Fig. 5: Affichage des droits déjà assignés au rôle Anonymous
-
Ajoutez à présent un nouveau droit en cliquant sur le bouton Nouvelle politique de sécurité:
Fig. 6: Première étape de la configuration du droit de création de commentaires assigné au rôle Anonymous
On commence par indiquer le module (content) puis la fonction ( create) que l'on souhaite assigner.
-
Cliquez ensuite sur le bouton Accorder un accès limité pour paramétrer le droit de création:
Fig. 7: Sélection des limitations du droit create
- Dans le champ Class on choisit la classe d'objet à laquelle s'applique le droit create. Il s'agit donc bien de la classe Comment.
- Dans le champ Section, on définit les sections dans lesquelles on pourra créer des commentaires.
-
Dans le champ ParentClasse on définit les classe des objets pour lesquels on pourra laisser un commentaire.
IMPORTANT: Dans le champ ParentClass il est très important que la classe comment soit sélectionnée pour que le système autorise les visiteurs à commenter les commentaires. - Dans le champ ParentDepth on définit la profondeur, dans l'arborescence, des classes des objets pour lesquels on pourra laisser un commentaire.
- Dans le champ Language on définit les langues des objets pour lesquels on pourra laisser un commentaire.
-
Les limitations définies, validez en cliquant sur le bouton OK:
Fig. 8: Affichage du nouveau droit create et des limitations associées
-
Enfin, terminez la procédure en cliquant sur le bouton OK du cadre de la figure 8:
Fig. 9: La procédure d'assignation au rôle Anonymous du droit de création de commentaire est terminée
Commentaires : configurer le code des templates
Je précise que je n'installe jamais de site web en partant d'une installation de type website . Je parts toujours d'un type Plain.
:
Cependant, lorsque je souhaite configurer le comportement de mon site public, j'ai pris l'habitude de regarder d'abord ce que propose un site de type
website
car je trouve qu'il présente de bonnes idées que je n'hésite pas à copier, améliorer, adapter. Je trouve à cela plusieurs avantages:
- Ce me permet de comprendre comment fonctionne le système,
- de ne pas réinventer la roue,
- de récupérer du code écrit par des pros
En l'occurrence, dans le cas qui nous intéresse, le code que l'on trouve dans le template de surcharge par défaut, à savoir:
design/plain/override/templates/full/article.tpl
est identique à celui que l'on peut trouver dans l'extension Website.
Le template article.tpl
On supposera que le siteaccess public se nomme sitepublic, que le design associé est plain et que la règle de surcharge suivante est définie dans le fichier de surcharge override.ini.append.php de ce même siteaccess:
[articles] Source=node/view/full.tpl MatchFile=full/articles/article.tpl Subdir=templates Match[class_identifier]=article
Ceci qui implique que le fichier article.tpl se situe dans:
design/plain/override/templates/full/articles/article.tpl
Voici le code devant être présent au bas du template de surcharge article.tpl:
80 {if $node.data_map.autoriser_commentaires.data_int} 81 <div id="cadre_general_commentaires"> 82 <p class="commentaires">{"Comments"|i18n("design/base")}</p> 83 {* On regarde si l'utilisateur à le droit de créer des commentaires *} 84 {if fetch( 'content', 'access', hash( 'access', 'create', 85 'contentobject', $node, 86 'contentclass_id', 'comment' ) )} 87 88 <form method="post" action={"content/action"|ezurl}> 89 <input type="hidden" name="RedirectURIAfterPublish" value="/content/view/full/{$article_id}" /> 90 <input type="hidden" name="RedirectIfDiscarded" value="/content/view/full/{$article_id}" /> 91 <input type="hidden" name="ClassIdentifier" value="comment" /> 92 <input type="hidden" name="NodeID" value="{$node.object.main_node.node_id}" /> 93 <input type="hidden" name="ContentLanguageCode" value="{ezini( 'RegionalSettings', 'Locale', 'site.ini')}" /> 94 {* J'ai supprimé la valeur de "value" car impossible de gérer le positionnement du texte du bouton avec du CSS *} 95 <input class="input_button" type="submit" name="NewButton" value="{' '|i18n( 'design/base' )}" /> 96 </form> 97 {else} 98 <p>{'%login_link_startLog in%login_link_end or %create_link_startcreate a user account%create_link_end to comment.'|i18n( 'design/ezwebin/full/article', , hash( '%login_link_start', concat( '<a href="', '/user/login'|ezurl(no), '">' ), '%login_link_end', '</a>', '%create_link_start', concat( '<a href="', "/user/register"|ezurl(no), '">' ), '%create_link_end', '</a>' ) )}</p> 99 {/if} 100 101 {foreach fetch_alias( comments, hash( parent_node_id, $node.node_id ) ) as $comment} 102 <div id="cadre_commentaires"> 103 {* Ici on place un template comment.tpl dans templates/line/ (ce qui n'est pas en accord avec la doc) 104 et c'est tout bon - vider les caches *} 105 {node_view_gui view='line' content_node=$comment} 106 </div> 107 {/foreach} 108 {* S'il y a des comentaires, on ajoute 2 sauts de lignes sous le dernier des commentaires pour que le bouton 109 Ajouter un commentaire soit correctement placé *} 110 {if $comment} 111 <br /> 112 <br /> 113 {/if} 114 115 </div> {* cadre_general_commentaires *} 116 {/if}
- Ligne 80: autoriser_commentaires doit être remplacer par l'identifiant du datatype Case à cocher de la classe article. Pour être en accord avec la figure 2, le code devrait contenir enable_comments à la place de autoriser_commentaires.
- La ligne 89: sert à la redirection après publication d'un commentaire (voir plus bas) et implique la définition de la variable $article_id comme ceci, quelque part dans le template:
{let article_id=$node.node_id}
- Lligne 90: sert à la redirection en cas d'annulation de la procédure de publication d'un commentaire (voir plus bas). On utilise ici la même variable que celle utilisée par la redirection après publication.
- Ligne 95: le bouton ajouté par cette ligne est celui en rouge en haut à droite sur la figure 1.
- ATTENTION: dans le code présenté, et comme l'indique le commentaire, j'ai supprimé le nom du bouton car j'utilise une image de fond contenant également le nom du bouton.
- Lignes 80 à 96: on regarde si la case à cocher Autoriser commentaire (figure 3) est cochée. Puis on contrôle que l'utilisateur a le droit de créer des objets de la classe comment. Si c'est le cas alors on affiche le bouton (ligne 93 - bouton rouge en haut à droite sur la figure 1)
- Lignes 96 à 98: si l'utilisateur n'a pas le droit de créer des commentaires alors on affiche un message qui lui demande de se loguer.
-
Lignes 101 à 107: on utilise la fonction prédéfinie comments ( fetch_alias indique l'usage de fonctions prédéfinies dans le fichier settings/ fetchalias.ini ) pour retrouver tous les commentaires de premier niveau liés à l'article et pour chacun d'eux on utilise le template de vue templates/nove/view /line.tpl (voir
node_view_gui
- à noter que par défaut il existe une surcharge dans override.ini.append.php).
Les commentaires de premier niveau sont encadrés en pointillés rouge sur la figure 1.
:
L'appel au template de vue templates/override/line/ comment.tpl va permettre, après l'avoir modifier, de rechercher les commentaires des commentaires. Par défaut ce template ne fait qu'afficher les commentaires de premier niveau.
- Lignes 109 et 110: les boutons dont il est question dans ces deux lignes de commentaire sont les boutons en pointillés rouge en bas à gauche sur la figure 1.
Le template comment.tpl
Ce template est un template de surcharge ainsi définie par défaut dans le fichier override.ini.append.php du siteaccess public:
[line_comment] Source=node/view/line.tpl MatchFile=line/comment.tpl Subdir=templates Match[class_identifier]=comment
Il est placé, par défaut, dans le design de repli base:
design/base/override/templates/line/comment.tpl
Il faut en créer une copie dans le design du siteaccess public.
Commencez par créer le répertoire nécessaire:
mkdir design/plain/override/templates/line
Puis copiez le template:
cp -p design/base/override/templates/line/comment.tpl design/plain/override/templates/line/
Voici le contenu de ce template:
1 {* comment.tpl - plain/override/templates/line/ *} 2 {* N'affiche que les commentaires de premier niveau *} 3 <div class="auteur_commentaires">{$node.data_map.author.content|wash}</div> 4 <div class="date_commentaires">{$node.object.published|l10n(datetime)}</div> 5 <span class="titres_commentaires">{$node.name|wash}</span> 6 <div class="break"></div> 7 8 <div class="message_commentaires"> 9 <p>{$node.data_map.message.content|wash(xhtml)|break}</p> 10 </div> 11 12 {* On fait appel à la fonction comments_fils que je définis dans le fichier fetchalias.ini 13 Cette fonction a pour but de rechercher les commentaires des commentaires *} 14 {foreach fetch_alias( comments, hash( parent_node_id, $node.node_id ) ) as $comment} 15 <div id="cadre_commentaires_fils"> 16 {* Ici on place un template comment_fils.tpl dans templates/node/view/ (voir doc) et c'est tout bon - vider les caches *} 17 {node_view_gui view='comment_fils' content_node=$comment} 18 </div> 19 {/foreach} 20 21 {* S'il y a des commentaires, on ajoute 2 sauts de lignes sous le dernier des commentaires pour que le bouton 22 Ajouter un commentaire soit correctement placé *} 23 {if $comment} 24 <br /> 25 <br /> 26 {/if} 27 28 {* On regarde si l'utilisateur à le droit de créer des commentaires *} 29 {if fetch( 'content', 'access', hash( 'access', 'create', 30 'contentobject', $node, 31 'contentclass_id', 'comment' ) )} 32 <form method="post" action={"content/action"|ezurl}> 33 <input type="hidden" name="RedirectURIAfterPublish" value="/content/view/full/{$#article_id}" /> 34 <input type="hidden" name="RedirectIfDiscarded" value="/content/view/full/{$#IDIfDiscarded}" /> 35 <input type="hidden" name="ClassIdentifier" value="comment" /> 36 <input type="hidden" name="NodeID" value="{$node.object.main_node.node_id}" /> 37 <input type="hidden" name="ContentLanguageCode" value="{ezini( 'RegionalSettings', 'Locale', 'site.ini')}" /> 38 <input class="input_button" type="submit" name="NewButton" value="Ajouter un commentaire" /> 39 </form> 40 {else} 41 <p>{'%login_link_startLog in%login_link_end or %create_link_startcreate a user account%create_link_end to comment.'|i18n( 'design/ezwebin/full/article', , hash( '%login_link_start', concat( '<a href="', '/user/login'|ezurl(no), '">' ), '%login_link_end', '</a>', '%create_link_start', concat( '<a href="', "/user/register"|ezurl(no), '">' ), '%create_link_end', '</a>' ) )}</p> 42 {/if}
- Lignes 3 à 10: affiche le contenu des attributs des objets Comment de premier niveau.
- Lignes 12 à 19: on utilise à nouveau la fonction prédéfinie comments pour regarder, cette fois-ci, si chaque commentaire de premier niveau possède lui même un commentaire (ce sont les commentaires de second niveau). Le cas échéant, on appelle un deuxième template de vue comments_fils.tpl (que l'on va créer - voir ci-dessous) et dont le rôle sera d'afficher les commentaires de second niveau et plus.
- Lignes 29 à 31: contrôle que l'utilisateur a le droit de créer des objets de la classe comment.
- Lignes 32 à 39: si c'est le cas alors on affiche le bouton (ligne 37 - les boutons verts en bas à droite sur la figure 1)
:
Lignes 33 et 34: les variables précédées d'un symbole # sont des variables globale et sont donc disponibles dans chaque template.
- Lignes 40 à 42: si l'utilisateur n'a pas le droit de créer des commentaires alors on affiche un message qui lui demande de se loguer.
Le template comments_fils.tpl
Ce template a vocation d'afficher les commentaires de niveau 2 puis de regarder si ces commentaires ont eux-même des commentaires et de les afficher puis de regarder si ces commentaires de commentaires ont des commentaires etc...
Cette boucle itérative retrouve donc tous les niveaux de commentaire sans exception.
Ce template, appelé par comment.tpl, est situé dans:
plain/templates/node/view/comment_fils.tpl
...et contient ce code:
1 {* comment_fils.tpl - plain/templates/node/view/ *} 2 3 <div class="auteur_commentaires">{$node.data_map.author.content|wash}</div> 4 <div class="date_commentaires">{$node.object.published|l10n(datetime)}</div> 5 <span class="titres_commentaires">{$node.name|wash}</span> 6 <div class="break"></div> 7 8 <div class="message_commentaires"> 9 <p>{$node.data_map.message.content|wash(xhtml)|break}</p> 10 </div> 11 12 13 {* <p class="commentaires">{"Comments"|i18n("design/base")}</p> *} 14 15 {* On fait appel à la fonction comments_fils que je définis dans le fichier fetchalias.ini 16 Cette fonction a pour but de rechercher les commentaires des commentaires *} 17 {foreach fetch_alias( comments, hash( parent_node_id, $node.node_id ) ) as $comment} 18 <div id="cadre_commentaires_fils"> 19 {* Ici on place un template comment_fils.tpl dans templates/node/view/ et c'est tout bon - vider les caches *} 20 {node_view_gui view='comment_fils' content_node=$comment} 21 </div> 22 {/foreach} 23 24 25 {* On regarde si l'utilisateur à le droit de créer des commentaires *} 26 {if fetch( 'content', 'access', hash( 'access', 'create', 27 'contentobject', $node, 28 'contentclass_id', 'comment' ) )} 29 {*<div id="form_commentaires_fils">*} 30 <p> 31 <form method="post" action={"content/action"|ezurl}> 32 <input type="hidden" name="RedirectURIAfterPublish" value="/content/view/full/{$#article_id}" /> 33 <input type="hidden" name="RedirectIfDiscarded" value="/content/view/full/{$#article_id}" /> 34 <input type="hidden" name="ClassIdentifier" value="comment" /> 35 <input type="hidden" name="NodeID" value="{$node.object.main_node.node_id}" /> 36 <input type="hidden" name="ContentLanguageCode" value="{ezini( 'RegionalSettings', 'Locale', 'site.ini')}" /> 37 38 <input class="input_button" type="submit" name="NewButton" value="Ajouter un commentaire" /> 39 </form> 40 </p> {* form_commentaires_fils *} 41 {else} 42 <p>{'%login_link_startLog in%login_link_end or %create_link_startcreate a user account%create_link_end to comment.'|i18n( 'design/ezwebin/full/article', , hash( '%login_link_start', concat( '<a href="', '/user/login'|ezurl(no), '">' ), '%login_link_end', '</a>', '%create_link_start', concat( ' <a href="', "/user/register"|ezurl(no), '">' ), '%create_link_end', '</a>' ) )}</p> 43 {/if}
- Lignes 3 à 10: affiche le contenu des attributs des objets Comment de niveau 2 et plus.
- Lignes 17 à 22: on utilise à nouveau la fonction prédéfinie comments pour regarder, cette fois-ci, si chaque commentaire de niveau 2 possède lui même un commentaire (ce sont les commentaires de niveau 3). Le cas échéant, on appelle à nouveau le template de vue comments_fils.tpl
- Lignes 26 à 28: contrôle que l'utilisateur a le droit de créer des objets de la classe comment.
- Lignes 31 à 39: si c'est le cas alors on affiche le bouton (ligne 38 - les boutons verts en bas à droite sur la figure 1)
- Ligns 41 à 43: si l'utilisateur n'a pas le droit de créer des commentaires alors on affiche un message qui lui demande de se loguer.
Les variables de redirection
Les deux variables de redirection RedirectURIAfterPublish et RedirectIfDiscarded sont définies (enfin presque...) dans le fichier:
kernel/content/action.php
Je dis enfin presque... car en fait la variable RedirectIfDiscarded n'y est pas définie par défaut.
J'ai posté sur la page Issue tracker: issue 11386
Voici les deux emplacements dans le script action.php où vous devez ajouter les lignes qui contiennent cette variable globale:
127 $tpl->setVariable( 'redirect_uri_after_publish', ( $http->hasPostVariable( 'RedirectURIAfterPublish' ) )? / $http->postVariable( 'RedirectURIAfterPublish' ): false ); 128 $tpl->setVariable( 'redirect_if_discarded', ( $http->hasPostVariable( 'RedirectIfDiscarded' ) )? / $http->postVariable( 'RedirectIfDiscarded' ): false );
:
Le / après le ? ne doit pas être copié et signifie que la deuxième ligne doit être placée à la suite de la première.
180 if ( $http->hasPostVariable( 'RedirectURIAfterPublish' ) ) 181 { 182 $http->setSessionVariable( 'RedirectURIAfterPublish', $http->postVariable( 'RedirectURIAfterPublish' ) ); 183 } 184 if ( $http->hasPostVariable( 'RedirectIfDiscarded' ) ) 185 { 186 $http->setSessionVariable( 'RedirectIfDiscarded', $http->postVariable( 'RedirectIfDiscarded' ) ); 187 }
:
Bien penser, lors des mises à jour de site, à modifier la nouvelle version du script action.php si d'ici là il n'y a pas de modification officielle.
C'est deux variables globales doivent être définies dans les templates article.tpl, comment.tpl et comment_fil.tpl. Mais pas du tout dans le fichier d'édition/rédaction des commentaires ( voir plus bas ).
Par ailleurs, relevez que la syntaxe est quelque peu différente dans le template article.tpl d'avec celle des deux templates comment.tpl et comment_fil.tpl.
Ces deux variables, pour jouer correctement leur rôle, doivent être associées au ID de l'article auquel sont associés les commentaires afférents. La variable article_id contient cet ID. (Voir les explications complémentaires ci-dessous )
Commentaires : les règles CSS
Ci-dessous, vous trouverez les règles CSS en vigueur sur mon site. Elles fonctionnent pas Firefox 2, Konqueror, Opera 9 mais pas du tout avec IE 6 (pas testé avec IE 7).
/* GESTION DES COMMENTAIRES DES VISITEURS */ div#cadre_general_commentaires { display: block; border: 1px solid #AE1414; width: 905px; margin: 15px 0 1px -10px; padding: 3px 0 0 5px; } div#cadre_general_commentaires p.commentaires { color: #8C1010; font-size:2.2em; margin: 0 0 0 5px; float: left; /* les objets qui suivent flotent à droite de p.commentaires mais... ...par leur gauche */ } /* ----- Le bouton general "Ajouter un commentaire" en haut a droit ----- */ div#cadre_general_commentaires form { width: 200px; margin: 3px 0 0 706px; padding-top: -10px; } div#cadre_general_commentaires .input_button { /* C'est le bouton Ajouter un commentaire */ display: block; width: 199px; height: 42px; border: 0; background-image: url(../images/boutons/commentaires_4.jpg); margin: 0; } div#cadre_general_commentaires .input_button:hover { display: block; width: 189px; height: 32px; margin-bottom: 10px; background-image: url(../images/boutons/commentaires_4h.jpg); border-right: 2px groove black; border-bottom: 2px groove black; } /* ------------------------------------------- */ /* ----- Gestion des commentaires de premiers niveau ----- */ div#cadre_commentaires { /* C'est le cadre des commentaires */ display: block; border: 1px dashed #AD4123; margin: 5px 10px 5px 5px; padding: 0pt 0.5em 0.25em; } div#cadre_commentaires .titres_commentaires { color: #392E47; font-size: 1.4em; padding: 0 0 0 30px; line-height: 37px; } div#cadre_commentaires .auteur_commentaires { margin: 0 0 0 5px; font-size: 10px; color: #628C5E; } div#cadre_commentaires .date_commentaires { text-align: right; font-size: 10px; margin: -11px 0 0 0; color: #628C5E; } div#cadre_commentaires .message_commentaires p { color: #705C8C; text-align: justify; font-size: 11px; padding: 0 0 0 0; margin: 0 0 20px 0; } /* ----- Bouton "Ajouter un commentaire" des commentaires de premiers niveau */ div#cadre_commentaires form { width: 200px; margin: -15px 0 0 0; /* Espace entre le haut du bouton et la derniere ligne du message */ } div#cadre_commentaires form .input_button { display: block; width: 170px; height: 22px; border-top: 1px dashed #8C1010; border-right: 1px dashed #8C1010; border-bottom: none; border-left: none; background-image: none; background-color: white; margin: 0 0 -2px -6px; color: #8C1010; } div#cadre_commentaires .input_button:hover { display: block; width: 170px; height: 22px; margin: 0 0 -2px -6px; background-image: none; background-color: white; border-top: 1px solid #8C1010; border-right: 1px solid #8C1010; border-bottom: none; border-left: none; color: #8C1010; } /* ---- LES COMMENTAIRES FILS - Second niveau et plus ---- */ div#cadre_general_commentaires div#cadre_commentaires_fils { border: 1px dashed #628C5E; margin: 5px 5px 5px 5px; padding: 0pt 0.5em 0px 0.5em; } /* ----- Les boutons des commentaires de second niveau et plus ----- */ div#cadre_commentaires_fils form { width: inherit; margin: 0 0 0 100%; /* Va avec la prpriété margin-left -- Permet de positionner les boutons à droite ;-) */ /*background-color: yellow; Pour faire des tests et mieux visualiser ce qui se passe */ } div#cadre_commentaires_fils form .input_button { text-align: center; width: 170px; height: 22px; border-right: none; border-bottom: none; border-left: 1px dashed #628C5E; border-top: 1px dashed #628C5E; background-color: white; margin: 0 0 0 -167px; /* Permet de positionner les boutons à droite -- va avec la propriété margin de la règle ci-dessus */ color: #628C5E; } div#cadre_commentaires_fils form .input_button:hover { display: block; text-align: center; width: 170px; height: 22px; background-color: white; margin: 0 0 0 -167px; /* Permet de positionner les boutons à droite -- va avec la propriété margin de la règle ci-dessus */ border-right: none; border-bottom: none; border-top: 2px solid #628C5E; border-left: 2px solid #628C5E; color: #628C5E; } /* OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO */
Commentaires : template d'édition
Le template de surcharge utilisé pour éditer/rédiger les commentaire est le template:
plain_site/override/templates/edit/comment.tpl
Il est défini, par défaut, dans le fichier override.ini.append.tpl du siteaccess public:
261 [edit_comment] 262 Source=content/edit.tpl 263 MatchFile=edit/comment.tpl 264 Subdir=templates 265 Match[class_identifier]=comment
Abandonner : avec ou sans confirmation
Lorsque l'on rédige un commentaire, il est possible d'abandonner la procédure de publication de ce dernier en cliquant à tout moment sur le bouton Abandonner:
Fig. 10: Le bouton Abandonner au bas de la page de rédaction des commentaires
Par défaut, lorsque vous cliquez sur le bouton Abandonner:
- il n'y a pas de confirmation
- on est renvoyé au niveau de commentaire n-1
Ce deuxième point est vraiment gênant. La variable RedirectURIAfterPublish associée à la valeur du ID de l'article permet de s'affranchir de ce problème et de renvoyer l'utilisateur directement à l'article.
Le premier point, n'est qu'une question de configuration de la valeur de DiscardConfirm à la fin du code du template d'édition. Par défaut, la valeur est 0 (zéro): il n'y a pas de confirmation.
Si vous remplacez cette valeur par 1:
49 <input type="hidden" name="DiscardConfirm" value="1" /> 50 </div> 51 </form> 52 </div>
...alors un clic sur le bouton Abandonner affichera ce message:
Fig. 11: Le message de confirmation d'abandon de publication d'un commentaire.














