Jump to content

compteur smarty problème, mais pas tout le temps ^^


Recommended Posts

Bonjour tout le monde,

ça va faire quelques heures que je bute sur le problème.

 

L'idée c'est de faire un compteur pour ajouter une colonne dans les features a un certain moment, voici le code:

		{if isset($features) && $features && $logged}
			<!-- Data sheet -->
			<section class="page-product-box">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<table class="table-data-sheet">
					{assign var="iFeatures" value=0}
					{foreach from=$features item=feature}
					<tr class="{cycle values="odd,even"}">
					{if isset($feature.value)}
						<td>{$feature.name|escape:'html':'UTF-8'}</td>		
						{if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 4 || $feature.id_feature == 30}
						<td>{$feature.value|floatval} {if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 30} cm {else} kg {/if}</td>

							{if $iFeatures == 0}
							<td rowspan="4"><strong>{l s='Packaging size'}</strong></td>
							{/if}

						{else}
							<td colspan="2">{$feature.value|escape:'html':'UTF-8'}</td>
						{/if}
						{$iFeatures = $iFeatures +1}
					{/if}
					</tr>
					{/foreach}
				</table>
			</section>
			<!--end Data sheet -->
		{/if}

ce qui doit donner:

post-1267578-0-80839400-1490264314_thumb.png

 

Sauf que sur certain produit le code ne passe.

pourtant je remplie bien mes conditions, j'avoue que la je me tire les cheveux ...

 

Ps, cache vidé, la variable est bien de type int testé avec {iFeatures|var_dump}

 

Merci de votre attention

++

 

Johan

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

Bonjour,

 

Je ne suis pas dev modules, mais parfois vaut mieux se diriger vers un module de ce genre https://addons.prestashop.com/fr/onglet-produit/21368-full-features-groups.html, qui te fera gagner du temps et de l'argent au final ...

 

V++

 

Atch

 

Ce n'est pas une grosse perte de temps, le code parait correct, je pense plus a un problème avec smarty.

Mais merci

Link to comment
Share on other sites

Ce n'est pas une grosse perte de temps, le code parait correct, je pense plus a un problème avec smarty.

Mais merci

 

je disais ça par rapport à :

 

Bonjour tout le monde,

ça va faire quelques heures que je bute sur le problème.

 

 

sachant qu'une heure de dev est > à 50€ :)

 

V++

 

Atch

Link to comment
Share on other sites

Salut @Nowis, merci

tu as un screen dans le premier post qui représente le fonctionnement voulu, je n'ai pas fait de screen du mode normal car c'est le rendu natif de presta.

 

Ton screen n'est a priori pas correct par rapport au code :

 

<td>{$feature.id_feature} - {$feature.name|escape:'html':'UTF-8'}</td>    

 

L'id n'est pas affiché sur la capture.

C'est pourquoi pour t'aider il serait préférable d'avoir une capture d'un produit qui fonctionne, et d'un autre qui ne fonctionne pas. Sinon ça va être compliqué d'analyser.

Link to comment
Share on other sites

Ton screen n'est a priori pas correct par rapport au code :

 

<td>{$feature.id_feature} - {$feature.name|escape:'html':'UTF-8'}</td>    

 

L'id n'est pas affiché sur la capture.

C'est pourquoi pour t'aider il serait préférable d'avoir une capture d'un produit qui fonctionne, et d'un autre qui ne fonctionne pas. Sinon ça va être compliqué d'analyser.

 

bien vu c'etait juste un test de ma part pour verifier la valeur des id, je viens de modifier le code, mais ca ne joue en rien sur le fonctionnement de la boucle c'etait juste une notion d'affichage?

 

Merci

Link to comment
Share on other sites

J'utilise une boucle dans ce style sur un de mes projets, et cela fonctionne...

 

juste :

{$iFeatures = ($iFeatures  + 1)}

au lieu de

{$iFeatures = $iFeatures +1}

T'as essayé en plaçant l'incrémentation juste avant

{/foreach}

V++

 

Atch

Link to comment
Share on other sites

nop ca ne change rien, je ne comprends vraiment pas la merde ??

		{if isset($features) && $features && $logged}
			<!-- Data sheet -->
			<section class="page-product-box">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<table class="table-data-sheet">
					{assign var="iFeatures" value=0}
					{foreach from=$features item=feature}
					<tr class="{cycle values="odd,even"}">
					{if isset($feature.value)}
						<td>{$feature.name|escape:'html':'UTF-8'}</td>		
						{if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 4 || $feature.id_feature == 30}
						<td>{$feature.value|floatval} {if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 30} cm {else} kg {/if}</td>

							{if $iFeatures == 0}
							<td rowspan="4"><strong>{l s='Packaging size'}</strong></td>
							{/if}

						{else}
							<td colspan="2">{$feature.value|escape:'html':'UTF-8'}</td>
						{/if}
					{/if}
					</tr>
					{$iFeatures = ($iFeatures  + 1)}
					{/foreach}
				</table>
			</section>
			<!--end Data sheet -->
		{/if}
Link to comment
Share on other sites

Avec une capture du comportement normal de Presta j'aurais trouvé le soucis plus rapidement.

Je suppose que ça ne fonctionne pas quand tes caractéristiques ne sont pas les premières affichés.

 

Voici le code :

{if isset($features) && $features && $logged}
			<!-- Data sheet -->
			<section class="page-product-box">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<table class="table-data-sheet">
					{assign var="iFeatures" value=0}
					{foreach from=$features item=feature}
					<tr class="{cycle values="odd,even"}">
					{if isset($feature.value)}
						<td>{$feature.name|escape:'html':'UTF-8'}</td>		
						{if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 4 || $feature.id_feature == 30}
						<td>{$feature.value|floatval} {if $feature.id_feature == 2 || $feature.id_feature == 3 || $feature.id_feature == 30} cm {else} kg {/if}</td>

							{if $iFeatures == 0}
							<td rowspan="4"><strong>{l s='Packaging size'}</strong></td>
							{$iFeatures = ($iFeatures  + 1)}
							{/if}
						{else}
							<td colspan="2">{$feature.value|escape:'html':'UTF-8'}</td>
						{/if}
					{/if}
					</tr>
					{/foreach}
				</table>
			</section>
			<!--end Data sheet -->
		{/if}
  • Like 1
Link to comment
Share on other sites

Bonjour,

 

Le plus simple, ce serait vraiment soit d'utiliser les compteurs Smarty soit de se baser sur l'index du foreach.

{counter start=1 assign="count"}
{foreach ...}
    {if $count == 4}
        {counter start=0 assign="count"}
    {/if}
    {counter}
{/foreach}
{foreach from=$items key=myId item=i name=foo}
    {if $smarty.foreach.foo.index % 4 == 0}
    {/if}
 {/foreach}
  • Like 2
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...