Magento 2 - Verwenden des Objektmanagers
Ich habe ein Modul, das einige Versandinformationen in die Bestellansicht des Administrators einfügt. Ich versuche, die aktuelle Versandart in diesem Abschnitt anzuzeigen.
Ich habe dies in Ansicht / adminhtml / templates / order / view / custom_fields.phtml:
$orderId = $this->getRequest()->getParam('order_id');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $order = $objectManager->create('Magento\Sales\Api\Data\OrderInterface')->load($orderId);
$shippingMethod = $order->getShippingDescription();
echo 'Shipping is ' . $order->getShippingMethod();
Dies funktioniert gut, aber ich weiß, dass es nicht der richtige Weg ist, Object Manager zu verwenden. Kann mir jemand helfen, das richtig zu benutzen?
Danke, Stan
Antworten
Befolgen Sie die folgenden Schritte, um die Versandart und ihre Details in der HTML-Datei abzurufen.
app / code / Test / RoomDelivery / 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="sales_order_edit">
<block class="Test\RoomDelivery\Block\Adminhtml\Order\CustomFields" name="order_custom_fields" template="Test_RoomDelivery::order/view/custom_fields.phtml" />
</referenceBlock>
</body>
</page>
app / code / Test / RoomDelivery / Block / Adminhtml / Order / CustomFields.php
declare(strict_types=1);
namespace Test\RoomDelivery\Block\Adminhtml\Order;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Framework\Registry;
use Magento\Sales\Model\Order;
/**
* Class CustomFields
*
* @category Block/Order
* @package Test\RoomDelivery\Block\Adminhtml\Order
*/
class CustomFields extends Template
{
/**
* Core registry
*
* @var Registry
*/
protected $coreRegistry = null; /** * CustomFieldsRepositoryInterface * * @var CustomFieldsRepositoryInterface */ protected $customFieldsRepository;
/**
* CustomFields constructor.
*
* @param Context $context Context * @param Registry $registry Registry
* @param CustomFieldsRepositoryInterface $customFieldsRepository CustomFieldsRepositoryInterface * @param array $data Data
*/
public function __construct(
Context $context, Registry $registry,
array $data = [] ) { $this->coreRegistry = $registry; parent::__construct($context, $data); } /** * Get current order * * @return Order */ public function getOrder() : Order { return $this->coreRegistry->registry('current_order');
}
}
app / code / Test / RoomDelivery / view / adminhtml / templates / order / view / custom_fields.phtml
$order = $block->getOrder();
$orderDetails = $order->getId();
echo 'details ' . $orderDetails . '<br />'; echo $order->getShippingDescription();
Bitte lassen Sie mich wissen, wenn Sie auf ein Problem stoßen.
Ich hoffe, dies wird dir helfen.