Question

I have a module that places some shipping information into the order view of the admin. I am trying to display the current shipping method in this section.

I have this 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();

This works fine but I know it isn't the proper way to use Object Manager. Can someone help me use this properly?

Thanks, Stan

Était-ce utile?

La solution

Please follow the below steps to get the shipping method and its details in phtml file.

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

Please let me know if you are facing any issue.

I hope this will help you.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top