Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Настройки и кеш

Два объекта реестра хранят значения, которые нужны часто. $this->config хранит настройки магазина — они меняются редко и редактируются в панели. $this->cache хранит результаты медленной работы, чтобы следующий запрос её не повторял.

Чтение настройки

$storeName = $this->config->get('config_name');

get() возвращает значение по ключу или null, если такой настройки нет. Здесь это название магазина из System → Settings.

Откуда берутся настройки

ИсточникЧто в нём
Таблица oc_settingВсё, что сохранено в панели, включая настройки дополнений
system/config/Значения движка по умолчанию: хранилища кеша и сессий, стартовые действия

В начале каждого запроса движок загружает строки oc_setting для текущего магазина в $this->config.

Часто используемые ключи:

КлючЗначение
config_nameНазвание магазина
config_emailЭлектронная почта магазина
config_languageКод текущего языка, en-gb
config_language_idИдентификатор текущего языка
config_currencyОсновная валюта
config_store_idИдентификатор текущего магазина
module_acme_hello_textНастройка вашего модуля

Приставка показывает владельца: config_ — ядро, module_, payment_, shipping_, total_ — дополнения.

Изменение на один запрос

$this->config->set('module_acme_hello_text', 'Временный текст');

set() меняет значение только до конца запроса. Чтобы сохранить настройку навсегда, используют модель панели setting/setting и её метод editSetting() — как на странице настроек модуля.

Кеш

Список, который долго строится, сохраняют в кеш и в следующий раз читают оттуда:

// extension/acme_hello/catalog/controller/module/acme_hello.php, в index()
$key = 'acme_hello.latest.' . (int) $this->config->get('config_language_id');
 
$products = $this->cache->get($key);
 
if (!$products) {
    $this->load->model('catalog/product');
 
    $products = $this->model_catalog_product->getProducts(['start' => 0, 'limit' => 4]);
 
    $this->cache->set($key, $products);
}

Первый запрос выполняет выборку и сохраняет результат, следующие берут массив из кеша. В ключе есть идентификатор языка, потому что названия товаров в разных языках разные.

МетодЧто делает
get($key)Возвращает значение или пустое значение, если его нет или оно устарело
set($key, $value)Сохраняет значение
delete($key)Удаляет значение

Где хранится кеш

По умолчанию это файлы в system/storage/cache/. Хранилище и срок жизни записи задаются в system/config/default.php ключами cache_engine и cache_expire; там же доступны другие хранилища, например Redis.

Очистка

Когда данные меняются, запись кеша удаляют — иначе страница показывает старые данные, пока запись не устареет:

$this->cache->delete('acme_hello.latest.' . (int) $this->config->get('config_language_id'));

Во время разработки достаточно удалить файлы в system/storage/cache/.

Частая ошибка

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

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.