Jump to content
CatalaGlass

Extraire une caractéristique pour l'insérer dans un titre ...

Recommended Posts

Bonjour à tous,

 

Et merci pour toutes les ptites infos et conseils que j'ai déjà trouver dans d'autres fils ...

 

Mais là, dans ce que je souhaite faire, je ne provoque que des plantages, alors je fais appel à vous :

J'aimerais faire apparaitre dans le titre du produit une 2° ligne dans la quelle je ferais apparaitre une caracteristique importante.

 

pour infos je suis en versions 1.6.0.11 avec le theme par defaut

 

Alors pour le faire je prend mon fichier product.tpl

vers la ligne 153 , dans la balise H1 j'ajoute un saut de ligne

<h1 itemprop="name">{$product->name|escape:'html':'UTF-8'}<br />
                         
</h1>

pour ensuite appeler la valeur de la caracteristique qui dans le tableau a l'ID 2

Alors j'utilise cette portion de code, trouvé sur le forum, qui me dépasse (sorti du html et du css, je suis ignare)

{if $features}<!-- product's features -->  <ul id="idTab2" class="bullet">    {foreach from=$features item=feature}      {if $feature.id eq 2}      <li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8}</li>      {/if}    {/foreach}  </ul>        {/if}


Mais ça ne marche pas ... j'ai lu qu'il fallait utiliser

$feature.id_feature

mais je ne dois pas corriger aux bons endroits car la page plante toujours (elle reste vide) ...

 

Alors si une âme charitable veut bien m'aider à ecrire cette ligne de code je serais, comment dire, très reconnaissant.

 

merci d'avance et bonne journée

Share this post


Link to post
Share on other sites

Après plusieurs heures de bricolage, j’amène ma propre réponse :

<h1 itemprop="name">{$product->name|escape:'html':'UTF-8'}<br />
{foreach from=$features item=feature}
{if $feature.id_feature eq 2} 
{$feature.value|escape:'html':'UTF-8'}
{/if}
{/foreach}
</h1>

Si ça peut aider quelqu’un ...

Share this post


Link to post
Share on other sites

Bonjour,

 

merci pour ce retour,

 

par contre peut être pourriez ajouter un

 {break}

à la fin de votre if pour sortir du foreach après avoir trouver la bonne occurrence et ainsi gagner en performance

  • Like 1

Share this post


Link to post
Share on other sites

Merci je vais tenter votre optimisation,

 

Par contre, ma modification ci dessus, ne fonctionne qu'avec mon fichier product.tpl

Les fiches produit sont bien bien comme je le désire avec la caractéristique de la ligne 2 en sous-titre.

 

Mais je n'arrive pas à la faire fonctionner dans les pages avec les listes de produits ...

En effet pour ajouter aussi un sous-titre au nom du produit dans les listes de produit. Je modifie mon product_list.tpl mais je n'obtient qu'une balise vide ...

 

Voila la modification dans le product_list.tpl qui est sans résultat :

<h5 itemprop="name"> {if isset($product.pack_quantity) && $product.pack_quantity}{$product.pack_quantity|intval|cat:' x '}{/if} <a class="product-name" href="{$product.link|escape:'html':'UTF-8'}" title="{$product.name|escape:'html':'UTF-8'}" itemprop="url" > {$product.name|truncate:45:'...'|escape:'html':'UTF-8'}<br />
{foreach from=$features item=feature}
{if $feature.id_feature eq 2} 
<span class="product-soustitre">{$feature.value|escape:'html':'UTF-8'}</span>
{/if}
{/foreach} 
</a>
</h5>

Comme je le disais , en examinant la page dans mon navigateur :
je retrouve bien les balise <br> <br />  là où je devrais trouver la caractéristique, mais c'est tout simplement vide ...

 

Quelqu'un à un conseil ? une idée ?

 

Merci d'avance,

Edited by CatalaGlass (see edit history)

Share this post


Link to post
Share on other sites

Bon je me re-réponds ...

 

J'ai enfin reussia à à faire fonctionner ma demande pour le product-list.tpl

<h5 itemprop="name"> {if isset($product.pack_quantity) && $product.pack_quantity}{$product.pack_quantity|intval|cat:' x '}{/if} <a class="product-name" href="{$product.link|escape:'html':'UTF-8'}" title="{$product.name|escape:'html':'UTF-8'}" itemprop="url" > {$product.name|truncate:45:'...'|escape:'html':'UTF-8'} <br />
        {if $product.features }
        {foreach from=$product.features item=feature name=features}
        {if $feature.name == "lenomdelacaracteristique"}
<span class="product-soustitre">{$feature.value|escape:'html':'UTF-8'}</span> {/if}
        {/foreach}
        {/if}</a>
</h5>

Ne me demander pas pourquoi il faut 2 recettes différentes pour product.tpl et product-list.tpl ...

J'ai vraiment l'impression d’être un singe de laboratoire jouant aux Lego ... ^_^

 

Reste maintenant à voir si cette recette va fonctionner pour bloc "déjà vus" et pour le "comparateur" ...

Share this post


Link to post
Share on other sites

 Après quelques mois, j'ai à nouveau du temps pour faire avancer ce projet, et je me replonge sur ce point qui me pose toujours des problèmes  ...

 

Pour appeler 2 caractéristiques dans la page produit j’insère dans product.tpl

<br />
{foreach from=$features item=feature}
{if $feature.id_feature eq 4} <span class="product-soustitre-gamme">{$feature.value|escape:'html':'UTF-8'}</span> {/if}
{/foreach}
<br />
{foreach from=$features item=feature}
{if $feature.id_feature eq 2} <span class="product-soustitre-couleur">en {$feature.value|escape:'html':'UTF-8'}</span> {/if}
{/foreach} 

et ça marche !

 

Pour ajouter ces 2 même caractéristiques dans la page liste produit, j’insère dans product-list.tpl

 <br />
{if $product.features }
{foreach from=$product.features item=feature name=features}
{if $feature.name == "Gamme"} <span class="product-soustitre-gamme">{$feature.value|escape:'html':'UTF-8'}</span> {/if}
{/foreach}
{/if} 
<br />   
{if $product.features }
{foreach from=$product.features item=feature name=features}
{if $feature.name == "Couleur"} <span class="product-soustitre-couleur">{$feature.value|escape:'html':'UTF-8'}</span> {/if}
{/foreach}
{/if} 

Et la aussi ça marche.

 

Mais quand je veux appliquer une de ces recette au caddie en ajoutant ces modifs à shopping-cart-product-line.tpl ou le comparateur de produit en modifiant products-comparison.tpl ou encore le bloc "déjà vus" avec le blockviewed.tpl

J'arrive au même échec :

Lorsque je visualise les pages, les caractéristiques n’apparaissent pas, mais en examinant le code généré on retrouve bien toutes les balises <br /> et </span>, mais vide ...

 

Quelqu'un aurait-il une idée pour m’éclairer , c'est assez important car j'ai réalisé mes fiches produits dans l’optique de pouvoir appeler les caractéristiques comme sous-titre

 

Merci d'avance

Share this post


Link to post
Share on other sites

Après de longue recherches, piochages dans différends post, et test "empirique", j'ai bricolé ça dans mon shopping-cart-product-line.tpl

{assign var='features' value=Product::getFrontFeaturesStatic($cookie->id_lang, $product.id_product)}
      {if isset($features) && $features}
      {foreach from=$features item=feature}
      {if $feature.id_feature eq 4} <span class="product-soustitre-gamme">{$feature.value|escape:'htmlall':'UTF-8'}</span> {/if}
      {/foreach} <br />
      {foreach from=$features item=feature}
      {if $feature.id_feature eq 2} <span class="product-soustitre-couleur">{$feature.value|escape:'htmlall':'UTF-8'}</span> {/if}
      {/foreach}
      {/if}

Et ça fonctionne pour le caddi !

 

Mais malheureusement pas compatible avec  le comparateur products-comparison.tpl, ni le bloc "déjà vus" blockviewed.tpl

 

Quelqu'un a une piste pour ces 2 dernier .tpl qui me posent problème?

 

Merci d'avance

Edited by CatalaGlass (see edit history)

Share this post


Link to post
Share on other sites

On dirait que ça n’intéresse par grand monde ... Mais j'insiste quand même

 

Je bloques toujours sur le comparateur products-comparison.tpl, et le bloc "déjà vus" blockviewed.tpl

 

Dans mes recherches d'aujourd'hui, j'ai trouvé une autre méthode qui fonctionne très bien pour le product.tpl

Je l'ai trouvé là : http://www.prestarocket.com/blog/prestashop-tut-feature-produit/

 

Ça passe par l'utilisation de l'override avec la création de productcontroller.php ...

J'ai essayé de réutiliser cette méthode pour les autres .tpl dans lesquels je veux faire apparaitre certaines caractéristiques

 

Mais c'est encore une échec.

 

S'il vous plait, quelqu’un saurait me réorienté vers la source de ce qui coince, de ce que je ne doit pas comprendre.

Edited by CatalaGlass (see edit history)

Share this post


Link to post
Share on other sites
On 11/06/2015 at 4:35 PM, CatalaGlass said:

On dirait que ça n’intéresse par grand monde ... Mais j'insiste quand même

 

Je bloques toujours sur le comparateur products-comparison.tpl, et le bloc "déjà vus" blockviewed.tpl

 

Dans mes recherches d'aujourd'hui, j'ai trouvé une autre méthode qui fonctionne très bien pour le product.tpl

Je l'ai trouvé là : http://www.prestarocket.com/blog/prestashop-tut-feature-produit/

 

Ça passe par l'utilisation de l'override avec la création de productcontroller.php ...

J'ai essayé de réutiliser cette méthode pour les autres .tpl dans lesquels je veux faire apparaitre certaines caractéristiques

 

Mais c'est encore une échec.

 

S'il vous plait, quelqu’un saurait me réorienté vers la source de ce qui coince, de ce que je ne doit pas comprendre.

Bonjour,

je ressort ce sujet car je suis intéressé par la solution pour ajouter 2 caractéristique sur le titre du produit du module produit similaire.

J'ai testé ce que vous avez fait, mais rien ne fonctionne.

Avez vous réussi depuis...

Merci pour vos infos.

Share this post


Link to post
Share on other sites

Bonjour,

Je suis également intéressé par une solution pour ajouter les features sur les produits déjà vus dans blockviewed.tpl

Par avance merci pour vos retours.

 

Share this post


Link to post
Share on other sites

J'ai trouvé la solution pour 1.6.1  je suis passé par le nom de la caractéristique, que j'affiche dans le titre que je veux.

Il y a un post sur le forum

 

Share this post


Link to post
Share on other sites
32 minutes ago, Manu-shop said:

J'ai trouvé la solution pour 1.6.1  je suis passé par le nom de la caractéristique, que j'affiche dans le titre que je veux.

Il y a un post sur le forum

 

Pourriez-vous me fournir le lien vers la solution ?

Share this post


Link to post
Share on other sites
il y a 41 minutes, Manu-shop a dit :

Il y a un post sur le forum

url ?

Share this post


Link to post
Share on other sites

ou le code directement 😉

j'ai regardé je sais que c'est sur le forum, mais la recherche n'est pas top sur le forum.

J'avais indiqué la solution.

Share this post


Link to post
Share on other sites

  à tester suivant ou tu veux l'afficher

   {foreach from=$product.features item=feature name=features}
                                                {if $feature.id_feature == 1}<span class="tag_caracteristique1">{$feature.value|escape:'htmlall':'UTF-8'}</span>
                                                {/if}
                                                {foreachelse}
                                                {/foreach}

1 correspond à l'id de ta caractéristique

 

Share this post


Link to post
Share on other sites

Merci mais dans le fichier blockviewed.tpl la requête n'est pas sur la variable $product mais plutôt

   {foreach from=$productsViewedObj item=viewedProduct name=myLoop}

Et je n'ai pas accès aux variables features

voici mon code ci-dessous :

 

<!-- Block Viewed products -->

<div id="viewed-products_block_left" class="block">

    <p class="title_block"><span>{l s='Viewed products' mod='blockviewed'}</span></p>

    <div class="block_content products-block">

        <ul>

            {foreach from=$productsViewedObj item=viewedProduct name=myLoop}

                <li class="clearfix{if $smarty.foreach.myLoop.last} last_item{elseif $smarty.foreach.myLoop.first} first_item{else} item{/if}">

                    <a

                    class="products-block-image" 

                    href="{$viewedProduct->product_link|escape:'html':'UTF-8'}" 

                    title="{l s='More about %s' mod='blockviewed' sprintf=[$viewedProduct->name|escape:'html':'UTF-8']}" >

                        <img 

                        src="{if isset($viewedProduct->id_image) && $viewedProduct->id_image}{$link->getImageLink($viewedProduct->link_rewrite, $viewedProduct->cover, 'home_default')}{else}{$img_prod_dir}{$lang_iso}-default-medium_default.jpg{/if}" 

                        alt="{$viewedProduct->legend|escape:'html':'UTF-8'}" />

                    </a>

                    

                    <div class="product-content">

                        <h3>

                            <a class="product-name" 

                            href="{$viewedProduct->product_link|escape:'html':'UTF-8'}" 

                            title="{l s='More about %s' mod='blockviewed' sprintf=[$viewedProduct->name|escape:'html':'UTF-8']}">

                                {$viewedProduct->name|escape:'html':'UTF-8'}

                                {if isset($features)}

                                <span>{$features_by_key.1.name} </span>{$features_by_key.1.value}

                                <span>{$features_by_key.4.name} </span>{$features_by_key.4.value}

                                {/if}

                            </a>

                        </h3>

                        <p class="price">{convertPrice price=$viewedProduct->price}</p>

                        

                    </div>

                </li>

            {/foreach}

        </ul>

    </div>

</div>

 

Share this post


Link to post
Share on other sites

a tester, et n'oublie pas de changer le 1 par l'id de ta caractéristique.

Je n'ai pas le module produit déjà vu, mais le code fonctionne dans d'autre modules.

{foreach from=$viewedProduct.features item=feature name=features}
                                                {if $feature.id_feature == 1}<span class="tag_caracteristique1">{$feature.value|escape:'htmlall':'UTF-8'}</span>
                                                {/if}
                                                {foreachelse}
                                                {/foreach}

 

Share this post


Link to post
Share on other sites

Merci pour la réponse, malheureusement j'ai une erreur :

Fatal error: Cannot use object of type stdClass as array in /var/www/vhosts/.../tools/smarty/sysplugins/smarty_internal_templatebase.php(171) : eval()'d code on line 79

 

 

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More