В процессе отладки тех или иных модулей или просто после доработки какой-то части OpenCart, приходится сталкиваться с не вполне ожидаемыми результатами работы системы. Касается это, прежде всего, актуальности данных. Опытные пользователи сразу понимают в чём причина и следуют одному простому правилу: после внесения изменений в код ПО OpenCart или работы напрямую с базой данных - необходимо чистить системный кеш!
Системный кеш OpenCart находится в каталоге ./system/cache. Вроде тут нет ничего сложного, достаточно удалить содержимое каталога, но согласитесь, это не всегда удобно, особенно когда речь идёт об удаленном доступе по протоколу FTP. Если в папке кеша достаточно большое количество файлов, то тут может возникнуть целая проблема, которая связана с особенностью удаленного сеанса.
Большинство FTP-клиентов после удаления каких-либо файлов вновь перечитывают каталог, и если магазин не переведен на техническое обслуживание, то кеш продолжит пополняться новыми файлами, из-за которых FTP-клиент вынужден будет каждый раз перечитывать каталог, что создаст ощущение его зависания. В таких случаях проще воспользоваться консолью сервера, а ещё луче реализовать данную возможность на уровне административного интерфейса OpenCart (см. Рисунок 1), поскольку не каждый хостинг может предоставить вход в консоль.
Ниже представлены инструкции по внесению необходимых изменений в ПО OpenCart. Перед началом работ, как обычно, желательно сделать резервную копию.
1. В файле ./system/library/cache.php после строки class Cache { необходимо добавить следующий блок кода:
3. В файле-контроллере ./admin/controller/setting/setting.php после строки if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { добавляем следующий блок кода:
В этом же файле после строки $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');
Системный кеш OpenCart находится в каталоге ./system/cache. Вроде тут нет ничего сложного, достаточно удалить содержимое каталога, но согласитесь, это не всегда удобно, особенно когда речь идёт об удаленном доступе по протоколу FTP. Если в папке кеша достаточно большое количество файлов, то тут может возникнуть целая проблема, которая связана с особенностью удаленного сеанса.
Большинство FTP-клиентов после удаления каких-либо файлов вновь перечитывают каталог, и если магазин не переведен на техническое обслуживание, то кеш продолжит пополняться новыми файлами, из-за которых FTP-клиент вынужден будет каждый раз перечитывать каталог, что создаст ощущение его зависания. В таких случаях проще воспользоваться консолью сервера, а ещё луче реализовать данную возможность на уровне административного интерфейса OpenCart (см. Рисунок 1), поскольку не каждый хостинг может предоставить вход в консоль.
![]() |
Рисунок 1. Управление системным кешем в административной панели OpenCart 1.5+ |
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>
На этом все. Заходим в административную панель в настройки магазина и пользуемся новой возможностью. Кстати, теперь можно оценить производительность системы. Напомню, что при большом количестве файлов и медленной дисковой системе (на виртуальном хостинге) может так случиться, что без кеша магазин будет работать немного быстрее.
Для тех кто незнаком с навыками правки системных файлов или нет на это времени автор готов предложить свою помощь или разработать соответствующий конфигурационный файл vQmod на заказ.
Не работает, окстор 15512, нельзя вкмод?
ОтветитьУдалитьЗдравствуйте! Вы можете заказать необходимое вам решение, о чём, собственно, уже сказано в конце текста курсивом.
Удалить