Magento 2 - Verwenden des Objektmanagers

Sep 24 2020

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

2 Nits Sep 28 2020 at 17:44

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.