Snippets

...

PrestaShop

Filtrer suivant le groupe de client

Depuis un contrôleur, un module ou autre, on peut réaliser une condition sur le groupe du client. On identifie le groupe de client par son ID. Dans l'exemple, l'ID est 999. La variable $in_group est à true si le client est dans le bon groupe.

$this->context = Context::getContext();
$in_group = in_array(999, Customer::getGroupsStatic($this->context->customer->id)) ? true : false;

Checker si un client est connecté

Classique, on a régulièrement besoin de s'assurer si un client est bien connecté pour accéder à certaines parties de la boutique. Depuis un contrôleur ou un module, on peut réaliser ce type de condition de la manière suivante :

$this->context = Context::getContext();
if((bool)$this->context->customer->isLogged())
   echo 'Client connecté';
else
   echo 'Client pas connecté';

Récupérer le tableau des langues

Dans bien des cas, il est impératif de récupérer les langues activées ou non sur une boutique. Les lignes de code ci-après permettent de répondre à ce besoin.

// Liste des langues de la boutique
$lang = Language::getLanguages();

// Liste des langues activées de la boutique
$lang = Language::getLanguages(true);

// Liste de toutes les langues de la boutique avec l'ID = 2 (seulement en multi-boutique)
$lang = Language::getLanguages(false, 2);

// Liste des langues activées de la boutique avec l'ID =  2 (seulement en multi-boutique)
$lang = Language::getLanguages(true, 2);

Le fichier class_index.php ne s'actualise pas

Dans les versions 1.6.0.9 et 1.6.1.14 de PrestaShop, le fichier class_index.php ne s'actualise pas. C'est très gênant quand on cherche à faire des overrides de classes ou de contrôlleurs. Il y a une erreur dans le chemin du fichier. Pour corriger ce pépin, il faut modifier le fichier classes/PrestaShopAutoload.php de la manière ci-après. Seulement la ligne 35 est à modifier.

// Originale
const INDEX_FILE = 'cache/class_index.php';

// Modification
const INDEX_FILE = '/cache/class_index.php';

Récupérer les mots-clés (tags) sur PrestaShop 1.7

Dans la version 1.7 de PrestaShop, par défaut, les mots-clés ne sont pas affichés sur la boutique (front-office). On peut bien les ajouter côté administration (back-office), mais rien côté boutique. Ils continuent de fonctionner pour la recherche mais pas d'affichage sur la fiche produit. Pour récupérer les tags sur la fiche produit, il faut passer par un override du contrôleur Product (/override/controllers/front/ProductController.php). Ci-après le contenu de l'override.

<?php
   class ProductController extends ProductControllerCore {
      public function initContent() {
         parent::initContent();
         $this->context->smarty->assign('tags', $this->product->tags[$this->context->language->id]);
      }
   }
?>

Désactiver l'autoresize TinyMce sur PrestaShop

Cette modification modifie le coeur du CMS PrestaShop. Pour effectuer cette modification, il faut modifier dans le fichier /js/admin/tinymce.inc.js la ligne plugins:. Il faut supprimer la dernière valeur autoresize. On se retrouve donc avec la ligne suivante :

plugins: "align colorpicker link image filemanager table media placeholder advlist code table",

L'administration de la boutique (back-office) n'est plus accessible sur PrestaShop 1.7

Dans cette version de PrestaShop, qui embarque le framework Symfony, il arrive que le cache déraille. L'administration de la boutique n'est plus accessible avec un message d'erreur du type comme ci-dessous :

Fatal error: require(): Failed opening required '/home/testtest/www/var/cache/prod/ContainerVpkyxyx/removed-ids.php' (include_path='/home/testtest/www/tools/htmlpurifier/standalone:/home/testtest/www/vendor/pear/pear_exception:/home/testtest/www/vendor/pear/console_getopt:/home/testtest/www/vendor/pear/pear-core-minimal/src:/home/testtest/www/vendor/pear/archive_tar:.:/usr/local/php7.0/lib/php') in /home/testtest/www/var/cache/prod/ContainerVpkyxyx/appProdProjectContainer.php on line 860

Pour remédier au problème, il faut vider les dossiers du cache via le FTP aux chemins ci-dessous :

  • /www/var/cache/dev
  • /www/var/cache/prod

Supprimer une commande sur PrestaShop 1.6 ou 1.7

Dans le cadre du développement d'une boutique, de nombreux tests sont réalisés pour s'assurer du bon fonctionnement du tunnel de commande. En résulte, des commandes de tests. Avant de lancement d'une boutique e-commerce en production, il peut s'avérer pertinent de supprimer ces résidus de tests pour faire plus propre. Il n'existe par défaut pas la possibilité depuis le BO pour le faire : aucun bouton ou lien. Cependant, la méthode est bien disponible dans le code. Il suffit de modifier depuis la page de détails d'une commande le lien de la manière suivante :

  • https://site.com/admin/index.php?controller=AdminOrders&id_order=1&vieworder&token=blabla
  • https://site.com/admin/index.php?controller=AdminOrders&id_order=1&deleteorder&token=blabla

Afficher les différents patterns pour le back-office PrestaShop 1.7

Une page cachée existe et permet d'afficher les différentes solutions proposées en terme de patterns pour concevoir des nouvelles pages/modules en back-office : https://boutique.fr/admin/index.php?controller=AdminPatterns

Renommer le champ passwd dans les erreurs PrestaShop 1.6

Il faut ajouter la traduction dans le fichier au chemin suivant : /translations/fr/fields.php

$_FIELDS['Customer_76a2173be6393254e72ffa4d6df1030a'] = 'Mot de passe';

Mondial Relay erreur API 38 : Numéro de téléphone incorrect

Si le module Mondial Relay renvoie l'erreur API 38 : Numéro de téléphone incorrect, c'est qu'il y a un soucis au niveau du numéro de téléphone du client dans les adresses. Il faut regarder l'id_address lié à la commande. Ensuite fouiller dans la table ps_address et faire les modifications.

Rediriger le client sur la page mon compte après l'inscription

Après une inscription en front-office sur une boutique PrestaShop 1.7, le client est redirigé sur la page d'accueil. Si on souhaite le rediriger sur la page mon compte, il faut ajouter la ligne de code ci-après dans le fichier /themes/templates/customer/_partials/customer-form.tpl.

<input type="hidden" name="back" value="{$urls.pages.my_account}" />

WordPress

Désactiver la corbeille

Pour limiter l'espace qu'occupe votre base de données ou pour toute autre raison, vous pouvez désactiver la corbeille. Ainsi, un article supprimé ne passera pas par l’étape corbeille mais sera détruit immédiatement. Il faut ajouter la ligne ci-dessous dans le fichier wp-config.php qui se situe à la racine de votre site. Vous pouvez également décider de la vider de manière récurrente, comme par exemple avec la deuxième ligne. Cette dernière vide la corbeille toutes les semaines.

define('EMPTY_TRASH_DAYS', 0);
define('EMPTY_TRASH_DAYS', 7);

MySQL

Afficher tous les noms des tables d'une base de données

SHOW tables;

Dupliquer une table avec les données

CREATE TABLE table_nouveau LIKE table_a_dupliquer;
INSERT INTO  table_nouveau SELECT * FROM table_a_dupliquer;

PHP

Afficher la date et l'heure du jour en français en PHP

<?php 
   date_default_timezone_set('Europe/Paris');
   setlocale(LC_TIME, 'fr_FR');
   echo utf8_encode(strftime('Nous sommes le %A %e %B %Y et il est %Hh%M', time()));
?>
Résultat
Nous sommes le mardi 15 juin 2021 et il est 03h15