Magento 2 - Utilisation du gestionnaire d'objets

Sep 24 2020

J'ai un module qui place des informations d'expédition dans la vue des commandes de l'administrateur. J'essaie d'afficher la méthode d'expédition actuelle dans cette section.

J'ai ceci en vue / 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();

Cela fonctionne bien mais je sais que ce n'est pas la bonne façon d'utiliser Object Manager. Quelqu'un peut-il m'aider à l'utiliser correctement?

Merci, Stan

Réponses

2 Nits Sep 28 2020 at 17:44

Veuillez suivre les étapes ci-dessous pour obtenir la méthode d'expédition et ses détails dans un fichier phtml.

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();

Veuillez me faire savoir si vous rencontrez un problème.

J'espère que cela t'aidera.