答案 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。:您应将静态状态声明替换为“管理-配置”菜单(选择或多项选择)。