Site icon Freelance Expert PrestaShop – WordPress – WooCommerce : Arnaud Merigeau

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 :

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 😉


Quitter la version mobile