Jump to content

[Résolu] Peut t'on mettre plus d'un commentaire par produit?


Recommended Posts

Bonjour,

 

j'utilise le module productcomments natif de PS.

J'ai déposé un avis sur un produit. L'avis apparait bien mais j'ai voulu déposer un avis avec un autre compte client mais je n'ai aucun lien pour déposer un avis. Est-ce normal? Ca serait bizarre qu'une seule personne puisse déposer un avis sur un produit.

 

Pour info, j'utilise PS 1.5.4.1

Edited by titchagcreation (see edit history)
Link to comment
Share on other sites

De base, dans le fichier original (productcommments.tpl), il y a le code suivant :

{if $comments}
...
{else}
    {if ($too_early == false AND ($logged OR $allow_guests))}
	<p class="align_center">
		<a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Be the first to write your review' mod='productcomments'} !</a>
	</p>
	{else}
	<p class="align_center">{l s='No customer comments for the moment.' mod='productcomments'}</p>
	{/if}
{/if}

Dans le premier bloc if, Le "..." c'est pour l'affichage des avis s'il y en a. Le 2e bloc gère le cas où aucun commentaire n'a été posté. Le problème ici, c'est que dans le premier bloc, on ne gère pas la possibilité de pouvoir ajouter un avis. C'est que j'ai ajouté.

 

Voici donc ma modification:

{if $comments}
	{if ($too_early == false AND ($logged OR $allow_guests))}
	<p class="align_center">
		<a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Post a review' mod='productcomments'} !</a>
	</p>
	{else}
		{if $too_early == true}
		<p class="align_center">{l s='You should wait' mod='productcomments'} {$delay} {l s='second(s) before posting a new comment' mod='productcomments'}</p>
		{else}
		<p class="align_center">{l s='Only registered users can post a new comment.' mod='productcomments'}</p>
		{/if}			
	{/if}
...
{else}
	{if $logged OR $allow_guests}
		<p class="align_center">
		<a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Be the first to write your review' mod='productcomments'} !</a>
		</p>
	{else}
		<p class="align_center">{l s='No customer comments for the moment.' mod='productcomments'}</p>
	{/if}		
{/if}

J'ai ajouté un "Post a review" avant la liste des commentaires. Vous pouvez le placer après si vous voulez. Et voilà, le tour est joué. (Mon code commence à la ligne 37 parce que j'ai ajouté 2/3 lignes de javascript qui n'ont rien à voir avec ce problème)

Il faudra penser à traduire les nouveaux textes.

 

Attention, je n'ai pas écrasé les fichiers originaux. J'ai utilisé les possibilités de surcharge de Prestashop pour faire cette modification. S'il y a besoin, j'expliquerai ce point.

 

J'espère que ça pourra aider d'autres personnes.

Link to comment
Share on other sites

Merci d'avoir posté ta modification :)

 

Dans le fichier de base : il y a ceci

<div id="idTab5">
    <div id="product_comments_block_tab">
    {if $comments}
        {foreach from=$comments item=comment}
            {if $comment.content}
            <div class="comment clearfix">
                <div class="comment_author">
                    <span>{l s='Grade' mod='productcomments'}&nbsp</span>
                    <div class="star_content clearfix">
                    {section name="i" start=0 loop=5 step=1}
                        {if $comment.grade le $smarty.section.i.index}
                            <div class="star"></div>
                        {else}
                            <div class="star star_on"></div>
                        {/if}
                    {/section}
                    </div>
                    <div class="comment_author_infos">
                        <strong>{$comment.customer_name|escape:'html':'UTF-8'}</strong><br/>
                        <em>{dateFormat date=$comment.date_add|escape:'html':'UTF-8' full=0}</em>
                    </div>
                </div>
                <div class="comment_details">
                    <h4 class="title_block">{$comment.title}</h4>
                    <p>{$comment.content|escape:'html':'UTF-8'|nl2br}</p>
                    <ul>
                        {if $comment.total_advice > 0}
                            <li>{l s='%1$d out of %2$d people found this review useful.' sprintf=[$comment.total_useful,$comment.total_advice] mod='productcomments'}</li>
                        {/if}
                        {if $logged == 1}
                            {if !$comment.customer_advice}
                            <li>{l s='Was this comment useful to you?' mod='productcomments'}<button class="usefulness_btn" data-is-usefull="1" data-id-product-comment="{$comment.id_product_comment}">{l s='yes' mod='productcomments'}</button><button class="usefulness_btn" data-is-usefull="0" data-id-product-comment="{$comment.id_product_comment}">{l s='no' mod='productcomments'}</button></li>
                            {/if}
                            {if !$comment.customer_report}
                            <li><span class="report_btn" data-id-product-comment="{$comment.id_product_comment}">{l s='Report abuse' mod='productcomments'}</span></li>
                            {/if}
                        {/if}
                    </ul>
                </div>
            </div>
            {/if}
        {/foreach}
        <p class="align_center">
            <a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Write your review' mod='productcomments'} !</a>
        </p>

Ces trois lignes ne suffisent-elles pas ?

        <p class="align_center">
            <a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Write your review' mod='productcomments'} !</a>
        </p>
Link to comment
Share on other sites

Ces trois lignes ne suffisent-elles pas ?

Oui et non. 

 

Si on ajoute ces 3 lignes, effectivement ça s'affichera dans tous les cas mais ce n'est pas forcément ce qu'on souhaite.

Il faut prendre en compte le fait qu'on soit autorisé à déposer un avis ou pas (utilisateur enregistré ou guest autorisé à poster) et aussi prendre en compte le délai pour poster une nouvelle annonce (dans le backoffice, il y a une option pour empêcher de déposer des avis consécutivement trop rapidement) c'est pourquoi il est important de tester la variable $too_early.

Link to comment
Share on other sites

Si on ajoute ces 3 lignes, effectivement ça s'affichera dans tous les cas mais ce n'est pas forcément ce qu'on souhaite.

 

Ce n'est pas un ajout, du moins en PS 1.5.5, elles sont déjà intégrées.

 

Normalement, tout fonctionne correctement sur cette version. :)

Link to comment
Share on other sites

J'utilise la version 1.5.4.1 pour l'instant. Je ne savais pas qu'il avaient procédé de cette façon pour la version 1.5.5.

C'est étrange qu'ils aient ajouté ce code en 1.5.5 sans autres conditions. Pour ma part, il faut absolument tester le fait que le visiteur ait le droit de déposer un avis ou non. 

Link to comment
Share on other sites

Pour ma part, il faut absolument tester le fait que le visiteur ait le droit de déposer un avis ou non.

Pour conclure, la(es) condition(s) est(sont) normalement testée(s) : J'avais testé en son temps. :)

        {if ($too_early == false AND ($logged OR $allow_guests))}

 

Link to comment
Share on other sites

 

Pour conclure, la(es) condition(s) est(sont) normalement testée(s) : J'avais testé en son temps. :)

        {if ($too_early == false AND ($logged OR $allow_guests))}

Oui c'est ce qu'il faut faire mais ceci semble avoir disparu en 1.5.5 d'après le code que tu as posté juste avant.

Link to comment
Share on other sites

Ok, j'ai récupéré le code complet de la dernière modification de Fabio Chelly

 

Il intègre "normalement" toutes les conditions.

{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
<script type="text/javascript">
var productcomments_controller_url = '{$productcomments_controller_url}';
var confirm_report_message = "{l s='Are you sure you want report this comment?' mod='productcomments'}";
var secure_key = "{$secure_key}";
var productcomments_url_rewrite = '{$productcomments_url_rewriting_activated}';
var productcomment_added = '{l s='Your comment has been added!' mod='productcomments'}';
var productcomment_added_moderation = '{l s='Your comment has been added and will be available once approved by a moderator' mod='productcomments'}';
var productcomment_title = '{l s='New comment' mod='productcomments'}';
var productcomment_ok = '{l s='OK' mod='productcomments'}';
var moderation_active = {$moderation_active};
</script>

<div id="idTab5">
    <div id="product_comments_block_tab">
    {if $comments}
        {foreach from=$comments item=comment}
            {if $comment.content}
            <div class="comment clearfix">
                <div class="comment_author">
                    <span>{l s='Grade' mod='productcomments'}&nbsp</span>
                    <div class="star_content clearfix">
                    {section name="i" start=0 loop=5 step=1}
                        {if $comment.grade le $smarty.section.i.index}
                            <div class="star"></div>
                        {else}
                            <div class="star star_on"></div>
                        {/if}
                    {/section}
                    </div>
                    <div class="comment_author_infos">
                        <strong>{$comment.customer_name|escape:'html':'UTF-8'}</strong><br/>
                        <em>{dateFormat date=$comment.date_add|escape:'html':'UTF-8' full=0}</em>
                    </div>
                </div>
                <div class="comment_details">
                    <h4 class="title_block">{$comment.title}</h4>
                    <p>{$comment.content|escape:'html':'UTF-8'|nl2br}</p>
                    <ul>
                        {if $comment.total_advice > 0}
                            <li>{l s='%1$d out of %2$d people found this review useful.' sprintf=[$comment.total_useful,$comment.total_advice] mod='productcomments'}</li>
                        {/if}
                        {if $logged == 1}
                            {if !$comment.customer_advice}
                            <li>{l s='Was this comment useful to you?' mod='productcomments'}<button class="usefulness_btn" data-is-usefull="1" data-id-product-comment="{$comment.id_product_comment}">{l s='yes' mod='productcomments'}</button><button class="usefulness_btn" data-is-usefull="0" data-id-product-comment="{$comment.id_product_comment}">{l s='no' mod='productcomments'}</button></li>
                            {/if}
                            {if !$comment.customer_report}
                            <li><span class="report_btn" data-id-product-comment="{$comment.id_product_comment}">{l s='Report abuse' mod='productcomments'}</span></li>
                            {/if}
                        {/if}
                    </ul>
                </div>
            </div>
            {/if}
        {/foreach}
        {if (!$too_early AND ($logged OR $allow_guests))}
        <p class="align_center">
            <a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Write your review' mod='productcomments'} !</a>
        </p>
        {/if}
    {else}
        {if (!$too_early AND ($logged OR $allow_guests))}
        <p class="align_center">
            <a id="new_comment_tab_btn" class="open-comment-form" href="#new_comment_form">{l s='Be the first to write your review' mod='productcomments'} !</a>
        </p>
        {else}
        <p class="align_center">{l s='No customer comments for the moment.' mod='productcomments'}</p>
        {/if}
    {/if}    
    </div>
</div>

<!-- Fancybox -->
<div style="display: none;">
    <div id="new_comment_form">
        <form id="id_new_comment_form" action="#">
            <h2 class="title">{l s='Write your review' mod='productcomments'}</h2>
            <div class="product clearfix">
                <img src="{$link->getImageLink($product->link_rewrite, $productcomment_cover, 'home_default')|escape:'html'}" height="{$homeSize.height}" width="{$homeSize.width}" alt="{$product->name|escape:html:'UTF-8'}" />
                <div class="product_desc">
                    <p class="product_name"><strong>{$product->name}</strong></p>
                    {$product->description_short}
                </div>
            </div>

            <div class="new_comment_form_content">
                <h2>{l s='Write your review' mod='productcomments'}</h2>

                <div id="new_comment_form_error" class="error" style="display: none; padding: 15px 25px">
                    <ul></ul>
                </div>

                {if $criterions|@count > 0}
                    <ul id="criterions_list">
                    {foreach from=$criterions item='criterion'}
                        <li>
                            <label>{$criterion.name|escape:'html':'UTF-8'}:</label>
                            <div class="star_content">
                                <input class="star" type="radio" name="criterion[{$criterion.id_product_comment_criterion|round}]" value="1" />
                                <input class="star" type="radio" name="criterion[{$criterion.id_product_comment_criterion|round}]" value="2" />
                                <input class="star" type="radio" name="criterion[{$criterion.id_product_comment_criterion|round}]" value="3" checked="checked" />
                                <input class="star" type="radio" name="criterion[{$criterion.id_product_comment_criterion|round}]" value="4" />
                                <input class="star" type="radio" name="criterion[{$criterion.id_product_comment_criterion|round}]" value="5" />
                            </div>
                            <div class="clearfix"></div>
                        </li>
                    {/foreach}
                    </ul>
                {/if}

                <label for="comment_title">{l s='Title' mod='productcomments'}: <sup class="required">*</sup></label>
                <input id="comment_title" name="title" type="text" value=""/>

                <label for="content">{l s='Comment' mod='productcomments'}: <sup class="required">*</sup></label>
                <textarea id="content" name="content"></textarea>

                {if $allow_guests == true && $logged == 0}
                <label>{l s='Your name' mod='productcomments'}: <sup class="required">*</sup></label>
                <input id="commentCustomerName" name="customer_name" type="text" value=""/>
                {/if}

                <div id="new_comment_form_footer">
                    <input id="id_product_comment_send" name="id_product" type="hidden" value='{$id_product_comment_form}' />
                    <p class="fl required"><sup>*</sup> {l s='Required fields' mod='productcomments'}</p>
                    <p class="fr">
                        <button id="submitNewMessage" name="submitMessage" type="submit">{l s='Send' mod='productcomments'}</button> 
                        {l s='or' mod='productcomments'} <a href="#" onclick="$.fancybox.close();">{l s='Cancel' mod='productcomments'}</a>
                    </p>
                    <div class="clearfix"></div>
                </div>
            </div>
        </form><!-- /end new_comment_form_content -->
    </div>
</div>
<!-- End fancybox -->
Link to comment
Share on other sites

Ca me semble plus logique comme ça.

 

Dans ce code, il manque quand même un ou deux détails (mais c'est uniquement du détail). Il faut préciser aux utilisateurs qui ne peuvent pas déposer d'avis pourquoi ils ne peuvent pas ("Seuls les utilisateurs enregistrés peuvent déposer des avis") et traiter le cas du spamming de commentaires (juste indiquer qu'il faut attendre un certain temps avant de déposer un nouveau commentaire).

 

Merci pour ces retours en tout cas. Je vais mettre le sujet en résolu car une solution a été trouvée et le problème est résolu en PS 1.5.5.

 

 

  • Like 1
Link to comment
Share on other sites

Dernier retour :

 

Dans le default.php (dossier controllers/front)

            $errors[] = $module_instance->l('You must be logged in order to send a comment');
                $errors[] = $module_instance->l('You should wait').' '.Configuration::get('PRODUCT_COMMENTS_MINIMAL_TIME').' '.$module_instance->l('seconds before posting a new comment');

A bientôt,
 

 

Link to comment
Share on other sites

Je vois, il y a une validation après coup cependant je pense qu'il faut quand même ne pas proposer cette fonctionnalité si on sait qu'elle va conduire à une erreur (You must be logged in ...). Une erreur a toujours un impact négatif sur le visiteur. Si on met un message informatif avant (Vous ne pouvez pas poster parce que vous n'êtes pas connecté), il sera automatiquement guidé vers la bonne action à mener réduisant ainsi ces chances de tomber sur une erreur.

 

A la fin de mon projet, je tenterai une mise à jour en 1.5.5 vu que cette version semble apporter pas mal de correction.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...