gpt4 book ai didi

magento - 覆盖 Magento Controller_Abstract

转载 作者:行者123 更新时间:2023-12-02 13:16:44 26 4
gpt4 key购买 nike

我们修改了Magento的history.phtml以显示所有订单,对受限网站没有任何限制。这是可行的,但是当我们尝试打印或查看订单时遇到了问题。我已经调试过,问题出在 Magento 的 _canViewOrder (位于 Mage_Sales_Controller_Abstract 中)。在该函数中,实现了额外的逻辑检查,以检查登录的用户是否可以查看/打印所请求的订单:

if ($order->getId() && $order->getCustomerId() && ($order->getCustomerId() == $customerId)
&& in_array($order->getState(), $availableStates, $strict = true)

由于我们这里有一些自定义开发,因此我们需要重写此方法以删除限制。不幸的是,我们无法在任何地方找到如何重写 Controller 类。

请注意,我们确实知道如何覆盖路由器/ Controller ,但这个位于 Controller 文件夹中,并且是一个抽象类。

任何人都可以为我指明正确的方向,或者为我提供一个示例 config.xml 来覆盖此类吗?

最佳答案

我最终决定使用快捷方式。我已经重写了 Mage_Sales_OrderController:

<?php
require_once Mage::getModuleDir('controllers', 'Mage_Sales') . DS . 'OrderController.php';
class MyCompany_MyModule_OrderController extends Mage_Sales_OrderController
{
/**
* Check order view availability
* Overridden from Mage_Sales_Controller_Abstract to
* remove the customer restriction. We want to show all
* orders to all customers on any time.
*
* TODO: Maybe in the future add a customer group restriction
*
* @param Mage_Sales_Model_Order $order
* @return bool
*/
protected function _canViewOrder($order)
{
$availableStates = Mage::getSingleton('sales/order_config')->getVisibleOnFrontStates();
if ($order->getId() && in_array($order->getState(), $availableStates, $strict = true)) {
return true;
}

return false;
}
}

在我的 config.xml 中,我告诉 Magento 首先使用我的 Controller 并使用 OrderController 作为备份。由于我只重写了一个函数,因此所有现有代码都不会被触及。

<?xml version="1.0"?>    
...

<frontend>
...
<routers>
...
<sales>
<args>
<modules>
<MyCompany_MyModule before="Mage_Sales_OrderController">MyCompany_MyModule_Sales</MyCompany_MyModule>
</modules>
</args>
</sales>
</routers>
...
</frontend>
...

关于magento - 覆盖 Magento Controller_Abstract,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com