Управление кешем в OpenCart 1.5+ из административной панели
Системный кеш OpenCart находится в каталоге ./system/cache. Вроде тут нет ничего сложного, достаточно удалить содержимое каталога, но согласитесь, это не всегда удобно, особенно когда речь идёт об удаленном доступе по протоколу FTP. Если в папке кеша достаточно большое количество файлов, то тут может возникнуть целая проблема, которая связана с особенностью удаленного сеанса.
Большинство FTP-клиентов после удаления каких-либо файлов вновь перечитывают каталог, и если магазин не переведен на техническое обслуживание, то кеш продолжит пополняться новыми файлами, из-за которых FTP-клиент вынужден будет каждый раз перечитывать каталог, что создаст ощущение его зависания. В таких случаях проще воспользоваться консолью сервера, а ещё луче реализовать данную возможность на уровне административного интерфейса OpenCart
Делаем следующее. Перед началом работ, как обычно, желательно сделать резервную копию.
1. В файле ./system/library/cache.php после строки class Cache { необходимо добавить следующий блок кода:
private $is_caching = true; public function __construct() { $this->is_caching = !file_exists(DIR_CACHE . '.disabled'); } public function is_caching() { return $this->is_caching; } public function clear() {array_map('unlink', glob(DIR_CACHE . 'cache.*'));}
В этом же файле код тела функции set заключить в условие if ($this->is_caching) { … }. Аналогично сделать и для функции get.
2. В файле текущего языкового пакета, в нашем случае русского (./admin/language/russian/setting/setting.php), добавляем следующие строки:
$_['entry_cache'] = 'Включить кеширование:'; $_['entry_clear_cache'] = 'Сбросить кеш:<span class="help">(выполняется однократно)</span>';
3. В файле-контроллере ./admin/controller/setting/setting.php после строки if (($this->request->server[‘REQUEST_METHOD’] == ‘POST’) && $this->validate()) { добавляем следующий блок кода:
if ($this->request->post['config_cache'] != $this->cache->is_caching()) { if ($this->cache->is_caching()) {touch(DIR_CACHE . '.disabled');} else { unlink(DIR_CACHE . '.disabled'); }} unset($this->request->post['config_cache']); if (isset($this->request->post['config_clear_cache'])) { $this->cache->clear(); unset($this->request->post['config_clear_cache']); }
В этом же файле после строки $this->data[‘entry_use_ssl’] = $this->language->get(‘entry_use_ssl’); добавляем соответственно строки.
$this->data['entry_cache'] = $this->language->get('entry_cache'); $this->data['entry_clear_cache'] = $this->language->get('entry_clear_cache');
Ниже по коду, перед строкой if (isset($this->request->post[‘config_seo_url’])) { добавим такой блок:
if (isset($this->request->post['config_cache'])) { $this->data['config_cache'] = $this->request->post['config_cache']; } else { $this->data['config_cache'] = $this->cache->is_caching(); }
4. В файле-шаблоне ./admin/view/template/setting/setting.tpl копируем вставкой всю html-конструкцию config_seo_url на следующюю после неё строку и заменим в копии все упоминания config_seo_url на config_cache. После неё вставим конструкцию следующего вида:
<tr> <td><?php echo $entry_clear_cache; ?></td> <td><input type="checkbox" name="config_clear_cache" value="1"></td> </tr>
На этом все. Заходим в административную панель в настройки магазина и пользуемся новой возможностью.
Leave a reply
You must login or register to add a new comment .