Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Add post

Add question

You must login to ask a question.

Login

Register Now

Цель сайта совместная помощь друг другу, если вы желаете скачивать ресурсы и ничего при этом не делать, вам нужно оплатить Подписку Другой вариант активно помогать другим участникам

Управление кешем в OpenCart 1.5+ из административной панели

Управление кешем в 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>

На этом все. Заходим в административную панель в настройки магазина и пользуемся новой возможностью.

About Grek

Хорошее начало — не мелочь, хотя и начинается с мелочи По вопросам подписки / рекламе, пишите в личку https://t.me/trafimmamedov или на почту [email protected]

Follow Me

Leave a reply