目次
インストールフックをステップ実行する
浏览卸载挂钩
使用安装/卸载挂钩创建/删除自定义架构
结论
ホームページ バックエンド開発 PHPチュートリアル OpenCart: フックを設定および削除する方法

OpenCart: フックを設定および削除する方法

Aug 31, 2023 am 11:57 AM

OpenCart: フックを設定および削除する方法

モジュール開発者は、日常の OpenCart カスタム モジュール開発でカスタム スキーマを作成する必要があることがよくあります。他のフレームワークと同様に、OpenCart モジュール アーキテクチャのさまざまなフックの形式で構成されています。

上記のフックの説明を続ける前に、OpenCart の拡張機能の概念を見てみましょう。上から下まで見ると、OpenCart のコア機能を強化できる OpenCart の拡張機能です。これをインストールすると、シンプルな画像ギャラリーでも、派手なドラッグ アンド ドロップ機能でも、フロントエンド ストアに機能を追加できます。

さらに、拡張機能は、提供する機能に基づいて論理グループに分類されます。簡単な例として、Payments 拡張機能はフロントエンド チェックアウトに新しい支払い方法を追加しますが、これはストア内のスパム アクティビティを検出できる不正行為防止拡張機能です。バックエンドに移動し、Extensions メニューの下のリストを確認します。これには、OpenCart がサポートするさまざまなタイプの拡張機能が表示されます。

モジュールもOpenCartの単なる拡張機能であることを知れば驚かれるでしょう。各拡張機能は、OpenCart エコシステムでどのように機能するかという共通のワークフローを中心に構築されています。フックを使用すると、モジュールのアクティベーション中にインストール フックを実行したり、アンインストール中にガベージをクリーンアップしたりするなど、特定のイベントに基づいて特定のアクションを実行できます。

この記事では、これらのインストール フックとアンインストール フックについて説明します。これらについてはモジュールのコンテキストで説明しますが、同じアプローチを他のタイプの拡張機能にも適用することを妨げるものは何もないので、ご自身で自由にファイルを探索してください。

これは、このチュートリアルのスニペットを提供する OpenCart の最新バージョンです。この記事の執筆時点では、これは 2.1.0.2 安定バージョンです。

インストールフックをステップ実行する

このセクションでは、インストール フックの具体的な使用法について説明します。お気に入りのテキスト エディターで admin/controller/extension/module.php を開き、install メソッドを見つけます。次のようになります:

リーリー

これはモジュールのユニバーサル インストール フックであり、バックエンドからモジュールをインストールしようとするたびにこのフックが呼び出されます。このメソッドの重要な部分を見てみましょう。

まず、後続のアクティビティに必要なモデル ファイルを読み込みます。 $this->model_extension_extension->install メソッド呼び出しにより、この特定のモジュールのエントリがデータベースに確実に追加されます。

次は ACL コンテンツです。これは、addPermission メソッドを呼び出すことで実行されます。これにより、現在のユーザー管理者がモジュール固有の設定にアクセスして変更できるようになります。

最後に、インストールされるモジュールの install メソッドを呼び出します。すでに使用したインストール メソッドと混同しないでください。モジュール固有の install メソッドが存在する場合は、それを呼び出します。

たとえば、Login with PayPal モジュールをインストールしようとすると、次に示すように、ファイル admin/controller/module/pp_login.php で定義されたインストール メソッドが呼び出されます。下に。

リーリー

OpenCart 2.x には、発売以来、いくつかの興味深い機能が組み込まれており、イベント オブザーバーもその 1 つです。これにより、他のモジュールがオブザーバーを設定できるモジュール固有のイベントを追加して、その特定のイベントがトリガーされたときに任意のコードを実行できるようになります。これはまさに上記のインストール方法で示したもので、post.customer.logout カスタム イベントを追加します。

Login with PayPal モジュールに関する限り、これは非常に単純なものですが、カスタム スキーマなどを挿入する場合は、さらに多くのものが必要になる場合があります。 PayPal Express Checkout 支払い拡張機能からインストール メソッドを導入しましょう。引き続き admin/controller/payment/pp_express.php を開きます。

リーリー

まず、対応するモデル ファイルを読み込み、そのファイルを使用してモデルの install メソッドを呼び出します。経験則として、モードを操作する場合は常に、そのコードをコントローラーのマウント メソッドに直接入れるのではなく、モデルのマウント メソッドに実装する必要があります。

それでは、モデル ファイル admin/model/payment/pp_express.php で定義されているインストール メソッドを簡単に取り込んでみましょう。

リーリー

最後に感謝すべきことがあります!ご覧のとおり、OpenCart のデータベース API を使用して、いくつかのカスタム MySQL テーブルが作成されました。したがって、モデルのインストール方法を使用してデータベース関連の変更を適用する方法を次に示します。

ということで、フックの取り付けに関してはこれで終わりです。一見したように見えるほど複雑ではないことを願っています。このようにしましょう。このプロセスは、拡張機能固有のインストール メソッドをトリガーすることで開始され、インストールされている拡張機能のインストール メソッドが存在する場合は、そのインストール メソッドが呼び出されます。最後に、拡張機能でデータベース操作が必要な場合は、モデルのインストール メソッドがコントローラーのインストール メソッドから呼び出されます。

浏览卸载挂钩

本节与上一节相对应,重点介绍卸载挂钩中发生的情况。我们将按照与上一节中的 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();
  }
  ...
?>
ログイン後にコピー

同样,它看起来应该有点熟悉,因为其中大部分是样板代码。首先的重要代码片段是调用 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');
  }
  ...
?>
ログイン後にコピー

很简单吧?它只是撤消注入到使用 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();
  }
  ...
?>
ログイン後にコピー

完全符合预期——它加载模型并调用卸载方法。这也给了我们打开模型文件 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`;");
  }
  ...
?>
ログイン後にコピー

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

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

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

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

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

<?php
// Heading
$_['heading_title']    = 'Demo Module';
ログイン後にコピー

接下来,我们需要创建一个模型文件来保存自定义模块的实际且有趣的代码。模型文件应放置在 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`;");
  }
}
ログイン後にコピー

最后,继续创建一个包含以下内容的控制器文件 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();
  }
}
ログイン後にコピー

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

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

结论

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

当然,欢迎提问和评论!

以上がOpenCart: フックを設定および削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

See all articles