Archives pour la catégorie Prestashop

[Prestashop 1.6] Activer le mode debug pour vos test

Le mode debug vous permet de voir des erreurs dans votre code, que ce soit des failles dans votre code PHP ou dans certains des fichiers TPL. Cela peut-être très utile si vous tombez sur une page blanche !

  1. Connectez-vous à votre FTP via votre client habituel
  2. Allez dans le dossier de config et ouvrez le fichier defines.inc.php
  3. Changer la valeur _PS_MODE_DEV_ de « false » à « true » . Enregistrez votre fichier
  4. Une fois que vous avez terminez votre debug, pensez à bien remettre _PS_MODE_DEV_ de « true » à « false » avant de passer en production

Source

[Prestashop] Ajouter un champ personnalisé pour un produit

Pour un projet de boutique en ligne, j’ai dû ajouter un champ supplémentaire non prévu nativement à la fiche produit d’une boutique Prestashop comme les points fort. Fort heureusement Prestashop permet « assez » facilement d’intégrer ces champs de type TEXT ou TEXTAREA de façon plutôt propre.

I – Ajouter le champ dans la base de données

Baladez-vous dans votre base de données via phpMyAdmin par exemple et ajouter une colonne « pointsforts » de type TEXT dans la table PREFIX_product_lang (Par défaut PREFIX est ps_)

II – Modification de la classe Product

Versions 1.5.3.x : Rendez-vous dans override/classes/Product.php. Ajoutez-y les lignes suivantes :

self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
	parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
}

Versions 1.5.4+ : Si vous avez une version de Prestashop supérieure ou égale à celle-ci, vous devez créer le fichier d’override « Product.php » dans override/classes/. Son contenu doit ressembler à cela dans le cas présent :

self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
		parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
	}
}

Attention de ne pas oublier de supprimer le fichier cache/class_index.php afin que la surcharge soit bien prise en compte. Ne vous inquiétez pas, le fichier se régénèrera tout seul.

III – Modifier la vue backoffice

Rendez-vous dans admin/themes/default/template/controllers/products/informations.tpl et copiez ce fichier.
Collez-le ensuite dans override/controllers/admin/templates/products/informations.tpl
En s’inspirant de la ligne 290, collez le code suivant, qui va créer le champ texte :
Versions 1.5.x :


	
		{include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
		
		

({l s='Les points forts du produit'})

{include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='pointsforts' input_value=$product->pointsforts }

Versions 1.6.x :


	
		{include file="controllers/products/multishop/checkbox.tpl" field="pointsforts" type="tinymce" multilang="true"}
		
		

({l s='Les points forts du produit'})

{include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='pointsforts' class="autoload_rte" input_value=$product->pointsforts }

IV – Affichage en front-office

Il ne vous reste plus qu’à afficher ce champ en front-office. Pour ce faire, modifiez le fichier themes/votre_theme/product.tpl et ajoutez ce qui suit à l’endroit que vous souhaitez :

{$product->pointsforts}

Si vous souhaitez afficher la valeur de votre nouveau champ sur la page des catégories, rendez-vous dans classes/Category.php et copiez la fonction getProducts() (ligne 555 approximativement).

Collez cette fonction dans le fichier override/classes/Category.php (à créer s’il n’existe pas), et modifiez-y la requête ($sql) , en rajoutant pl.pointsforts dans le SELECT.

V – Supprimer le TinyMCE (Prestashop 1.6)

Il est tout à fait possible d’enlever l’éditeur de texte TinyMCE. La démarche est on-ne-peut-plus simple avec Prestashop 1.6. En effet, l’éditeur ne s’applique que sur les textareas possédant une classe nommée « autoload_rte ». En enlevant-celle-ci, le script ne s’applique plus et vous avez un textarea tout à fait normal.
Dans Prestashop 1.6, il vous suffit donc du supprimer autoload_rte de l’argument « class » passé dans le include à la fin. Si vous avez une version antérieure de Prestashop (1.5 par exemple), la classe n’est pas passée en argument. donc il va falloir retrouver le fichier inclus, copier/remplacer son contenu dans le fichier admin/themes/default/template/controllers/products/informations.tpl et enlever « autoreload_rte ».

VI – Un problème ?

En cas de problème, vérifiez que la compilation est bien désactivée.

Pour cela, rendez-vous dans Paramètres avancés > Performances et modifiez les options suivantes :

  • Cache des templates : Forcer la compilation à chaque appel
  • Cache : Non (X)

Pour les versions 1.5.6, cliquez aussi sur le bouton « Effacer le cache de Smarty et le cache de l’Autoload ».

Une fois cela fait, réessayez. Cela devra fonctionner.

Si tout est bon, pensez cependant à re-modifier ces informations et de les remettre sur :

  • Cache des templates : Ne jamais recompiler les fichiers de templates
  • Cache : Oui

Sans quoi, votre site va se mettre à ramer horriblement.

Et voilà le tour est joué.

Source 1
Source 2

[Prestashop] Afficher/cacher certaines informations dans mon-compte

Quand on accède à la page mon compte de prestashop, il y a une liste avec des liens renvoyant vers différentes pages, notamment vers la page commandes, avoirs, bons de réduction, adresses…

Les onglets avoirs et bons de réduction n’ont pas forcément d’intérêt si le client n’a jamais eu d’avoir ou de bon de réduction. Cela peut même prêter à confusion…

On ne va donc afficher les onglets « avoirs » et « bons de réduction » que si le client en possèdent.

Pour cela, on va travailler sur le fichier controller de my-account.tpl.

Il se trouve à l’adresse: /controllers/front/MyAccountController.php

/! ATTENTION : il faut surcharger ce fichier afin de ne pas perdre des modifications lors d’une mise à jour /!

Il faut donc récupérer ce fichier et le placer dans /override/controllers/front/
Continuer la lecture

[Prestashop] Forcer l’utilisation des balises {php}{/php}

Lors d’un récent projet sur Prestashop 1.5.6.2. j’ai été amenée à devoir utiliser les balises {php}{/php} dans un fichier de template et ça m’a renvoyé une erreur. Voici une astuce pour outrepasser cette erreur.

L’utilisation des balises {php}{/php} dans les fichiers .tpl à été supprimé depuis la version 1.5. de Prestashop.

Pour forcer leur utilisation, il faut modifier le fichier config/smarty.config.inc.php :

Aller aux lignes 29 à 33 :

define('_PS_SMARTY_DIR_', _PS_TOOL_DIR_.'smarty/');
require_once(_PS_SMARTY_DIR_.'Smarty.class.php');
global $smarty;
$smarty = new Smarty();
$smarty->setCompileDir(_PS_CACHE_DIR_.'smarty/compile');

Et changer les par :

define('_PS_SMARTY_DIR_', _PS_TOOL_DIR_.'smarty/');
require_once(_PS_SMARTY_DIR_.'SmartyBC.class.php');
global $smarty;
$smarty = new SmartyBC();
$smarty->setCompileDir(_PS_CACHE_DIR_.'smarty/compile');

…en gros, utiliser SmartyBC.class.php au lieu de Smarty.class.php

(ATTENTION : utiliser les balises {php}{/php} dans les fichiers de template est déprécié par Prestashop !)

[Prestashop] Erreur d’envoi de mail sur le formulaire de contact

Si vous avez migré de la version 1.3 à la version 1.4 de prestashop, vous avez sans doute un soucis avec le formulaire de contact.

Quand vous faites un envoi de mail via le formulaire de contact par défaut, vous avez dû avoir ce message d’erreur :
Il y a 1 erreur :
une erreur s’est produite pendant l’envoi du message

Cependant, malgré ce message d’erreur, les mails arrivent quand même sur votre boîte mail configurée dans le back-office.

J’ai donc testé en local une version 1.4 toute neuve et là pas de problème sur le formulaire contact.
En fouinant un peu j’ai fini par trouvé la différence :

Dans la base de donnée de ma version 1.3 mise à jour en 1.4 la table ps_contact contient 1 élément de type :

  • id_contact = 1
  • email = mail@mail.com
  • customer_service = 0
  • position = 0

Alors que dans la version 1.4 fraichement installée on trouve :

  • id_contact = 1
  • email = mail@mail.com
  • customer_service = 1
  • position = 0

J’ai donc remplacée la valeur 0 de customer_service par 1 et la miracle plus de message

J’espère que ça vous a aidé !

[Prestashop] Effectuer des requêtes facilement dans prestashop

Si vous débutez avec prestashop, vous ne connaissez peut-être pas les fonctions intégrés pour effectuer des requêtes sur votre base de données. Je vais vous expliquer comment réaliser ces requêtes simplement à l’aide de la classe « Db ».

Il existe plusieurs fonctions utiles dans la classe « Db » :

  • getInstance()->Execute() : Récupère une seule ligne de valeur
  • getInstance()->ExecuteS() : Récupère plusieurs lignes sous forme de tableau
  • getInstance()->getValue() : Récupère une seule et unique valeur

_DB_PREFIX_ est une variable contenant le préfixe des tables dans la base de données (configuré à l’installation).
Continuer la lecture

[Prestashop WordPress] Comment coupler WordPress à prestashop

A l’heure actuelle, il existe beaucoup de méthode pour ajouter un blog WordPress à sa boutique Prestashop, après avoir cherché sur plusieurs site, j’en ai retenue une simple, que j’ai adapté à mes besoins.

Les différentes méthodes

Pour le moment, il est plus simple d’intégrer Prestashop dans WordPress. C’est-à-dire qu’au niveau technique on va appliquer certaines modifications dans WordPress pour récupérer l’entête, le pied de page de notre site Prestashop.

1ère étape

Il faut commencer par installer WordPress, en créant un répertoire blog, dans votre répertoire Prestashop de manière à obtenir « votresiteprestashop/blog ». Si vous ne savez pas comment installer WordPress, alors je vous laisse consulter la documentation officielle. Une fois l’installation effectuée, avec l’adresse suivante http://votresiteprestashop/blog vous devriez obtenir le même genre d’affichage, un blog tout ce qu’il y a de plus standard.


Continuer la lecture

[Prestashop] Les variables globales utiles !

{$base_dir}

Url de votre site web, racine du site. Utile et indispensable lorsque vous insérez des liens, je déconseille fortement de mettre des liens en dur directement dans votre code mais plutôt d’utilisez cette variable et toute les autres qui suivent, car le jour où vous migrez d’hébergement ou de nom de domaine, cela pourrait vous causer beaucoup de problèmes.

{$base_dir_ssl}

Idem via le protocol https.

{$content_dir}

Url vers votre dossier racine du site, peut changer en fonction des paramètres SSL. A ne pas confondre avec {$basedir}, cette variable vous donne l’Url complète jusqu’au dossier racine.

{$img_ps_dir}

Url vers le dossier img situé à la racine de votre boutique.

{$img_dir}

Url vers le dossier img de votre thème.

{$css_dir}

Url vers le dossier css de votre thème.
Continuer la lecture