24 ноября 2015 г.

В процессе отладки тех или иных модулей или просто после доработки какой-то части OpenCart, приходится сталкиваться с не вполне ожидаемыми результатами работы системы. Касается это, прежде всего, актуальности данных. Опытные пользователи сразу понимают в чём причина и следуют одному простому правилу: после внесения изменений в код ПО OpenCart или работы напрямую с базой данных - необходимо чистить системный кеш!

Системный кеш OpenCart находится в каталоге ./system/cache. Вроде тут нет ничего сложного, достаточно удалить содержимое каталога, но согласитесь, это не всегда удобно, особенно когда речь идёт об удаленном доступе по протоколу FTP. Если в папке кеша достаточно большое количество файлов, то тут может возникнуть целая проблема, которая связана с особенностью удаленного сеанса.

Большинство FTP-клиентов после удаления каких-либо файлов вновь перечитывают каталог, и если магазин не переведен на техническое обслуживание, то кеш продолжит пополняться новыми файлами, из-за которых FTP-клиент вынужден будет каждый раз перечитывать каталог, что создаст ощущение его зависания. В таких случаях проще воспользоваться консолью сервера, а ещё луче реализовать данную возможность на уровне административного интерфейса OpenCart (см. Рисунок 1), поскольку не каждый хостинг может предоставить вход в консоль.

Рисунок 1. Управление системным кешем в административной панели OpenCart 1.5+
Ниже представлены инструкции по внесению необходимых изменений в ПО 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>

На этом все. Заходим в административную панель в настройки магазина и пользуемся новой возможностью. Кстати, теперь можно оценить производительность системы. Напомню, что при большом количестве файлов и медленной дисковой системе (на виртуальном хостинге) может так случиться, что без кеша магазин будет работать немного быстрее.

Для тех кто незнаком с навыками правки системных файлов или нет на это времени автор готов предложить свою помощь или разработать соответствующий конфигурационный файл vQmod на заказ.

2 комментария:

  1. Не работает, окстор 15512, нельзя вкмод?

    ОтветитьУдалить
    Ответы
    1. Здравствуйте! Вы можете заказать необходимое вам решение, о чём, собственно, уже сказано в конце текста курсивом.

      Удалить

  • RSS
  • Twitter
  • Youtube