Magento 2 - Utilizzo di Object Manager

Sep 24 2020

Ho un modulo che inserisce alcune informazioni sulla spedizione nella visualizzazione dell'ordine dell'amministratore. Sto cercando di visualizzare il metodo di spedizione corrente in questa sezione.

Ho questo in view / 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();

Funziona bene ma so che non è il modo corretto di utilizzare Object Manager. Qualcuno può aiutarmi a usarlo correttamente?

Grazie Stan

Risposte

2 Nits Sep 28 2020 at 17:44

Si prega di seguire i passaggi seguenti per ottenere il metodo di spedizione e i suoi dettagli nel file 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();

Per favore fatemi sapere se avete problemi.

Spero che questo ti possa aiutare.