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

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

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

Мы будем использовать последнюю версию OpenCart. Я предполагаю что вы уже знакомы с модульной структурой OpenCart.

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

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

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

$cache = $this->load->library('cache');

В приведенном выше примере, мы загрузили библиотеку cache. Теперь вы сможете использовать объект $cache и вызывать методы, определенные в этой библиотеке. Обратите внимание, на сколько это гибкий способ загрузки объектов по мере необходимости.

Сегодня мы реализуем библиотеку curl, благодаря которой вы сможете создавать CURL вызовы. Полезная функция, для того чтобы избавиться от дублирования кода в контроллерах, для каждого CURL запроса необходимо создать экземпляр объекта и настроить общие заголовки.

Прежде чем мы перейдем к реализации данной библиотеки, давайте рассмотрим одну из основных библиотек OpenCart.

Исследование ядра библиотеки OpenCart

Давайте рассмотрим код библиотеки cache которую мы описали выше. Откройте файл 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 проводит дополнительный набор параметров, при необходимости передачи данных. Код выше, довольно прост для понимания: производит curl вызов и возвращает ответ!

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

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

// загрузка библиотеки curl
$this->load->library('curl');
$obj_curl = Curl::get_instance($this->registry);
         
$result = $obj_curl->do_request($url);
$result = $obj_curl->do_request($url, $params);

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

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

 

Перевод статьи How to Create a Custom Library in OpenCart

Тэги: FrameworkOpenCart

Вход

Уважаемый пользователь! Мы обнаружили, что вы используете AdBlock и вынуждены скрыть часть материалов на нашем сайте. Siteacademy существует и развивается за счет доходов от рекламы. Просим внести наш сайт в список исключений или отключить Блокировщик рекламы на нашем сайте.