Создание модуля для очистки кеша OpenCart 3

Ромчик
0

opencart3Доброго времени суток. В прошлой статье «Создание расширения очистки кеша для OpenCart 3» мы с вами создали расширение для OpenCart 3, которое отчищает весь кеш. Все хорошо работает. Но есть проблема. Если мы обновим наш OpenCart, то наш функционал исчезнет. Это произойдет из-за того, что перезапишутся системные  файлы, в которые мы внесли изменения. Для того, чтобы этого не произошло нам необходимо все изменения системных файлов поместить в так называемый модификатор.

Что такое модификатор OpenCart?

Модификатор OpenCart.

Модификатор OpenCart – это xml файл, в котором описываются файлы, которые необходимо изменить. При применении модификатора в специальной папке будет создана копия изменяемого файла с внесенными изменениями. Так, например, в OpenCart 3 все измененные файлы будут находится в storage/modification.

Давайте создадим файл install.xml


<?xml version="1.0" encoding="utf-8"?>

<modification>

<name>Test</name>

<code>Test</code>

<version>1.0</version>

<author>Zloykolobok</author>

<link>https://web-programming.com.ua</link>

<file path="admin/controller/common/dashboard.php">

<operation>

<search><![CDATA[

$this->response->setOutput

]]></search>

<add position="before"><![CDATA[

$data['linkClearCache'] = $this->url->link('extension/total/cache','user_token=' . $this->session->data['user_token'],true);

]]></add>

</operation>

</file>

<file path="admin/view/template/common/dashboard.twig">

<operation>

<search><![CDATA[

<button type="button" id="button-setting" title="{{ button_setting }}" data-loading-text="{{ text_loading }}" class="btn btn-info"><i class="fa fa-cog"></i></button>

]]></search>

<add position="before"><![CDATA[

<a href="{{ linkClearCache }}" class="btn btn-success">Clear cache</a>

]]></add>

</operation>

</file>

<file path="system/library/cache/file.php">

<operation>

<search><![CDATA[

public function get($key)

]]></search>

<add position="before"><![CDATA[

public function deleteAll()

{

$files = glob(DIR_CACHE . 'cache.*');

if($files){

foreach ($files as $file) {

if(file_exists($file)){

unlink($file);

}

}

}

}

]]></add>

</operation>

</file>

<file path="system/library/cache.php">

<operation>

<search><![CDATA[

public function delete($key)

]]></search>

<add position="before"><![CDATA[

public function deleteAll()

{

$this->adaptor->deleteAll();

}

]]></add>

</operation>

</file>

</modification>

Давайте теперь рассмотрим данный файл подробнее. (Теги: xml, modification, name, code, version, author, link я рассматривать не буду, тут все понятно)

А вот в теге file в path мы указываем путь для изменяемого файла.

Дальше в тегах <operation></operation> мы заключаем операции, которые хотим произвести над файлом.

В тегах <search></search> указываем данные для поиска.

А в тегах <add></add> указываем, что должны  сделать с этими данными (заменить или вставить)

Так, например, в файле


admin/controller/common/dashboard.php

мы ищем данные


<![CDATA[

$this->response->setOutput

]]>

И перед этими данными вставляем (если они будут найдены) свои:


<add position="before"><![CDATA[

$data['linkClearCache'] = $this->url->link('extension/total/cache','user_token=' . $this->session->data['user_token'],true);

]]></add>

Тут обратите внимание на параметр position, который указывает, что сделать с новыми данными. Данный параметр может принимать несколько значений, вот основные:

  • before – вставка данных перед искомой строкой.
  • after – вставка данных после искомой строки.
  • replace – вставка данных вместо искомой строки.

Отлично, модификатор создан.

Создадим папку upload/admin/controller/extension/total и в total создадим файл cache.php со следующим кодом:


<?php

class ControllerExtensionTotalCache extends Controller {

private $error = array();

public function index()

{

if($this->validate()){

$this->clearAll();

}

return $this->response->redirect($this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true));

}

public function clearAll() {

$this->cache->deleteAll();

return $this->response->redirect($this->url->link('common/dashboard','user_token='.$this->session->data['user_token'], true));

}

protected function validate() {

if (!$this->user->hasPermission('modify', 'tool/cache')) {

$this->error['warning'] = 'Ooops';

}

return !$this->error;

}

}

Теперь папку upload (cо всеми вложениями) и файл xml нужно запаковать в zip архив с названием <название модуля>.ocmod.zip

Можно приступить к установке этого модуля.

Установка модуля для OpenCart 3

Переходим в админку. Переходим «Модули/Расширения» -> «Установка расширений» и жмем «Загрузить»

Загрузка и установка модуля для OpenCart

Выбираем наш архив с модулем (в моем случае install.ocmod.zip) и устанавливаем его.

Модуль установлен

Наш модуль установлен.

Переходим «Модули/Расширения» -> «Модификаторы» и жмем «Обновить»

Обновление модификаторов

Отлично давайте проверим папку с модификаторами storage/modification

Модифицированные файлы

Как видите измененные файлы появились. Давайте проверим работоспособность нашего модуля.

Но перед этим нам необходимо дать доступ на просмотр и на изменение для группы «Administrator». Для этого переходим «Система» -> «Пользователи» -> «Группы пользователей». Нажать редактирование напротив группы «Administrator» и разрешить «extension/total/cache»

Устанвока прав доступа

Вот теперь можно проверить работоспособность модуля. Переходим в dashboard

Очистка кеша

И жмем «Clear cache»

Очистка кеша прошла успешно.

Заключение.

Мы с вами создали модуль полной очистки кеша. Да, модуль еще сыроват: нет языковых файлов, не выводится сообщение о завершении очистки кеша, полная очистка кеша рабоает только для кеша хранящегося в файлах.  Но цель статьи была показать, как с помощью файла модификатора можно изменить системные файлы OpenCart.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика