Використання обєктів Registry і Loader в початковій завантаженні OpenCart

315

Від автора: OpenCart став дуже корисною платформою для eCommerce та інтернет-магазинів нижчого і середнього рівня. Він надає комплексні функції у своєму стеку, підтримує просту структуру, з хорошою модульною архітектурою, яка може бути розширена. У цій статті ми зосередимося на деяких елементах процесу початкової завантаження OpenCart.

І хоча існує безліч компонентів, які беруть участь в звичайному процесі початкового завантаження, у тому підручнику ми зосередимось на об’єктах «Registry» і «Loader». Фрагменти коду, описані у цій статті, належать до OpenCart версії 2.0.x. Код класу «Registry» у версії 1.5.x і 2.0.x однаковий, а код класу «Loader» сильно змінився. Тому ми зосередимося на версії OpenCart 2.0.x.

Об’єкт Registry

Як випливає з назви, об’єкт registry використовується для зберігання елементів, від простих змінних до складних об’єктів, коли викликається метод «set». Він зберігає всі елементи, використовуючи “key” (“ключ”), тому пізніше до них легше отримати доступ, коли викликається метод “get”.

Давайте розглянемо сам файл класу. Відкрийте файл, розташований в «system / engine / registry.php » у вашому улюбленому текстовому редакторі!

data[$key]) ? $this->data[$key] : null);
}
public function set($key, $value) {
$this->data[$key] = $value;
}
public function has($key) {
return isset($this->data[$key]);
}
}

Як можна побачити, визначення класу досить просто зрозуміти. Він зберігає всі властивості «data» об’єкта, який оголошується як масив, а область видимості private. У методі «get» він перевіряє, чи доступне значення для бажаного «ключа», і воно повертає значення, якщо воно є, і «null», якщо немає. У методі «set» він вставляє новий елемент в масив «data», використовуючи аргументи, передані методу. Нарешті, він надає метод «has», щоб перевірити, чи встановлений певний «ключ» масив «data».

Використання обєктів Registry і Loader в початковій завантаженні OpenCart

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

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

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

Тепер давайте подивимося, як середовище OpenCart використовує об’єкт Registry на початковій стадії виконання сторінки. Відкрийте файл index.php у кореневому каталозі документа OpenCart. Можна побачити, що об’єкт $registry створюється у виконанні скрипта дуже рано.

// Registry
$registry = new Registry();

Після створення об’єкта $registry він зберігає кілька інших об’єктів, використовуючи метод «set». Розглянемо кілька прикладів.

set(‘load’, $loader);
// Config
$config = new Config();
$registry->set(‘config’, $config);
// Database
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set(‘db’, $db);
// Request
$request = new Request();
$registry->set(‘request’, $request);
// Session
$session = new Session();
$registry->set(‘session’, $session);

Я привів тут кілька прикладів використання об’єкта $registry. Як ви могли помітити, часто використовувані об’єкти створюються і зберігаються у реєстрі. Причина в тому, що вам не потрібно створювати екземпляри загальних об’єктів класу кілька разів, тому ви можете просто викликати метод «get» об’єкта $registry для використання бажаного об’єкта. Цей підхід дещо схожий на «Singleton Pattern», в якому ви змушені зберігати один примірник класу.

Тепер об’єкт $registry заповнений корисними матеріалами, але як він використовується? Подивимося, як об’єкт $db , що зберігається в ньому, використовує $registry у моделі Activity модуля Account. Відкрийте файл, розташований в каталозі / model / account / activity.php. Видно, що в методі «addActivity» запускається запит на вставку.

$this->db->query(“INSERT INTO `” . DB_PREFIX . “customer_activity`
SET `customer_id` = ‘” . (int)$customer_id . “‘, `key` = ‘” .
$this->db->escape($key) . “‘, `data` = ‘” . $this->db->escape(serialize($data)) .
“‘, `ip` = ‘” . $this->db->escape($this->request->server[‘REMOTE_ADDR’]) .
“‘, `date_added`= NOW()”);

Ви можете задатися питанням про те, як він називається, оскільки не існує методу або властивості «db», визначеного в класі «ModelAccountActivity». Можна перейти до батьківського типу моделі Model, щоб дізнатися, визначено це там чи ні. Ви також не знайдете метод або властивість «db» в цьому класі. Але якщо уважно подивитися на клас Model, ви побачите, що він реалізує магічні методи, зокрема метод «__get».

public function __get($key) {
return $this->registry->get($key);
}

Поки давайте припустимо, що об’єкт $registry зберігається в захищеному властивості «registry» класу «model». Ми побачимо, як він зберігається, коли примірник «model» створюється в класі «Loader».

Метод __get викликається при натисненні будь-якого методу, який не визначений у класі. У цьому методі «db» передається як аргумент $this->db, який ми намагаємося викликати в файлі « activity.php». І, як обговорювалося раніше, утиліти всіх об’єктів $registry вже збережені під час процесу початковій завантаження. Тому нам просто потрібно отримати об’єкт «db» з допомогою ключа, викликавши метод «get» об’єкта «Registry»!

Точно так само працюють і файли контролера $this->load. Таким чином, «Registry» — справді корисний в рамках OpenCart компонент, в якому зазвичай зберігаються змінні та об’єкти, які використовуються під час виконання скрипта.

Об’єкт Loader

Об’єкт «Loader» використовується для завантаження різних компонентів OpenCart по мірі необхідності, таких як модель, контролер, мову, уявлення, бібліотека і т. д. Важливо відзначити, що коли об’єкт «Loader» створюється, він зберігається в об’єкт $registry з «навантаженням» в якості ключа масиву. Таким чином, ви можете отримати доступ об’єкту до $loader, використовуючи $this->load виклик, як описано в попередньому розділі.

// Loader instantiation
$loader = new Loader($registry);
$registry->set(‘load’, $loader);

Тепер давайте подивимося, як різні компоненти завантажуються за допомогою «Loader». Відкрийте «system / engine / loader.php », щоб побачити визначення класу «Loader». Ми почнемо з методу «controller», щоб зрозуміти, як він працює.

// load controller
$this->load->controller(‘common/column_left’);

Це фрагмент коду, який завантажує контролер «common / column_left.php » і викликає метод «index». Ми викликаємо його, щоб отримати висновок XHTML лівої колонки» на сторінці OpenCart. Частина $this->load працює аналогічно $this->db, що я пояснив раніше!

Таким чином, повертається об’єкт $loader, що зберігається у файлі $registry, і, нарешті, викликається метод controller класу «Loader»!

Точно так само наступні фрагменти працюють при завантаження різних компонентів.

// Model load
$this->load->model(‘catalog/category’);
// load View
$this->load->view(‘default/template/product/category.tpl’, $data);
// load Library
$this->load->library(‘user’);
// load Helper
$this->load->helper(‘json’);
// load Language
$this->load->language(‘product/category’);

Дивлячись на визначення метода в класі «Loader», ви побачите, що не так складно зрозуміти, як це працює. Він готує «шлях до файлу» для відповідного компонента і включається за допомогою функції «include_once».
В цілому, «Registry» і «Loader» є двома дуже важливими компонентами в OpenCart, які спрощують роботу розробникам модулів.

Висновок

Отже, сьогодні ми розглянули компоненти «Loader» і «Registry» платформи OpenCart. Сподіваюся, ви навчилися чогось корисного в цьому уроці. І, сподіваюся, я придумаю щось більше по тій же темі!

Використання обєктів Registry і Loader в початковій завантаженні OpenCart

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

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

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