Как создать кастомную библиотеку API в OpenCart
18 Мар 2023г. в 15:45В этой статье мы создадим кастомную библиотеку, с помощью которой вы сможете делать CURL запросы. Постараемся не усложнять. Важно понять концепцию, а реализация может отличаться по сложности.
Будем использовать последнюю версию OpenCart. Предполагаю, что вы знакомы с модульной структурой OpenCart.
Что такое библиотека в OpenCart?
Что же такое библиотека в OpenCart? Простым языком, это набор скриптов, обеспечивающий основной функционал во фреймворке. В OpenCart все библиотеки находятся в папке system/library. Например, входящий запрос обрабатывается библиотекой Request, а для обработки ответа есть библиотека Response. Аналогично есть библиотеки для кэширования, покупателей, баз данных и систем конфигурации. Назовем парочку.
Необходимые библиотеки загружаются в код контроллера/модели. Для загрузки любой библиотеки необходимо сделать что-то типа:
$cache = $this->load->library('cache');
1
$cache = $this->load->library('cache');
В примере выше мы загрузили библиотеку cache. Теперь вам доступен объект $cache, от которого вы можете вызывать методы, определенные в этой библиотеке. Как видите, это действительно гибкий способ загрузки объектов.
Сегодня мы реализуем библиотеку curl, с помощью которой вы сможете делать CURL вызовы с помощью самой библиотеки. В контроллере лучше избегать дублирования кода, так как для каждого CURL запроса необходимо создать объект и настроить общие заголовки. Мы обернем код в общую библиотеку, чтобы не дублировать его в модулях и иметь возможность повторно использовать его.
Прежде чем перейдем к реализации кастомной библиотеки, давайте взглянем на одну из библиотек ядра OpenCart.
Изучите код библиотеки ядра
В предыдущем разделе мы говорили про библиотеку кэширования, давайте посмотрим ее код. Откройте файл system/library/cache.php в текстовом редакторе.
<?php
class Cache {
private $cache;
public function __construct($driver, $expire = 3600) {
$class = 'Cache\\' . $driver;
if (class_exists($class)) {
$this->cache = new $class($expire);
} else {
exit('Error: Could not load cache driver ' . $driver . ' cache!');
}
}
public function get($key) {
return $this->cache->get($key);
}
public function set($key, $value) {
return $this->cache->set($key, $value);
}
public function delete($key) {
return $this->cache->delete($key);
}
}
<?php
class Cache {
private $cache;
public function __construct($driver, $expire = 3600) {
$class = 'Cache\\' . $driver;
if (class_exists($class)) {
$this->cache = new $class($expire);
} else {
exit('Error: Could not load cache driver ' . $driver . ' cache!');
}
}
public function get($key) {
return $this->cache->get($key);
}
public function set($key, $value) {
return $this->cache->set($key, $value);
}
public function delete($key) {
return $this->cache->delete($key);
}
}
Все просто, правда? Простой класс с необходимыми методами. Это очень простой пример, но он мог быть достаточно сложным! Просмотрите еще пару библиотек, чтобы ознакомиться с концепцией.
Создание кастомной библиотеки: curl
Вы ознакомились с библиотеками ядра, теперь давайте создадим свою! Создайте файл system/library/curl.php со следующим кодом.