如何从销售订单详细信息页面的地址信息块中删除/禁用编辑按钮

时间:2019-04-02 12:38:03

标签: magento magento2

根据特定的订单状态,我想限制用户更改订单地址,即

我要从地址信息块中的“帐单和送货地址”禁用或删除编辑按钮

请检查下面的图片

https://i.stack.imgur.com/2BoFC.png

1 个答案:

答案 0 :(得分:0)

首先,您需要找到负责Sales Order View页面这一部分的模板。您可以通过在Admin-Stores-Configuration-Advanced-Developer-Debug

中启用模板调试来实现

这是我们需要的模板-vendor / magento / module-sales / view / adminhtml / templates / order / view / info.phtml

在第172和181行,我们具有“编辑”链接渲染

<div class="actions"><?= /* @noEscape */ $block->getAddressEditLink($order->getBillingAddress()); ?></div>

所以我建议-是重写此模板,并向其中添加一个ViewModel来处理您的自定义逻辑。我将在我的模块中执行此操作-供应商:透视图,名称:SalesOrderCustomization

创建布局以覆盖模板-app / code / Perspective / SalesOrderCustomization / view / adminhtml / layout / sales_order_view.xml。您也可以在主题中执行此操作。

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="order_info"
                        template="Perspective_SalesOrderCustomization::order/view/info.phtml">
            <arguments>
                <argument name="view_model"
                          xsi:type="object">\Perspective\SalesOrderCustomization\ViewModel\Order\View\Info</argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

将info.phtml复制到自定义模块app / code / Perspective / SalesOrderCustomization / view / adminhtml / templates / order / view / info.phtml

修改模板。 在开头添加(对我来说,是第30-31行):

/** @var \Perspective\SalesOrderCustomization\ViewModel\Order\View\Info $viewModel */
$viewModel = $block->getData('view_model');

修改“编辑”链接呈现:

/* Lines 175-177 */    
<?php if ($viewModel->isAddressEditAvailable($order->getStatus())): ?>
    <div class="actions"><?= /* @noEscape */ $block->getAddressEditLink($order->getBillingAddress()); ?></div>
<?php endif; ?>

/* Lines 186-188 */
<?php if ($viewModel->isAddressEditAvailable($order->getStatus())): ?>
    <div class="actions"><?= /* @noEscape */ $block->getAddressEditLink($order->getShippingAddress()); ?></div>
<?php endif; ?>

还有我们的ViewModel:

<?php


namespace Perspective\SalesOrderCustomization\ViewModel\Order\View;


use Magento\Framework\View\Element\Block\ArgumentInterface;

class Info implements ArgumentInterface
{
    /**
     * @param string $orderStatus
     * @return bool
     */
    public function isAddressEditAvailable($orderStatus)
    {
        if ($orderStatus === $this->getNotEditableStatus()) {
            return false;
        }
        return true;
    }

    protected function getNotEditableStatus()
    {
        return 'complete';  /* todo: replace with Admin Configuration */
    }
}

还添加必需的文件(etc / modelu.xml,registration.php)。

下一步是清理缓存,启用模块,进行设置升级,然后进行编译(如果需要)。

P.S。:您应将静态状态声明替换为“管理-配置”菜单(选择或多项选择)。