ホームページ >バックエンド開発 >PHPチュートリアル >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,因此显然我们需要在卸载过程中删除它,以确保我们不会留下任何特定于模块的垃圾。 p>
此外,我们还可以快速了解一下 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 サイトの他の関連記事を参照してください。