Статьи

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

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

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

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

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

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

1
$cache = $this->load->library(‘cache’);

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

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

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

Поскольку мы уже обсуждали библиотеку кеша в предыдущем разделе, давайте рассмотрим код этой библиотеки. Откройте system/library/cache.php в вашем любимом текстовом редакторе.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
class Cache {
  private $cache;
 
  public function __construct($driver, $expire = 3600) {
    $class = ‘Cache\\’ .
 
    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);
  }
}

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

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?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 и возвращает ответ!

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

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

1
2
3
4
5
6
// 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);

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

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

Сегодня мы обсудили концепцию библиотеки в OpenCart.

Если вы ищете дополнительные библиотеки для использования или изучения, не забудьте посмотреть, что у нас есть на нашем рынке .

Мы изучили основные библиотеки и создали собственную библиотеку для curl. Я надеюсь, вам понравилось! Поделитесь своими мыслями и вопросами, используя канал ниже!