Magento 2:向订单详情页添加自定义按钮及功能实现

magento 2:向订单详情页添加自定义按钮及功能实现

本文档旨在指导开发者如何在 Magento 2 的后台订单详情页面添加一个自定义按钮,并在点击该按钮后执行特定的业务逻辑。我们将详细介绍模块的创建、配置、控制器编写以及插件的使用,确保按钮功能正常运作,并兼容 URL 安全密钥。

模块创建与配置

首先,我们需要创建一个自定义模块来实现该功能。按照 Magento 2 的模块开发规范,创建以下目录和文件:

注册模块 (registration.php)

在 app/code/MG/Dropship/registration.php 文件中注册模块:

<?phpMagentoFrameworkComponentComponentRegistrar::register(    MagentoFrameworkComponentComponentRegistrar::MODULE,    'MG_Dropship',    __DIR__);

模块声明 (module.xml)

在 app/code/MG/Dropship/etc/module.xml 文件中声明模块:

    

修改 di.xml

在 app/code/MG/Dropship/etc/adminhtml/di.xml 中,我们使用插件(Plugin)来修改 MagentoSalesBlockAdminhtmlOrderView 块的行为,以便添加自定义按钮。

             

配置路由 (routes.xml)

在 app/code/MG/Dropship/etc/adminhtml/routes.xml 文件中定义后台路由:

                                    

创建控制器 (Index.php)

在 app/code/MG/Dropship/Controller/AdminHtml/Order/Index.php 文件中创建控制器,用于处理按钮点击后的逻辑:

logger = $logger;        parent::__construct(            $context,            $coreRegistry,            $fileFactory,            $dateFilter,            $orderSender,            $creditmemoSender,            $invoiceSender,            $shipmentSender,            $resultPageFactory,            $resultLayoutFactory,            $resultRawFactory,            $resultJsonFactory,            $messageManager        );    }    /**     * Execute action     *     * @throws MagentoFrameworkExceptionLocalizedException|Exception     */    public function execute()    {        // In case you want to do something with the order        $order = $this->_initOrder();        if ($order) {            try {                // TODO: Do something with the order                $this->messageManager->addSuccessMessage(__('We did something!'));            } catch (MagentoFrameworkExceptionLocalizedException $e) {                $this->messageManager->addErrorMessage($e->getMessage());            } catch (Exception $e) {                $this->messageManager->addErrorMessage(__('We can't process your request' . $e->getMessage()));                $this->logger->critical($e);            }            return $this->resultRedirectFactory->create()->setPath(                'sales/order/view',                [                   'order_id' => $order->getEntityId()                ]             );            }        return $this->resultRedirectFactory->create()->setPath('sales/*/');    }    /**     * @return bool     */    protected function _isAllowed()    {        return $this->_authorization->isAllowed('MG_Dropship::order_dosomething');    }}

此控制器继承自 MagentoSalesControllerAdminhtmlOrder,并重写了 execute() 方法。在该方法中,首先初始化订单,然后执行自定义逻辑(TODO 部分),最后重定向回订单详情页。

注意:

请务必替换 // TODO: Do something with the order 部分,实现你的具体业务逻辑。_isAllowed() 方法用于权限控制,确保只有具有 MG_Dropship::order_dosomething 权限的用户才能访问该功能。

创建插件 (Button.php)

在 app/code/MG/Dropship/Plugin/Sales/Block/Adminhtml/Order/Button.php 文件中创建插件,用于向订单详情页添加按钮:

getOrder()) {            $message = __('Are you sure you want to Do Something?');            $subject->addButton(                'do_something',                [               'label' => __('Do Something'),               'class' => 'do_something',               'onclick' => "confirmSetLocation('{$message}', '{$subject->getUrl('mg_dropship/order/index')}')"               ]            );        }    }}

此插件使用 beforeSetLayout 方法,在布局渲染之前向 MagentoSalesBlockAdminhtmlOrderView 块添加一个名为 do_something 的按钮。

label: 按钮上显示的文本。class: 按钮的 CSS 类,可以自定义样式。onclick: 按钮点击时执行的 JavaScript 代码,这里使用 confirmSetLocation 函数显示一个确认对话框,然后重定向到 mg_dropship/order/index 路由。

清理缓存并更新模块

完成以上步骤后,需要清理 Magento 2 的缓存并更新模块:

执行 php bin/magento setup:upgrade 命令。执行 php bin/magento setup:di:compile 命令。执行 php bin/magento setup:static-content:deploy -f 命令。执行 php bin/magento cache:clean 命令。执行 php bin/magento cache:flush 命令。

总结

通过以上步骤,我们成功地向 Magento 2 的后台订单详情页添加了一个自定义按钮,并在点击该按钮后执行了特定的业务逻辑。 此方案兼容 URL 安全密钥,确保了链接的安全性。 在实际开发中,你需要根据具体的业务需求修改控制器中的逻辑和按钮的样式。

以上就是Magento 2:向订单详情页添加自定义按钮及功能实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1268493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月10日 11:14:34
下一篇 2025年12月10日 11:14:49

相关推荐

  • PHP函数怎样练习编写多个简单的函数 PHP函数多函数编写练习的入门指南

    最直接的路径是从分解任务入手,专注于每个函数的单一职责并逐步组合,这能有效训练模块化思维。应从明确“简单函数只做一件事”开始,选择如输入验证、数据格式化等现实小场景,遵循单一职责原则,注重函数命名与类型声明,并通过即时测试验证行为。从简单开始可降低认知负担、缩短反馈周期、培养模块化思维,为构建复杂系…

    2025年12月10日
    000
  • PHP常用框架如何实现API接口的版本控制 PHP常用框架接口版本管理的教程

    api接口版本控制通常通过url、header或自定义请求参数实现;2. 推荐使用抽象类、接口、trait或策略模式处理版本差异;3. 废弃旧版本时应提前通知、提供迁移指南、返回410状态码并设置deprecation头;4. 可通过swagger/openapi、注释工具和版本控制系统实现api文…

    2025年12月10日
    000
  • Symfony Mailer:多SMTP服务器配置与灵活应用

    本教程详细介绍了如何在Symfony应用中配置和管理多个邮件传输器(SMTP服务器)。通过利用framework.mailer.transports配置项定义不同的DSN,并使用X-Transport邮件头动态选择发送通道,开发者可以灵活地根据业务需求发送邮件,从而提升邮件系统的健壮性和可扩展性。 …

    2025年12月10日
    000
  • 使用 PHP 从客户端设备直接上传到 Vimeo

    正如上面所述,本文将介绍如何使用 PHP 从客户端设备直接上传视频到 Vimeo。通常,Vimeo API 的上传方式需要先将视频上传到服务器,然后再从服务器上传到 Vimeo。但 Vimeo 提供了表单上传的方式,允许客户端直接将视频上传到 Vimeo,从而减少服务器的压力,提升用户体验。 实现步…

    2025年12月10日
    000
  • Symfony Mailer多传输配置:实现多SMTP服务器邮件发送

    本文详细介绍了如何在Symfony应用中配置和管理多个邮件传输(SMTP服务器),以实现更灵活的邮件发送策略。通过在mailer.yaml配置文件中定义多个DSN,并利用X-Transport头部在发送时选择特定的传输方式,开发者可以轻松地在不同场景下使用不同的邮件服务,从而提升邮件发送的可靠性和可…

    2025年12月10日
    000
  • Symfony Mailer多传输配置与高级使用指南

    本文详细阐述了如何在Symfony Mailer中配置和管理多个SMTP邮件传输服务(DSN),以应对复杂的邮件发送需求。通过利用transports配置项,开发者可以定义多个命名传输,并学习如何通过在邮件头中添加X-Transport来灵活选择特定的传输发送邮件,从而实现邮件发送的策略化和高可用性…

    2025年12月10日
    000
  • Vimeo视频:使用PHP从客户端设备直接上传教程

    第一段引用上面的摘要: 本文将指导开发者如何利用PHP SDK实现客户端设备上的视频直接上传至Vimeo平台。通过Vimeo API提供的表单上传方法,结合PHP SDK的request函数,可以便捷地构建上传流程,并处理上传后的重定向。本文将详细介绍具体步骤和代码示例,帮助开发者快速集成Vimeo…

    2025年12月10日
    000
  • gRPC客户端工具:grpcui与grpcurl的实用指南

    本文针对.NET gRPC服务开发中遇到的客户端测试挑战,提供了实用的解决方案。详细介绍了两款强大的gRPC客户端工具:基于命令行的grpcurl和基于Web界面的grpcui。通过深入解析它们的安装、基本用法及核心功能,帮助开发者高效地进行gRPC服务发现、方法调用和调试,从而克服传统HTTP客户…

    2025年12月10日
    000
  • gRPC服务调试利器:grpcui与grpcurl实践指南

    本文旨在为gRPC服务开发者提供有效的调试与交互工具解决方案。针对传统HTTP客户端在gRPC协议上的局限性,重点介绍两款功能强大的开源工具:命令行界面的grpcurl和基于Web的交互式UI工具grpcui。文章将详细阐述它们的安装、基本用法、高级功能以及各自的适用场景,帮助开发者高效地测试、调试…

    2025年12月10日
    000
  • gRPC客户端选择与实践:grpcui与grpcurl深度解析

    在gRPC服务开发与调试中,选择合适的客户端工具至关重要。本文针对传统工具在gRPC场景下的局限性,重点介绍并推荐两款高效的gRPC客户端:基于命令行的grpcurl和提供Web界面的grpcui。它们凭借强大的服务发现、请求构建与响应可视化能力,极大简化了gRPC服务的测试与交互过程,是.NET及…

    2025年12月10日
    000
  • PHP与MySQL安全更新用户资料:字段校验与重复性检查

    本教程详细阐述了如何使用PHP和MySQL安全地更新用户资料,重点涵盖了输入字段的非空校验、用户名的唯一性检查以及如何通过预处理语句(Prepared Statements)有效防止SQL注入攻击。文章将提供清晰的代码示例,并强调在开发过程中应遵循的安全最佳实践,确保用户数据的完整性和系统的安全性。…

    2025年12月10日
    000
  • 安全地更新MySQL用户数据:PHP与预处理语句实践指南

    本教程详细阐述了如何使用PHP和MySQLi预处理语句安全地更新用户配置文件中的数据,特别是处理用户名更新时所需的唯一性检查和空值验证。文章强调了使用参数化查询来防止SQL注入攻击的重要性,并提供了清晰的代码示例和最佳实践,以确保数据完整性和应用程序安全性。 在构建web应用程序时,用户个人资料的更…

    2025年12月10日
    000
  • PHP命令怎样利用管道符传递数据给脚本 PHP命令管道符使用的基础技巧

    在php中使用管道符可通过proc_open或shell_exec实现命令间的数据传递,1. 使用proc_open可精细控制输入、输出和错误流,适用于需交互的复杂场景;2. 使用shell_exec时应结合escapeshellarg对用户输入进行验证和转义,防止命令注入;3. 管道符优势在于内存…

    2025年12月10日
    000
  • Symfony 怎样把Excel数据转为PHP数组

    在symfony中将excel数据转换为php数组最常见且最可靠的方式是使用phpspreadsheet库,它支持多种excel格式并提供直观api;首先通过composer安装phpoffice/phpspreadsheet,然后在控制器中处理文件上传,利用iofactory加载文件并读取工作表数…

    2025年12月10日 好文分享
    000
  • PHP怎样开发在线教育平台?课程分销提成设计

    选择php框架需综合团队熟悉度、项目规模、开发效率及扩展性,laravel适合快速开发,symfony适合大型复杂项目;2. 构建分销提成系统需设计users、courses、orders、referrals和commissions表,通过唯一推荐链接追踪来源,在订单支付后依据规则计算提成并记录,设…

    2025年12月10日
    000
  • PHP常用框架怎样进行数据库迁移与版本控制 PHP常用框架迁移工具的实用方法

    数据库迁移和版本控制可通过工具实现对数据库结构的代码化管理,确保团队协作顺畅并支持回滚;1. laravel使用artisan命令生成迁移文件,编写up()和down()方法定义变更与回滚逻辑,通过php artisan migrate执行迁移,用migrate:rollback回滚;2. doct…

    2025年12月10日
    000
  • PHP如何排查内存占用突然超出限制的原因 PHP限制内存占用的问题诊断技巧

    首先使用memory_get_usage()监控内存使用情况,定位高内存消耗代码段;2. 检查循环引用和未释放对象,利用xdebug生成内存快照分析引用关系;3. 避免使用file_get_contents()等一次性加载数据的函数,改用fopen()和fread()分块读取;4. 合理设置php.…

    2025年12月10日
    000
  • URL参数与片段标识符:PHP中$_GET数据获取的关键解析

    本文深入解析了在PHP Web开发中,通过URL传递数据时查询参数与URL片段标识符的正确使用规范。文章阐明了$_GET超全局变量的工作机制,并揭示了将参数置于#符号之后导致服务器端无法获取数据的根本原因。通过对比错误与正确的URL结构,提供了确保参数有效传递的解决方案,旨在提升开发者对URL解析机…

    2025年12月10日
    000
  • URL结构解析:理解查询参数与片段标识符的正确用法

    本文深入探讨了URL中查询参数(?后部分)与片段标识符(#后部分)的区别及其在Web开发中的作用。通过PHP $_GET变量无法获取哈希值前参数的问题,详细解释了服务器端如何处理URL,以及片段标识符仅在客户端生效的原理。文章提供了正确的URL构建方式,确保数据能被服务器端正确接收,同时兼顾客户端导…

    2025年12月10日
    000
  • gRPC服务调试利器:探索grpcui与grpcurl客户端

    本文旨在解决gRPC服务调试中遇到的挑战,特别是传统HTTP工具的局限性。我们将深入介绍两款高效的gRPC客户端工具:命令行界面的grpcurl和基于Web界面的grpcui。文章将详细阐述它们的安装、基本用法、核心功能以及在实际开发中的应用,旨在帮助开发者更便捷、专业地测试和调试gRPC服务。 引…

    2025年12月10日
    000

发表回复

登录后才能评论
关注微信