Intégration PrestaShop : combiner des variables smarty

Intégration, PrestaShop
  • Accueil
  • Blog
  • Intégration PrestaShop : combiner des variables smarty

Billet technique aujourd’hui avec un point d’intégration PrestaShop à savoir : comment combiner des variables smarty dans une seule ?

Constat : why to combine smarty variables ?

Pourquoi ai-je eu besoin de regrouper des variables smarty  ? Dans le cadre d’un projet PrestaShop, des produits avaient un champ personnalisé qui servait à récupérer un message cadeau. Le cheminement était le suivant :

  • le client indiquait son message puis enregistrait son message…
  • … mais après rafraîchissement de la page, aucune info de prise en compte du message !!

Il fallait donc rappeler le message cadeau client une fois la page rechargée.
En affichant le debug via la commande {debug} je me suis aperçu qu’une variable {$textFields.textFields_54_559} était chargée et renvoyait la valeur du message cadeau que je voulais afficher. Parfait donc 😀
Pas tant que ça car le 54 correspond à l’id du produit et le 559 à l’id de la personnalisation : des id différents pour chaque fiche produit donc ce qui impose de ne pas utiliser directement {$textFields.textFields_54_559}.
Il fallait donc cette dernière variable avec à l’intérieur les variables d’id du produit et d’id de la personnalisation.

Solution : how to combine smarty variables ?

A la question “comment combiner des variables smarty dans PrestaShop ?“, voici la réponse…
Avant d’afficher mon message j’assigne une nouvelle variable qui va regrouper mes deux variables d’id :

{assign var='idc' value="textFields_{$product->id}_{$customizationFields[0].id_customization_field}"}

Une fois que c’est fait, on a donc plus qu’à charger la variable affichant le message de personnalisation contenant lui-même nos deux variables regroupées (ça en fait de la variable !) :

{$textFields.$idc}

Avec ça, le tour est joué et ça fonctionne pour pour vos combinaisons 🙂
Je vous donne le code complet pour l’intégration du message de personnalisation que j’ai utilisé :

{if isset($product) && $product->customizable}
<!--Customization -->
class="page-product-box message_cadeau_boutique clearfix">
{assign var='idc' value="textFields_{$product->id}_{$customizationFields[0].id_customization_field}"}
{if $textFields.$idc != ''}
class="apercu_message">{l s='Votre message cadeau :'}
<span id="votre_message">{$textFields.$idc}</span>
{else}
class="page-product-heading">{l s='Message cadeau'}
<!-- Customizable <span class="hiddenSpellError" pre="Customizable " data-mce-bogus="1">products</span> -->
method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix">
{if $product->uploadable_files|intval}
class="customizableProductsFile">
class="product-heading-h5">{l s='Pictures'}
clearfix">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
{if $field.type == 0}
class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='pictures_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
{if isset($pictures.$key)}
class="customizationUploadBrowse">
src="{$pic_dir}{$pictures.$key}_small" alt="" />
href="{$link->getProductDeletePictureLink($product, $field.id_customization_field)|escape:'html':'UTF-8'}" title="{l s='Delete'}" >
src="{$img_dir}icon/delete.gif" alt="{l s='Delete'}" class="customization_delete_icon" width="11" height="13" />
</a>
</div>
{/if}
class="customizationUploadBrowse form-group">
class="customizationUploadBrowseDescription">
{if !empty($field.name)}
{$field.name}
{else}
{l s='Please select an image file from your computer'}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
name="file{$field.id_customization_field}" id="img{$customizationField}" class="form-control customization_block_input {if isset($pictures.$key)}filled{/if}" />
</div>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
{if $product->text_fields|intval}
class="customizableProductsText">
<ul id="text_fields">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
{if $field.type == 1}
class="customizationUploadLine{if $field.required} required{/if}">
textField{$customizationField}">
{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
{if !empty($field.name)}
{$field.name}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
{if isset($textFields.$key)}
{$textFields.$key|stripslashes}
{/if}
{/strip}</textarea>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
customizedDatas">
hidden" name="quantityBackup" id="quantityBackup" value="" />
hidden" name="submitCustomizedDatas" value="1" />
class="button btn btn-default button button-small" name="saveCustomization">
{l s='Save'}
</button>
unvisible">
src="{$img_ps_dir}loader.gif" alt="loader" />
</span>
</p>
</form>
class="clear required"><sup>*</sup> {l s='required fields'}
{/if}
</section>
<!--end <span class="hiddenSpellError" pre="end " data-mce-bogus="1">Customization</span> -->
{/if}

J’espère que ça en aidera plus d’un, en tout cas c’est fort utile dans ce genre de situation 😉

Laisser un avis

Consultez les autres articles