OpenCart: So richten Sie Hooks ein und entfernen sie

WBOY
Freigeben: 2023-08-31 11:58:01
Original
933 Leute haben es durchsucht

OpenCart: So richten Sie Hooks ein und entfernen sie

Als Modulentwickler müssen Sie bei der täglichen Entwicklung benutzerdefinierter OpenCart-Module häufig benutzerdefinierte Architekturen erstellen. Wie andere Frameworks wurde es in Form verschiedener Hooks in der OpenCart-Modularchitektur konfiguriert.

Bevor wir uns weiter mit den oben genannten Hooks befassen, wollen wir uns mit dem Konzept der Erweiterungen in OpenCart befassen. Von oben nach unten betrachtet handelt es sich um eine Erweiterung in OpenCart, mit der Sie die Kernfunktionen von OpenCart erweitern können. Durch die Installation können Sie Ihrem Front-End-Shop Funktionen hinzufügen, sei es eine einfache Bildergalerie oder eine schicke Drag-and-Drop-Funktionalität.

Darüber hinaus werden Erweiterungen basierend auf der von ihnen bereitgestellten Funktionalität in logische Gruppen eingeteilt. Als einfaches Beispiel fügt die Payments-Erweiterung dem Front-End-Checkout neue Zahlungsmethoden hinzu, während es sich um eine Anti-Betrugs-Erweiterung handelt, die es Ihnen ermöglicht, Spam-Aktivitäten in Ihrem Shop zu erkennen. Gehen Sie zum Backend und sehen Sie sich die Liste im Menü „Erweiterungen“ an, die die verschiedenen Arten von Erweiterungen zeigt, die OpenCart unterstützt. Sie werden überrascht sein zu erfahren, dass

Module

auch nur eine weitere Erweiterung in OpenCart sind. Jede Erweiterung basiert auf einem gemeinsamen Arbeitsablauf, der beschreibt, wie die Dinge im OpenCart-Ökosystem funktionieren sollen. Mit Hooks können Sie bestimmte Aktionen basierend auf bestimmten Ereignissen ausführen, sei es das Ausführen eines Installations-Hooks während der Modulaktivierung oder das Bereinigen von Müll während der Deinstallation. In diesem Artikel werden diese Installations- und Deinstallations-Hooks erläutert. Obwohl sie im Kontext von Modulen besprochen werden, sehe ich nichts, was Sie davon abhält, den gleichen Ansatz auch auf andere Arten von Erweiterungen anzuwenden. Sie können die Dateien also gerne auf eigene Faust erkunden.

Dies ist die neueste Version von OpenCart, die die Ausschnitte aus diesem Tutorial bereitstellt. Zum jetzigen Zeitpunkt handelt es sich um die stabile Version 2.1.0.2.

Schritt-für-Schritt-Installationshaken

In diesem Abschnitt werden wir die spezifischen Verwendungsmöglichkeiten von Montagehaken untersuchen. Öffnen Sie die

-Methode in Ihrem bevorzugten Texteditor. Es sollte so aussehen:

<?php
  ...
  public function install() {
    $this->load->language('extension/module');

    $this->document->setTitle($this->language->get('heading_title'));

    $this->load->model('extension/extension');

    $this->load->model('extension/module');

    if ($this->validate()) {
      $this->model_extension_extension->install('module', $this->request->get['extension']);

      $this->load->model('user/user_group');

      $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'module/' . $this->request->get['extension']);
      $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'module/' . $this->request->get['extension']);

      // Call install method if it exists
      $this->load->controller('module/' . $this->request->get['extension'] . '/install');

      $this->session->data['success'] = $this->language->get('text_success');

      $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
    }

    $this->getList();
  }
  ...
?>
Nach dem Login kopieren
admin/controller/extension/module.php,然后找到 installDies ist ein universeller Installations-Hook für Module, der immer dann aufgerufen wird, wenn Sie versuchen, ein Modul vom Backend aus zu installieren. Schauen wir uns die wichtigen Teile dieser Methode an.

Zuerst werden die Modelldateien geladen, die für nachfolgende Aktivitäten erforderlich sind.

Der Methodenaufruf stellt sicher, dass ein Eintrag für dieses spezifische Modul zur Datenbank hinzugefügt wird.

$this->model_extension_extension->installAls nächstes kommen einige ACL-Sachen, die durch den Aufruf der

-Methode erledigt werden. Dadurch wird sichergestellt, dass der aktuelle Benutzeradministrator auf modulspezifische Einstellungen zugreifen und diese ändern kann.

addPermissionAbschließend wird die

-Methode des zu installierenden Moduls aufgerufen (falls vorhanden).

install 方法。不要与我们已经使用的 install 方法混淆 - 它会调用模块特定的 installWenn Sie beispielsweise versuchen, das Modul „Anmelden mit PayPal“ zu installieren, wird die Datei

wie unten gezeigt aufgerufen.

<?php
  ...
  public function install() {
    $this->load->model('extension/event');

    $this->model_extension_event->addEvent('pp_login', 'post.customer.logout', 'module/pp_login/logout');
  }
  ...
?>
Nach dem Login kopieren
Seit seiner Einführung verfügt OpenCart 2.x über einige aufregende Funktionen, und Event Observer ist eine davon. Sie können damit ein modulspezifisches Ereignis hinzufügen, für das andere Module Beobachter festlegen können, sodass diese beliebigen Code ausführen können, wenn dieses bestimmte Ereignis ausgelöst wird. Genau das wird in der obigen Installationsmethode demonstriert, die benutzerdefinierte Ereignisse hinzufügt! admin/controller/module 中定义的安装方法/pp_login.php

Was das Modul „Anmelden mit PayPal“ betrifft, handelt es sich um ziemlich einfache Dinge, aber manchmal benötigen Sie mehr, wenn Sie ein benutzerdefiniertes Schema oder ähnliches einfügen möchten. Lassen Sie uns unsere Installationsmethode aus der Zahlungserweiterung „PayPal Express Checkout“ einbinden. Weiter öffnen

. post.customer.logout

<?php
  ...
  public function install() {
    $this->load->model('payment/pp_express');
    $this->model_payment_pp_express->install();
  }
  ...
?>
Nach dem Login kopieren

Zuerst lädt es die entsprechende Modelldatei und verwendet diese Datei, um die

-Methode des Modells aufzurufen. Als Faustregel gilt: Wann immer Sie einen Modus bedienen möchten, sollten Sie diesen Code in die Mount-Methode des Modells implementieren, anstatt ihn direkt in die Mount-Methode des Controllers einzufügen. Jetzt ziehen wir schnell die in der Modelldatei definierte Installationsmethode ein .

<?php
  ...
  public function install() {
    $this->db->query("
      CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_order` (
        `paypal_order_id` int(11) NOT NULL AUTO_INCREMENT,
        `order_id` int(11) NOT NULL,
        `date_added` DATETIME NOT NULL,
        `date_modified` DATETIME NOT NULL,
        `capture_status` ENUM('Complete','NotComplete') DEFAULT NULL,
        `currency_code` CHAR(3) NOT NULL,
        `authorization_id` VARCHAR(30) NOT NULL,
        `total` DECIMAL( 10, 2 ) NOT NULL,
        PRIMARY KEY (`paypal_order_id`)
      ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");

    $this->db->query("
      CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_order_transaction` (
        `paypal_order_transaction_id` int(11) NOT NULL AUTO_INCREMENT,
        `paypal_order_id` int(11) NOT NULL,
        `transaction_id` CHAR(20) NOT NULL,
        `parent_transaction_id` CHAR(20) NOT NULL,
        `date_added` DATETIME NOT NULL,
        `note` VARCHAR(255) NOT NULL,
        `msgsubid` CHAR(38) NOT NULL,
        `receipt_id` CHAR(20) NOT NULL,
        `payment_type` ENUM('none','echeck','instant', 'refund', 'void') DEFAULT NULL,
        `payment_status` CHAR(20) NOT NULL,
        `pending_reason` CHAR(50) NOT NULL,
        `transaction_entity` CHAR(50) NOT NULL,
        `amount` DECIMAL( 10, 2 ) NOT NULL,
        `debug_data` TEXT NOT NULL,
        `call_data` TEXT NOT NULL,
        PRIMARY KEY (`paypal_order_transaction_id`)
      ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");
  }
  ...
?>
Nach dem Login kopieren
admin/controller/ payment/pp_express.phpEndlich etwas, wofür man dankbar sein kann! Wie Sie sehen können, wurden mehrere benutzerdefinierte MySQL-Tabellen mit der Datenbank-API von OpenCart erstellt. Hier erfahren Sie, wie Sie datenbankbezogene Änderungen mithilfe der Installationsmethode des Modells anwenden.

Also, was die Montagehaken betrifft, das ist es. Ich hoffe, es ist nicht so kompliziert, wie es auf den ersten Blick scheint. Sagen wir es so. Der Prozess beginnt mit dem Auslösen einer erweiterungsspezifischen Installationsmethode, die wiederum die Installationsmethode der zu installierenden Erweiterung aufruft (falls vorhanden). Wenn die Erweiterung schließlich Datenbankoperationen erfordert, wird die Installationsmethode des Modells von der Installationsmethode des Controllers aufgerufen. install

浏览卸载挂钩

本节与上一节相对应,重点介绍卸载挂钩中发生的情况。我们将按照与上一节中的 install 方法相同的方式进行操作,因此让我们立即从文件 admin/ 中获取 <code class="inline">uninstall 挂钩的代码控制器/扩展/module.php。

<?php
  ...
  public function uninstall() {
    $this->load->language('extension/module');

    $this->document->setTitle($this->language->get('heading_title'));

    $this->load->model('extension/extension');

    $this->load->model('extension/module');

    if ($this->validate()) {
      $this->model_extension_extension->uninstall('module', $this->request->get['extension']);

      $this->model_extension_module->deleteModulesByCode($this->request->get['extension']);

      $this->load->model('setting/setting');

      $this->model_setting_setting->deleteSetting($this->request->get['extension']);

      // Call uninstall method if it exists
      $this->load->controller('module/' . $this->request->get['extension'] . '/uninstall');

      $this->session->data['success'] = $this->language->get('text_success');

      $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
    }

    $this->getList();
  }
  ...
?>
Nach dem Login kopieren

同样,它看起来应该有点熟悉,因为其中大部分是样板代码。首先的重要代码片段是调用 uninstall 方法,该方法从 扩展 MySQL 表中删除当前正在卸载的扩展的条目。

接下来,它调用 deleteModulesByCode,这会删除与扩展关联的模块。这是一种特殊方法,只能在这种模块类型的扩展中找到 - 您不会在其他扩展中找到它,例如付款、运输、欺诈等。

原因是您可以复制每个模块来创建多个实例。例如,您可以在不同的页面上显示不同的横幅模块。另一方面,复制其他类型的扩展没有任何意义。再次举个例子,前端的 PayPal 付款扩展只需要一个实例。

接下来,它通过调用 deleteSetting 方法删除与该模块相关的配置变量。最后,它调用正在卸载的模块的 uninstall 方法。

让我们打开 admin/controller/module/pp_login.php 看看卸载方法是什么样的。

<?php
  ...
  public function uninstall() {
    $this->load->model('extension/event');

    $this->model_extension_event->deleteEvent('pp_login');
  }
  ...
?>
Nach dem Login kopieren

很简单吧?它只是撤消注入到使用 PayPal 登录模块的安装方法中的内容。回想一下,我们在安装过程中创建了一个新事件 post.customer.logout,因此显然我们需要在卸载过程中删除它,以确保我们不会留下任何特定于模块的垃圾。

此外,我们还可以快速了解一下 PayPal Express Checkout 付款扩展程序的卸载方法,就像我们在前面部分中介绍的安装方法一样。获取 admin/controller/ payment/pp_express. 的以下片段。

<?php
  ...
  public function uninstall() {
    $this->load->model('payment/pp_express');
    $this->model_payment_pp_express->uninstall();
  }
  ...
?>
Nach dem Login kopieren

完全符合预期——它加载模型并调用卸载方法。这也给了我们打开模型文件 admin/model/ payment/pp_express.php 并探索卸载方法的充分理由。

<?php
  ...
  public function uninstall() {
    $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_order_transaction`;");
    $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_order`;");
  }
  ...
?>
Nach dem Login kopieren

我们只是删除之前创建的 MySQL 表,因为我们不希望有人问我们,“你怎么能留下这些垃圾?”

所以,这就是 OpenCart 中安装和卸载挂钩的故事,希望不错。下一部分也是最后一部分快速总结了迄今为止在一个简单但有效的自定义模块中学到的概念,因为这在你的小猫后理论课程中是一件很好的事情。

使用安装/卸载挂钩创建/删除自定义架构

在本节中,我们将创建一个管理模块演示,除了在安装期间创建新架构并在卸载期间删除它之外,该模块不会做太多事情。

首先,让我们创建一个语言文件,以便在后端拾取该模块。继续创建一个包含以下内容的文件 admin/language/english/module/demo.php

<?php
// Heading
$_['heading_title']    = 'Demo Module';
Nach dem Login kopieren

接下来,我们需要创建一个模型文件来保存自定义模块的实际且有趣的代码。模型文件应放置在 admin/model/module/demo.php。它在 install 方法中创建一个演示 MySQL 表,并将其放入 uninstall 方法中。

<?php
class ModelModuleDemo extends Model {
  public function install() {
    $this->db->query("
      CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "demo` (
        `demo_id` int(11) NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(100) NOT NULL,
        PRIMARY KEY (`demo_id`)
      ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;");
  }

  public function uninstall() {
    $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "demo`;");
  }
}
Nach dem Login kopieren

最后,继续创建一个包含以下内容的控制器文件 admin/controller/module/demo.php

<?php
class ControllerModuleDemo extends Controller {
  public function install() {
    $this->load->model('module/demo');
    $this->model_module_demo->install();
  }
  
  public function uninstall() {
    $this->load->model('module/demo');
    $this->model_module_demo->uninstall();
  }
}
Nach dem Login kopieren

它应该很简单 - 它加载模型并根据正在执行的操作调用相应的方法。

来吧,尝试一下。它应该在扩展 > 模块下列为演示模块。安装它,你应该会看到后端创建的 demo MySQL 表,当然不要忘记卸载它以删除该表。

结论

今天,我们讨论了 OpenCart 安装过程的一个重要方面,即安装和卸载挂钩。我们详细介绍了这些挂钩,并在本文的后面部分构建了一个简单的模块作为概念证明。

当然,欢迎提问和评论!

Das obige ist der detaillierte Inhalt vonOpenCart: So richten Sie Hooks ein und entfernen sie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!