2017-02-08 17 views
3

私はこの質問を多く探しましたが、Prestashop 1.6の正解を見つけられませんでした。私はPrestashopキャッシュ、スマートキャッシュをクリアするスクリプトを作成しました。 adminPerformancesコントローラからコードを取得しました。 、Prestashopクリアキャッシュが影響を受けたフォルダ

Tools::clearSmartyCache(); 
Tools::clearXMLCache(); 
Media::clearCache(); 
Tools::generateIndex(); 

は、私はそれがキャッシュ/ Smartyの/キャッシュ/からキャッシュをクリアしていることを読んで、しかし公演のページで明らかにキャッシュ内のスクリプトやクリックを実行するときには、このフォルダからサブフォルダを削除しません。 「キャッシュをクリアする」とは、どのフォルダ/ファイルに影響するかを知っています。

ありがとうございました。

+0

私のケースでは(PS 1.6.1.6)、一部のフォルダだけが削除されますが、すべてのフォルダは削除されません。 'cache/smarty/compile'では' Tools :: clearSmartyCache(); 'を呼び出すときに 'last_flush'が更新されているのを見ています –

答えて

1

Prestashopはレイジーキャッシュと呼ばれるシステムを使用します。ここで

/classes/SmartyCustomクラッセのclearAllCacheclearCache方法です:

public function clearAllCache($exp_time = null, $type = null) 
{ 
    Db::getInstance()->execute('REPLACE INTO `'._DB_PREFIX_.'smarty_last_flush` (`type`, `last_flush`) VALUES (\'template\', FROM_UNIXTIME('.time().'))'); 
    return $this->delete_from_lazy_cache(null, null, null); 
} 

public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) 
{ 
    return $this->delete_from_lazy_cache($template_name, $cache_id, $compile_id); 
} 

public function delete_from_lazy_cache($template, $cache_id, $compile_id) 
{ 
    if (!$template) { 
     return Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'smarty_lazy_cache`', false); 
    } 

    $template_md5 = md5($template); 
    $sql   = 'DELETE FROM `'._DB_PREFIX_.'smarty_lazy_cache` 
         WHERE template_hash=\''.pSQL($template_md5).'\''; 

    if ($cache_id != null) { 
     $sql .= ' AND cache_id LIKE "'.pSQL((string)$cache_id).'%"'; 
    } 

    if ($compile_id != null) { 
     if (strlen($compile_id) > 32) { 
      $compile_id = md5($compile_id); 
     } 
     $sql .= ' AND compile_id="'.pSQL((string)$compile_id).'"'; 
    } 
    Db::getInstance()->execute($sql, false); 
    return Db::getInstance()->Affected_Rows(); 
} 

あなたが見ることができるように、キャッシュファイルがテーブルsmarty_lazy_cache下のデータベースにインデックス化されています。また、キャッシュファイルは決して削除されず、テーブルからインデックスが解除されます。でもそれにはキャッシュオプションと

+0

これはmysqlまたはファイルシステムのキャッシュ用ですか? –

+0

Smartyファイルシステムキャッシュの場合。 'smaty_lazy_cache'テーブルにあるように、' filepath'カラムにはキャッシュファイルへのパスが含まれています。 –

+0

私はテーブルを見ました、それは空です、私は誤ってキャッシュ/ smarty /フォルダを削除し、それを再作成しましたが、いつも空ですあなたは解決策がありますか? ありがとう –

0

はまだfowllowingフォルダにキャッシュファイルを作成します。

/cache/smarty/cache 
/cache/smarty/compile 

私はSmarty_Internal_Utility::clearCompiledTemplateは、それらのファイルを削除しなければならないことだと思います。これは、とにかく、どのようなバグを私が最も多く、キャッシュオプションをオンにして強制的にコンパイルしても、ほとんどの時間私は手動でキャッシュをクリアする必要があります。通常、上記のフォルダを削除することで(より速く、特にローカルの仮想マシンで)。 この問題は、まだ1.7の「バグ」です。

1.7といえば、キャッシュは/app/cacheであり、devには1つとprodには1つあります。そこではキャッシュされた翻訳、class_index.php、そして1.6キャッシュよりも多くのものがあります。

+0

私は私の質問に書いたようにTools :: clearSmartyCache();を試しました。それは/ cache/smarty/cacheと/ cache/smarty/compileサブフォルダをクリアしませんでした –

0

私たちの知る限り、管理パネルからキャッシュをクリアする際に影響を受ける唯一のフォルダです。

/cache/smarty/compile 

私たちが間違っている場合はお知らせください。

関連する問題