Protéger la variable _PS_MODE_DEV_ pour ne pas pouvoir l’activer depuis l’administration Prestashop

Pour protéger la variable PS_MODE_DEV de Prestashop afin qu’elle ne puisse pas être activée depuis l’administration, vous pouvez suivre les étapes suivantes:

  • Ouvrez le fichier /config/defines.inc.php de votre installation Prestashop.
  • Cherchez la ligne suivante: define('_PS_MODE_DEV_', false);
  • Changer par les lignes suivantes :


/* Debug only */
if (!defined('_PS_MODE_DEV_')) {
if ($_SERVER['REMOTE_ADDR'] == '90.3.65.33') {
define('_PS_MODE_DEV_', false);
} else {
// Changer le format du boolean pour éviter que Prestashop change ce define depuis l'admin
// comme ceci : define('_PS_MODE_DEV_', (bool)0);
// ça bloque la modification de cette manière pour bypass la REGEX
define('_PS_MODE_DEV_', (bool)0);
}
}

 

Télécharger des images depuis une liste CSV

Il suffit d’avoir une liste d’url une à une à la ligne au format CSV

 

<?php


$fichier = __DIR__ . '/images.csv';


$csv = new SplFileObject($fichier); // On instancie l'objet SplFileObject
$csv->setFlags(SplFileObject::READ_CSV); // On indique que le fichier est de type CSV
$csv->setCsvControl(';'); // On indique le caractère délimiteur, ici c'est la virgule

foreach ($csv as $data) {

    $file_name = basename($data[0]);

    sleep(1);

    if (file_put_contents($file_name, file_get_contents($data[0]))) {
        echo "ok pour " . $file_name . "<br />";
    } else {
        echo "Erreur pour " . $file_name . "<br />";
    }
}


?>

Remplacer des caractères sur une table sérialisée

Ici un cas concret sous Prestashop.

Ce code permet de changer tous les http en https sur tous les contenus :

<?php
require(dirname(__FILE__) . '/config/config.inc.php');

    $aData = Db::getInstance()->executeS('
SELECT id,content
FROM ' . _DB_PREFIX_ . 'matable
');

function replacePNJ($value) {
    $value = str_replace('http://www', 'https://www', $value);

    return $value;
}


function buildTree(array $elements, $parentId = 0) {
    $branch = array();
    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }

            $element['content'] = replacePNJ($element['content']);
            $branch[] = $element;
        }

    }
    return $branch;
}


foreach ($aData as $value) {
   $dataTmp = unserialize($value['content']);
    $dataTmp = buildTree($dataTmp);

   $data = serialize($dataTmp);

   Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'matable SET `content`="' . pSQL($data, true) . '" WHERE id='.$value['id_belvg_productattabs']);
}

 

 

Prestashop: Quand les prix de la liste produit sont à zero

Il peut arriver que les prix de la liste produit s’affichent à zéro.

Il faut alors vérifier qu’en base de données, les valeurs cache_default_attribute de la table `ps_product` ou `ps_product_shop` suivant la configuration multiboutique ou non.


SELECT id_product, cache_default_attribute, (SELECT COUNT(id_product) FROM `ps_product_attribute` as `pa` INNER JOIN `ps_product_attribute_shop` as `pas` ON `pas`.id_product_attribute = `pa`.id_product_attribute WHERE `pa`.id_product = `ps`.id_product AND `pas`.id_shop = 5 ) as attribute FROM `ps_product_shop` as `ps` WHERE id_shop = 5 and cache_default_attribute != 0

Si le produit n’a pas de déclinaison, il faut alors mettre la valeur cache_default_attribute à zéro