Прежде всего, вам нужно найти шаблон, отвечающий за эту часть страницы «Просмотр заказа».Вы можете сделать это, включив отладку шаблона в Admin-Stores-Configuration-Advanced-Developer-Debug
Это шаблон, который нам нужен - vendor / magento / module-sales / view /adminhtml / templates / order / view / info.phtml
В строках 172 и 181 у нас есть Edit link render
<div class="actions"><?= /* @noEscape */ $block->getAddressEditLink($order->getBillingAddress()); ?></div>
Так что я предлагаю - переопределить этот шаблон и добавить к немуViewModel для обработки вашей пользовательской логики.Я сделаю это в моем модуле - Vendor: Perspective, Name: 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).
Следующим шагом будет очистить кеш, включить модуль, выполнить обновление настроек и скомпилировать (при необходимости).
PS: Вы должны заменить статическое состояние объявить на Admin - Меню конфигурации (выбрать или множественный выбор).