Как создать кастомную библиотеку API в OpenCart

Как создать кастомную библиотеку API в OpenCart

От автора: в самом ядре OpenCart уже есть множество функций, однако зачастую необходимо интегрировать стороннюю библиотеку. В то же время, есть концепция библиотеки, которая обеспечивает общий набор OpenCart API для ежедневных операций, как например, взаимодействие с системой конфигурации или системой баз данных, работа с email и т.д. Сегодня мы узнаем, как реализовать свою кастомную библиотеку в OpenCart.

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

Будем использовать последнюю версию OpenCart. Предполагаю, что вы знакомы с модульной структурой OpenCart.

Что такое библиотека в OpenCart?

Что же такое библиотека в OpenCart? Простым языком, это набор скриптов, обеспечивающий основной функционал во фреймворке. В OpenCart все библиотеки находятся в папке system/library. Например, входящий запрос обрабатывается библиотекой Request, а для обработки ответа есть библиотека Response. Аналогично есть библиотеки для кэширования, покупателей, баз данных и систем конфигурации. Назовем парочку.

Необходимые библиотеки загружаются в код контроллера/модели. Для загрузки любой библиотеки необходимо сделать что-то типа:

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

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

Приступить к созданию
$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);
  }
}

Все просто, правда? Простой класс с необходимыми методами. Это очень простой пример, но он мог быть достаточно сложным! Просмотрите еще пару библиотек, чтобы ознакомиться с концепцией.

Создание кастомной библиотеки: curl

Вы ознакомились с библиотеками ядра, теперь давайте создадим свою! Создайте файл system/library/curl.php со следующим кодом.

<?php
class Curl {
  private $logger;
  private static $instance;
 
  /**
 * @param  object  $registry  Registry Object
 */
  public static function get_instance($registry) {
 if (is_null(static::$instance)) {
 static::$instance = new static($registry);
 }
 
 return static::$instance;
  }
 
  /** 
 * @param  object  $registry  Registry Object
 * 
 * You could load some useful libraries, few examples:
 *
 * $registry->get('db');
 * $registry->get('cache');
 * $registry->get('session');
 * $registry->get('config');
 * and more... 
 */
  protected function __construct($registry) {
 // load the "Log" library from the "Registry"
 $this->logger = $registry->get('log');
  }
 
  /**
 * @param  string  $url Url
 * @param  array  $params  Key-value pair
 */
  public function do_request($url, $params=array()) {
 // log the request
 $this->logger->write("Initiated CURL request for: {$url}");
 
 // init curl object
 $ch = curl_init();
 curl_setopt($ch,CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
 // prepare post array if available
 $params_string = '';
 if (is_array($params) && count($params)) {
 foreach($params as $key=>$value) {
 $params_string .= $key.'='.$value.'&';
 }
 rtrim($params_string, '&');
 
 curl_setopt($ch,CURLOPT_POST, count($params));
 curl_setopt($ch,CURLOPT_POSTFIELDS, $params_string);
 }
 
 // execute request
 $result = curl_exec($ch);
 
 // close connection
 curl_close($ch);
 
 return $result;
  }
}

Мы определили класс Curl с полезными методами.

Метод get_instance позволяет создавать объект класса. Он также проверяет, что в любое время у нас всего один экземпляр класса.

Далее мы определяем конструктор с аргументом $registry. Аргументы не нужны, но для примера я его задал, чтобы показать, как загружать другие библиотеки с помощью объекта $registry. В нашем примере мы загружаем библиотеку Log и назначаем ее на свойство logger. С помощью этой библиотеки мы будем логировать curl запросы для отладки!

Есть метод do_request, который выполняет всю тяжелую работу за нас! Он принимает два аргумента: $url хранит URL, на который мы будем делать curl запрос, а $params хранит необязательный массив параметров, если понадобится отправить POST запрос с любыми данными. Далее очень простой код: он делает curl запрос и возвращает ответ!

Почти закончили с созданием кастомной библиотеки. В следующем разделе посмотрим ее в действии.

Как использовать нашу кастомную библиотеку

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

// load curl library
$this->load->library('curl');
$obj_curl = Curl::get_instance($this->registry);
 
$result = $obj_curl->do_request($url);
$result = $obj_curl->do_request($url, $params); // in case of $params needed

Выражение $this->load->library(‘curl’) загружает кастомную библиотеку. В следующем выражении мы вызвали метод get_instance и передали объект $registry, как аргумент конструктора. Далее мы использовали метод do_request для совершения curl запроса!

Как видите, довольно легко создать свою собственную библиотеку в OpenCart! Точно так же вы можете интегрировать любую стороннюю библиотеку в формат библиотек OpenCart и использовать ее во всем фреймворке.

Заключение

Сегодня мы обсудили концепцию библиотеки в OpenCart. Мы изучили библиотеки ядра и создали свою библиотеку для curl. Надеюсь, вам понравилось! Делитесь своими мыслями и запросами в комментариях!

Автор: Sajal Soni

Источник: http://code.tutsplus.com/

Редакция: Команда webformyself.

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

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

Приступить к созданию

Интернет-магазин на OpenCart

Создание магазина с уникальным шаблоном на CMS OpenCart

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree