Outils pour utilisateurs

Outils du site


Panneau latéral

devguide:howto:addcomment

Ajouter des commentaires

Dans l'exemple ci-dessous, nous partons sur la base de notre module ''recipes''(télécharger).

Si le module commentaire (comment) n'est pas encore installé dans notre projet nous l'installons :

php framework/bin/change.php install-module comment-3.5.3
== Install module comment-3.5.3 ==
Check dependencies integrity
== Update project dependencies ==
Update Checked successfully.

Execute: compile-all ...
Execute: generate-database ...
Execute: import-init-data comment...
Execute: init-patch-db modules_comment...
Execute: init-webapp ...
=> Install OK

Créer le bloc commentaire

Nous partons sur la base de notre module recipes et nous lui ajoutons la possibilité de définir des commentaires sur les recettes. Nous utiliserons la commande comment.implement-on-document :

php framework/bin/change.php comment.implement-on-document -h
Comment.implement-on-document: implement comments on a document model.
Usage: change.php comment.implement-on-document <moduleName> <documentName>

Ajout des commentaires :

php framework/bin/change.php comment.implement-on-document recipes recipe
== Implement comments on a document model ==
Generating <path>/modules/recipes/lib/blocks/BlockCommentsOnRecipeAction.class.php
Add modules_recipes_commentsonrecipe in <path>/modules/recipes/config/blocks.xml.
Add commentsonrecipe locale in m.recipes.bo.blocks.commentsonrecipe package.
<path>/modules/recipes/config/actions.xml altered with new handler
Recompile locales for module recipes.
== Clear webapp cache ==
Webapp cache directory cleared

== Clear template cache ==
Template cache directory cleared

=> Block 'CommentsOnrecipe' added in module 'recipes' and ready to use.
To specialize rendering, add the following templates:
 * 'modules/recipes/templates/Recipes-Block-Success.all.all.html': for the comment list and form.
 * 'modules/recipes/templates/Recipes-Block-Save.all.all.html': for the confirmation screen.
 * 'modules/recipes/templates/Recipes-Block-Backoffice.all.all.html': for the backoffice view.
Default templates are placed in 'modules/comment/templates/Comment-Block-CommentBase-<view>.all.all.html'.

Aucun nouveau template de block n'a été ajouté au module recipes, les templates sont ceux définis dans le module comment ; pour les spécialiser pour notre module il suffirait de les y copier.
On constate également dans le fichier config/blocks.xml qu'un nouveau bloc a été ajouté. Nous allons changer la valeur par défaut du paramètre showRatingDistribution :

<?xml version="1.0" encoding="utf-8"?>
<blocks>
  <block type="modules_recipes_Recipelist" icon="list-block">
    <parameters>
      <parameter name="nbRecipesPerPage" type="Integer" default-value="10">
        <constraints>min:1;max:100</constraints>
      </parameter>
    </parameters>
  </block>
  <block type="modules_recipes_Recipe" icon=""/>
  <block type="modules_recipes_CommentsOnRecipe" icon="comments">
    <parameters>
      <parameter name="nbitemperpage" type="Integer" default-value="25"/>
      <parameter name="allowNotRegistered" type="Boolean" default-value="true"/>
      <parameter name="enableRating" type="Boolean" default-value="true"/>
      <parameter name="showRatingDistribution" type="Boolean" default-value="false"/>
      <parameter name="displaySortOptions" type="Boolean" default-value="true"/>
      <parameter name="enableEvaluation" type="Boolean" default-value="true"/>
      <parameter name="showgravatars" type="Boolean" default-value="false"/>
    </parameters>
  </block>
</blocks>

On va donc éditer la clef de locales correspondante dans le fichier i18n/bo/blocks/commentsonrecipe/*.xml pour y mettre une valeur convenable. Ce qui donne pour le fichier français :

<?xml version="1.0" encoding="utf-8"?>
<i18n baseKey="m.recipes.bo.blocks.commentsonrecipe" lcid="fr_FR">
  <include id="m.comment.bo.blocks.commentbase"/>
  <key id="title">Commenter une recette</key>
</i18n>

Ajouter le bloc dans la page de détail

Pour ajouter le bloc de détail on se rend en back office, on édite la page de détail et on insère le bloc de commentaire. Le bloc de commentaire est à chercher dans le sous menu correspondant à notre module recipes. Il ne reste plus qu'à configurer le bloc.

Sélection et ajout du bloc dans la page
Sélection et ajout du bloc de commentaire dans la page
Configuration du bloc
Configuration du bloc de comentaire.

Intégrer les commentaires aux blocs existants

L'élément qui va nous interresser au niveau de l'objet recipe par rapport aux commentaires est sa note moyenne. Nous allons donc implémenter de nouvelles méthodes dans la classe finale de l'objet recipe. Nous ajoutons le code suivant:

/**
 * This method will check if recipe has any rating or not.
 * Rating is provided by module comment. If module isn't installed method returns FALSE
 * @return boolean
 */
public function hasRating()
{
	if (ModuleService::getInstance()->moduleExists('comment')
		&& comment_CommentService::getInstance()->getRatingCountByTargetId($this->getId()) > 0)
	{
		return true;
	}
	return false;
}

/**
 * This method will get recipe's rating average.
 * Rating is provided by module comment. If module isn't installed method returns 0
 * @return Double
 */
public function getRating()
{
	if (ModuleService::getInstance()->moduleExists('comment'))
	{
		return comment_CommentService::getInstance()->getRatingAverageByTargetId($this->getId());
	}
	return 0;
}
de manière à récupérer la noteNous pouvons intégrer les commentaires dans la liste des recettes par l'intermédiaire des notes dans les commentaires

Intégration dans la liste des recettes

Nous pouvons intégrer les commentaires dans la liste des recettes en insérant la note de chacune des recettes à côté de leur titre. Pour cela nous allons modifier le template templates/Recipes-Block-Recipelist-Success.all.all.html comme suit :

...
<ol class="document-list">
	<tal:block tal:repeat="recipe recipes">
		<li class="${php: repeat.recipe.odd ? 'odd' : 'even'}">
			<h3 change:h="">
				<img tal:condition="recipe/getVegetarian" src="/media/frontoffice/vegetarian.png" change:i18nattr="title m.recipes.fo.vegetarian; alt m.recipes.fo.vegetarian;"/>
				<a change:link="document recipe">${recipe/getLabelAsHtml}</a>
				<tal:block tal:condition="recipe/hasRating" change:starrating="" displayOnly="true" value="${recipe/getRating}" small="true" />
			</h3>
...

 Ajout de la note dans la liste des recettes

Intégration dans le détail d'une recette

Nous allons intégrer dans le bloc du détail de la recette le bloc récapitulatif du détail des notes de la recette ainsi que la note moyenne au niveau du titre de la recette. Nous modifions donc le code de notre template templates/Recipes-Block-Recipe-Success.all.all.html comme suit :

...
<h2 change:h="">${recipe/getLabelAsHtml} <tal:block tal:condition="recipe/hasRating" change:starrating="" displayOnly="true" value="${recipe/getRating}" small="true" /></h2>

<div>
	<div class="recipe-detail-info-pic" tal:condition="recipe/getPicture">
		<img change:media="document recipe/getPicture; format 'modules.recipes.frontoffice/recipe'; zoom 'true'" />
	</div>
	<div tal:condition="recipe/hasRating" class="recipe-rating">
		<tal:block change:block="" inheritedParams="cmpref,filter,sort" module="comment" name="ratingdistribution" />
	</div>
...

 Intégration des commentaires au détail de la recette

devguide/howto/addcomment.txt · Dernière modification: 2017/01/19 14:54 (modification externe)