身為模組開發人員,您通常需要在日常 OpenCart 自訂模組開發中建立自訂架構。與其他框架一樣,它已經以 OpenCart 模組架構中不同鉤子的形式進行了配置。
在我們繼續探索上述鉤子之前,讓我們先探討一下 OpenCart 中擴充的概念。從上往下看,它是OpenCart中的一個擴展,可以讓你豐富OpenCart的核心功能。透過安裝它,您可以為前端商店添加功能,無論是簡單的圖像庫還是一些外觀精美的拖放功能。
此外,擴充功能根據其提供的功能被分類為邏輯群組。舉個簡單的例子,支付擴展在前端結帳中添加了新的支付方式,同時它是一個反詐欺擴展,允許您檢測商店中的垃圾郵件活動。前往後端並查看擴充選單下的列表,其中顯示了 OpenCart 支援的不同類型的擴充功能。
您會驚訝地發現模組也只是 OpenCart 中的另一個擴充。每個擴充都是圍繞著 OpenCart 生態系統中事物應如何運作的通用工作流程建構的。掛鉤可讓您根據特定事件執行某些操作,無論是在模組啟動期間運行安裝掛鉤還是在卸載期間清理垃圾。
本文將討論這些安裝和卸載掛鉤。雖然它們將在模組的上下文中進行討論,但我沒有看到任何阻止您將相同的方法也應用於其他類型的擴充功能的內容,因此請隨意自行探索這些文件。
這是 OpenCart 的最新版本,提供了本教學中的片段。截至撰寫本文時,它是 2.1.0.2 穩定版本。
逐步完成安裝掛鉤
在本節中,我們將探討安裝掛鉤的具體用途。繼續並在您喜歡的文字編輯器中開啟 admin/controller/extension/module.php
,然後找到 install
方法。它應該看起來像這樣:
<?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(); } ... ?>
這是模組的通用安裝鉤子,每當您嘗試從後端安裝任何模組時都會呼叫該鉤子。讓我們來看看這個方法的重要部分。
首先,它會載入後續活動所需的模型檔案。 $this->model_extension_extension->install
方法呼叫可確保將此特定模組的項目新增至資料庫。
接下來是一些 ACL 內容,它是透過呼叫 addPermission
方法來完成的。它確保當前用戶 admin 應該能夠存取模組特定的設定並更改它們。
最後,它呼叫正在安裝的模組的 install
方法。不要與我們已經使用的 install 方法混淆 - 它會呼叫模組特定的 install
方法(如果存在)。
例如,如果您嘗試安裝使用 PayPal 登入模組,它將呼叫檔案 admin/controller/module 中定義的安裝方法/pp_login.php
如下所示。
<?php ... public function install() { $this->load->model('extension/event'); $this->model_extension_event->addEvent('pp_login', 'post.customer.logout', 'module/pp_login/logout'); } ... ?>
自 OpenCart 2.x 推出以來,包含了一些令人興奮的功能,事件觀察器就是其中之一。它允許您添加特定於模組的事件,其他模組可以為此事件設定觀察者,以便在觸發該特定事件時它們可以運行一些任意程式碼。這正是上述安裝方法中演示的內容,該方法添加了 post.customer.logout
自訂事件!
就使用 PayPal 登入模組來說,這是非常簡單的東西,但有時如果您希望注入自訂架構或類似的東西,您將需要更多。讓我們從 PayPal Express Checkout 付款擴充功能中引入我們的安裝方法。繼續開啟 admin/controller/ payment/pp_express.php
。
<?php ... public function install() { $this->load->model('payment/pp_express'); $this->model_payment_pp_express->install(); } ... ?>
首先,它會載入對應的模型文件,並使用該文件呼叫模型的 install
方法。根據經驗,每當您想要操作模式時,都應該在模型的安裝方法中實作該程式碼,而不是直接將其放入控制器的安裝方法中。
現在,讓我們快速拉入模型檔案 admin/model/ payment/pp_express.php
中定義的 install 方法。
<?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;"); } ... ?>
終於有值得慶幸的事情了!如您所見,使用 OpenCart 的資料庫 API 建立了幾個自訂 MySQL 表。因此,這是使用模型的 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(); } ... ?>
同样,它看起来应该有点熟悉,因为其中大部分是样板代码。首先的重要代码片段是调用 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中文網其他相關文章!

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3漢化版
中文版,非常好用

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能