Jump to content

[Résolu] Problème de Cache Smarty


Recommended Posts

Bonjour à tous et toutes,

Etant depuis quelques mois sur Prestashop v1.31 (Mise à jour depuis la 1.25), je rencontre depuis peu un symptôme, comme, la modification d'un fichier .tpl que je tranfert via transfert FTP mais dont aucuns changement visuels en FO...

J'ai de suite pensé au cache Smarty à vider par FTP, mais constate que le cache dans tools/smarty/ est bien vide, par contre + de 100 fichiers dans le répertoire /compile/

J'ai tenté de vider le contenu du répertoire compile, en ne laissant que le fichier index.php, hélas une page blanche apparait FO en rafraichissant la page.

J'ai tenté l'install du module ClearSmarty, mais pareil, aucune erreur de BO, mais dès que le module vide le cache, une page blanche en FO.

Mon fichier smarty.config.inc.php est modifié à false sur caching, et false sur force_compile, afin d'optimiser l'affichage des pages en FO, de ce côté la, tout est OK, si je modifie à true un des 2 fichiers, une page blanche apparait en FO.

Que se passe t'il ? Comme y remédier ?

Merci de vos réponse,

Olivier

Link to comment
Share on other sites

bonjour,

vous devriez probablement forcer la compilation du code smarty dans le fichier config du dossier /config
a priori je dirais que cette valeur est actuellement sur "off" ce qui est ok pour un site en prod mais peu amener ces symptomes en dev ! passer la valeur à "on", recharger la page pour que le nouveau tpl soit pris en compte, puis repasser la vaeulr à "off" pour réactiver le cache.

Link to comment
Share on other sites

Bonjour et merci de la réponse,

le fichier en question à passer sur ON le temps de est config.inc.php ? si c celui ci, je ne vois pas la fonction Off hormis le debug....
Concernant le fichier smarty.config.inc.php, ce dernier est réglé comme mon premier post, mais si j'apporte une modif quelconque dessus, page blanche en FO, donc rien à recharger....

merci de votre aide

Link to comment
Share on other sites

malgré de nombreuses tentatives, vidé les caches manuellement, modifié le fichier smarty, toujours le même problème, plus aucuns visuels en FO de mes changement sur fichiers ou autres, le cache smarty est plein et je ne peut rien faire....

Merci de votre aide

Link to comment
Share on other sites

Bonjour,

Toujours pas d‘ébauche de solution ? je tourne en rond car toutes manipulations que je fais est dans le vide et non prise en compte, et si je vide manuellement le répertoire compil, ou au travers d'un module, une belle page blanche en FO, et bien entendu aucuns accès quelconque,

merci de votre aide

Link to comment
Share on other sites

Bonjour et merci beaucoup de votre réponse

le code de mon fichier smarty.config.inc.php actuel :

<?php

require_once(_PS_SMARTY_DIR_.'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir     = _PS_THEME_DIR_.'tpl';
$smarty->compile_dir     = _PS_SMARTY_DIR_.'compile';
$smarty->cache_dir         = _PS_SMARTY_DIR_.'cache';
$smarty->config_dir     = _PS_SMARTY_DIR_.'configs';
$smarty->caching         = false;
$smarty->force_compile    = false; // to pass "false" when put into production
$smarty->compile_check    = false;
//$smarty->debugging        = true;
$smarty->debug_tpl        = _PS_ALL_THEMES_DIR_ . 'debug.tpl';

function smartyTranslate($params, &$smarty)
{
   /*
    * Warning : 2 lines have been added to the Smarty class.
    * "public $currentTemplate = null;" into the class itself
    * "$this->currentTemplate = substr(basename($resource_name), 0, -4);" into the "display" method
    */
   global $_LANG, $_MODULES, $cookie, $_MODULE;
   if (!isset($params['js'])) $params['js'] = 0;
   if (!isset($params['mod'])) $params['mod'] = false;
   $msg = false;

   $string = str_replace('\'', '\\\'', $params['s']);
   $key = $smarty->currentTemplate.'_'.md5($string);
   if ($params['mod'])
   {
       $iso = Language::getIsoById($cookie->id_lang);

       if (Tools::file_exists_cache(_PS_THEME_DIR_.'modules/'.$params['mod'].'/'.$iso.'.php'))
       {
           $translationsFile = _PS_THEME_DIR_.'modules/'.$params['mod'].'/'.$iso.'.php';
           $modKey = '<{'.$params['mod'].'}'._THEME_NAME_.'>'.$key;
       }
       else
       {
           $translationsFile = _PS_MODULE_DIR_.$params['mod'].'/'.$iso.'.php';
           $modKey = '<{'.$params['mod'].'}prestashop>'.$key;
       }

       if (@include_once($translationsFile))
           $_MODULES = array_merge($_MODULES, $_MODULE);

       $msg = (is_array($_MODULES) AND key_exists($modKey, $_MODULES)) ? ($params['js'] ? addslashes($_MODULES[$modKey]) : stripslashes($_MODULES[$modKey])) : false;
   }
   if (!$msg)
       $msg = (is_array($_LANG) AND key_exists($key, $_LANG)) ? ($params['js'] ? addslashes($_LANG[$key]) : stripslashes($_LANG[$key])) : $params['s'];
   return ($params['js'] ? $msg : Tools::htmlentitiesUTF8($msg));
}
$smarty->register_function('l', 'smartyTranslate');

function smartyDieObject($params, &$smarty)
{
   return Tools:($params['var']);
}
$smarty->register_function('d', 'smartyDieObject');

function smartyShowObject($params, &$smarty)
{
   return Tools:($params['var']);
}
$smarty->register_function('p', 'smartyShowObject');

function smartyMaxWords($params, &$smarty)
{
   $params['s'] = str_replace('...', ' ...', html_entity_decode($params['s'], ENT_QUOTES, 'UTF-8'));
   $words = explode(' ', $params['s']);

   foreach($words AS &$word)
       if(strlen($word) > $params['n'])
           $word = substr(trim(chunk_split($word, $params['n']-1, '- ')), 0, -1);

   return implode(' ',  Tools::htmlentitiesUTF8($words));
}

$smarty->register_function('m', 'smartyMaxWords');

function smartyTruncate($params, &$smarty)
{
   $text = isset($params['strip']) ? strip_tags($params['text']) : $params['text'];
   $length = $params['length'];
   $sep = isset($params['sep']) ? $params['sep'] : '...';

   if (Tools::strlen($text) > $length + Tools::strlen($sep))
       $text = substr($text, 0, $length).$sep;

   return (isset($params['encode']) ? Tools::htmlentitiesUTF8($text, ENT_NOQUOTES) : $text);
}

$smarty->register_function('t', 'smartyTruncate');

function smarty_modifier_truncate($string, $length = 80, $etc = '...',
                                 $break_words = false, $middle = false, $charset = 'UTF-8')
{
   if ($length == 0)
       return '';

   if (strlen($string) > $length) {
       $length -= min($length, strlen($etc));
       if (!$break_words && !$middle) {
           $string = preg_replace('/\s+?(\S+)?$/', '', Tools::substr($string, 0, $length+1, $charset));
       }
       if(!$middle) {
           return Tools::substr($string, 0, $length, $charset) . $etc;
       } else {
           return Tools::substr($string, 0, $length/2, $charset) . $etc . Tools::substr($string, -$length/2, $charset);
       }
   } else {
       return $string;
   }
}
$smarty->register_modifier('truncate', 'smarty_modifier_truncate');
$smarty->register_modifier('secureReferrer', array('Tools', 'secureReferrer'));

global $link;

$link = new Link();
$smarty->assign('link', $link);

?>


La modification s'étant juste porté sur la modification de true vers false sur la ligne $smarty->force_compile = false;, et ce dans le but d'optimiser presta 1.31 suite à une lenteur constatée lors de la MAJ.

Je viens de constater que dans le répertoire tools/smarty/Smarty.class.php, à la ligne 152 est également présent var $force_compile = false;, je n'y ai rien touché, juste visualisé ! Est ce que cela à une influence sur mon soucis ?

En tout cas, merci de votre intérêt et votre réponse,

Olivier

Link to comment
Share on other sites

Bonjour,

Désolé du retard de la réponse...beaucoup de travail !
Les droits en écritures sont d'origine à l'installation, j'ai essayé en droit 777 sur tout le répertoire smarty/cache et compile, mais rien n'y change, toujours une page blanche en vidant le répertoire /compile et/ou cache, un cauchemar !

Une autre idée ??

Merci de votre aide

Link to comment
Share on other sites

  • 4 weeks later...

J'etait partit en vacance, je n'ai pas pu vous répondre.

Pourriez vous indiquer comment vous avez résolu votre problème ?

-> dans le fichier config.inc.php il faut mettre

@ini_set('display_errors', 'on');

au lieu de off pour afficher les erreurs PHP

Link to comment
Share on other sites

  • 3 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...