Une nouvelle version de mon module prestashop “EicmsLinks” est disponible.
Pour rappel ce module rajoute des liens dynamiques dans l’éditeur de texte tinyMce pour les contenus cms ( pages cms, descriptions produits, descriptions catégories)

  • pages cms
  • catégories
  • produit ( lien produit, ou ajout au panier)

Pour la description complète vous pouvez lire la page suivante : https://www.h-hennes.fr/blog/prestashop-liens-dynamiques-dans-lediteur-tinymce/

Cette nouvelle version instaure une nouvelle notion de “widgets” qui peuvent également être inséré directement dans la page cms.

Pour l’instant les widgets implémentés sont les suivants :

formulaire de login : permets d’afficher le formulaire de login dans n’importe quelle page cms

Widget login

liste de produits : permets d’afficher une liste de produits dynamique

Widget produits

Plusieurs options sont disponibles pour ce widget :
-type (new|category|price_drop) : Type de produits à afficher
-nb_products : nombre de produits à afficher
-id_category : dans le cas d’un affichage de produit d’une catégorie, identifiant prestashop de la catégorie.

L’ajout de cette fonctionnalité a été réalisée de manière à pouvoir rajouter très facilement des nouveaux widgets.
Nous allons voir ensemble comment procéder.

1) Exemple minimal : sans variables spécifiques

Pour commencer il faut créer une nouvelle classe WidgetName.php dans le dossier “classes” avec le contenu suivant

class WidgetName extends Widget{
 
//Nom du fichier template à utiliser pour l'affichage ( à créer dans view/widgets)
public $template = 'template.tpl';
 
//Fonction nécessaire uniquement si vous souhaitez assigner des variables smarty
/**
* Préparation du contenu
*/
public function initContent() {
parent::initContent();
 
$this->context->smarty->assign('test_var','contenu de ma var de test');
}
}

Créer ensuite votre fichier de template ( view/widgets/template.tpl)

<p>Affichage de mon widget de test</p>
<p>{$test_var}</p>

Votre widget est ensuite bien listé, et lors de son insertion votre contenu est intégré 🙂

2) Exemple plus complet : Utilisation de variables

Les widgets permettent également de définir des variables personnalisées.
Celle-ci doivent être intégrée manuellement dans le code.

Voici quelques exemples pour le widget des produits :

{{widget name="WidgetProducts" nb_products="8" bad_attribute="test"}}
{{widget name="WidgetProducts" nb_products="3" type="price_drop"}}
{{widget name="WidgetProducts" nb_products="6" type="category" id_category="8"}}

Dans le code voici comment gérer ces options,( en partant du meme exemple que précédement)

class WidgetName extends Widget{
 
//Listes des paramètres autorisés pour votre widget, les options non autorisées ne seront pas traitées.
protected static $_allowed_params = array('option1','option2');
 
//Nom du fichier template à utiliser pour l'affichage ( à créer dans view/widgets)
public $template = 'template.tpl';
 
//Fonction nécessaire uniquement si vous souhaitez assigner des variables smarty
/**
* Préparation du contenu
*/
public function initContent() {
parent::initContent();
 
//Les options du widget sont automatiquement disponibles dans la variable de classe $_datas;
//Vous pouvez faire tous les traitements souhaités
if ( $this->_datas['option1']){
//Faire traitement spécifique
}
 
$this->context->smarty->assign('test_var','contenu de ma var de test');
}
}

Voici comment appeller ce widget :

{{widget name="WidgetName" option1="maVar" option2="test"}}
{{widget name="WidgetName" option1="maVar" option2="test" option3="test"}} <!-- Dans ce cas option3 ne sera pas traitée car pas authorisée -->

Le module est toujours dispo sur github : https://github.com/nenes25/prestashop_eicmslinks