Створення кастомного адаптера кешування для OpenCart

338

Від автора: неважливо в якому фреймворку ви працюєте, кешування – важливий інструмент поліпшення загальної продуктивності сайту, який корисно мати при собі. Механізми кешування бувають різні: файлове, APC, Memcached і т. д. Ви можете вибрати відповідний спосіб, виходячи з вимог. Інколи для досягнення бажаного результату необхідно використовувати кілька адаптерів.

В OpenCart кешування відбувається з допомогою кількох, вже вбудовані в ядро, адаптерів. Їх можна використовувати в якості шаблону для створення кастомного адаптера. Для створення кастомного адаптера необхідно створити методи на контракт і підключити свою логіку в них, і все! Новий адаптер буде автоматично підхоплюється, як частина механізму кешування OpenCart.

У всіх адаптерах кешування реалізований базовий механізм зберігання та отримання змінених даних. Точно так само буде працювати наш кастомный адаптер кешування бази даних. Саме тому нам необхідно створити кастомний схему для зберігання кешованих даних.

Встановіть останню версію OpenCart, перш ніж приступити до створення кастомного адаптера.

Створення схеми адаптера

Наші кешовані дані будуть зберігатися в MySQL таблиці dbcache. Давайте створимо її.

Створення кастомного адаптера кешування для OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

CREATE TABLE IF NOT EXISTS `{DB_PREFIX}dbcache` (
`key` varchar(255) NOT NULL,
`value` longblob NOT NULL,
`expire` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Тут важливо відзначити префікс бази даних. Якщо не використовувати його, необхідно використовувати відповідну назву таблиці. Наприклад, якщо префікс бази даних oc_, то таблиця повинна називатися oc_dbcache.

В іншому структура таблиці досить проста. У ній всього три стовпця — key, value і expire. У колонці key зберігається ключ кешування в колонці value – відповідне значення. Колонка expire зберігає зліпок часу UNIX.

Створення файлу адаптера

Всі адаптери кешування OpenCart лежать в папці system\library\cache. Там повинен розташовуватися і наш кастомный адаптер. Створимо файл system\library\cache\database.php з таким кодом.

expire = $expire;
$this->initDbInstance();
}
/**
* Helper method to create DB instance
*/
private function initDbInstance() {
if (is_null(static::$_db)) {
static::$_db = new \DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT);
}
}
/**
* Fetch the stored value in cache by key
*
* @param string $key Key Cache
*
* @return Value of mixed cache key if found, boolean false otherwise
*/
public function get($key) {
$query = static::$_db->query(“SELECT * FROM `” . DB_PREFIX . “dbcache` WHERE `key` = ‘” . $key . “‘ AND `expire` >= ‘” . time() .”‘”);
if ($query->num_rows) {
return unserialize($query->row[‘value’]);
}
return false;
}
/**
* Set the cache value by key
*
* @param string $key Key Cache
* @param mixed $value Cache value
*/
public function set($key, $value) {
$this->delete($key);
static::$_db->query(“INSERT INTO” . DB_PREFIX . “dbcache SET `key` = ‘” . $key . “‘, `value` = ‘” . mysql_escape_string(serialize($value)) . “‘, `expire` = ‘” . (time() + $this->expire) . “‘”);
}
/**
* Delete the stored value in cache by key
*
* @param string $key Key Cache
*/
public function delete($key) {
static::$_db->query(“DELETE FROM” . DB_PREFIX . “dbcache WHERE `key` = ‘”.$key.”‘”);
}
}

За схемою іменування клас Database визначений у просторі імен Cache. В класі дві властивості $_db і $expire. $_db зберігається об’єкт бази даних. $expire задає час життя кешу, коли клас ініціалізований. Властивість $_db оголошено статичним тому, що воно зберігає об’єкт виду singleton.

У конструкторі класу ми встановлюємо час кешування, яке передається з OpenCart у властивість $expire і викликає метод initDbInstance, визначений у тому ж класі, який створює і присвоює об’єкт бази даних властивості $_db, якщо об’єкт раніше не створено.

Далі метод get отримує запис кешу по ключу і часу старіння, а метод set вставляє нову запис даних в базу даних. Крім того, в методі set ми створюємо серію кешу для правильного зберігання. У методі get перед поверненням значення необхідно проводити десеріалізацію.

І нарешті, є метод delete видаляє записи з бази даних. Цікаво відзначити, що метод set викликає delete кожен раз, щоб перевірити таблиця на дублікати!

Створення кастомного адаптера кешування для OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

З створенням файлу адаптера кешування закінчили. У наступному розділі ми дізнаємося, як його підключити в ядро OpenCart.

Підключення кастомного адаптера кешування

На жаль, у адаптера немає back end частини, за допомогою якої його можна було б підключити. Тому в рамках цього уроку ми підключимо його безпосередньо в ядро.

Відкрийте файл index.php в корені сайту. Знайдіть код.

$cache = new Cache(‘file’);

Замінити на:

$cache = new Cache(database’);

Як бачите, ми просто замінили аргумент, або, скоріше, назву адаптера, що передається при створенні об’єкта $cache.

Те ж саме зробіть у файлі index.php у папці admin. Після цього front end і back end будуть використовувати наш кастомный адаптер кешування.

Майже закінчили! Відкрийте пару сторінок на front end і back end. Таблиця dbcache повинна бути заповнена новими записами!

Створення кастомного адаптера кешування для OpenCart

Точно так само можна створити адаптер кешування і для інших движків зберігання. Незважаючи на простоту прикладу в цьому уроці, думаю, що концепція буде важлива для вашого кастомного адаптера.

Висновок

Сьогодні ми обговорили, як створити кастомный адаптер кешування в OpenCart. У процесі демонстрації був створений адаптер кешування бази даних.

Створення кастомного адаптера кешування для OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення