Add content to Order View Magento 2
try this
Learning/RewriteSales/Block/Adminhtml/Order/View/Custom.php
<?php
namespace Learning\RewriteSales\Block\Adminhtml\Order\View;
class Custom extends \Magento\Backend\Block\Template
{
}
Learning/RewriteSales/view/adminhtml/layout/sales_order_view.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="order_info">
<block class="Learning\RewriteSales\Block\Adminhtml\Order\View\Custom" name="sales_order_view_custom" template="order/view/custom.phtml" />
</referenceBlock>
</body>
</page>
Learning/RewriteSales/view/adminhtml/templates/order/view/custom.phtml
<h1>Hi, I am here!</h1>
clear the cache and run it.
in the first look the block Magento\Sales\Block\Adminhtml\Order\View\Info have function :
protected function _beforeToHtml()
{
if (!$this->getParentBlock()) {
throw new \Magento\Framework\Exception\LocalizedException(
__('Please correct the parent block for this block.')
);
}
$this->setOrder($this->getParentBlock()->getOrder());
foreach ($this->getParentBlock()->getOrderInfoData() as $key => $value) {
$this->setDataUsingMethod($key, $value);
}
parent::_beforeToHtml();
}
you can't call directly inside container ,it need have a parent block i think the best way for inject your block , you need use the additional container with name payment_additional_info because all sub block inside tab , render specific childs , if you go to default sales_order_view.xml of sales module you will find:
<block class="Magento\Sales\Block\Adminhtml\Order\View\Tabs" name="sales_order_tabs">
<block class="Magento\Sales\Block\Adminhtml\Order\View\Tab\Info" name="order_tab_info" template="order/view/tab/info.phtml">
<block class="Magento\Sales\Block\Adminhtml\Order\View\Messages" name="order_messages"/>
<block class="Magento\Sales\Block\Adminhtml\Order\View\Info" name="order_info" template="order/view/info.phtml"/>
<block class="Magento\Sales\Block\Adminhtml\Order\View\Items" name="order_items" template="order/view/items.phtml">
<block class="Magento\Sales\Block\Adminhtml\Order\View\Items\Renderer\DefaultRenderer" as="default" template="order/view/items/renderer/default.phtml"/>
<block class="Magento\Sales\Block\Adminhtml\Items\Column\Qty" name="column_qty" template="items/column/qty.phtml" group="column"/>
<block class="Magento\Sales\Block\Adminhtml\Items\Column\Name" name="column_name" template="items/column/name.phtml" group="column"/>
<block class="Magento\Framework\View\Element\Text\ListText" name="order_item_extra_info"/>
</block>
as we see the big block of tag infos is order_tab_info but it render just the child like order_history or order_payment. ok our solution is like (inside your sales_order_view.xml) :
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="left">
<referenceContainer name="payment_additional_info">
<block class="Ibnab\OrderAd\Block\Adminhtml\Order\View\View" name="sales_order_view_ad" template="order/view/ad.phtml"/>
</referenceContainer>
</referenceContainer>
</body>
</page>
our ad.phtml:
<p></p>
<h1>Our Adiitional Block </h1>
that is a solution or try of how inject custom container
Here is the solution that works for me:
sales_order_view.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="order_info">
<action method="setTemplate">
<argument name="template" translate="true" xsi:type="string">MD_Demo::order/view/info.phtml</argument>
</action>
</referenceBlock>
</body>
</page>
order/view/info.ptml
<?php $_order = $block->getOrder() ?>
<?php
$orderAdminDate = $block->formatDate(
$block->getOrderAdminDate($_order->getCreatedAt()),
\IntlDateFormatter::MEDIUM,
true
);
$orderStoreDate = $block->formatDate(
$_order->getCreatedAt(),
\IntlDateFormatter::MEDIUM,
true,
$block->getTimezoneForStore($_order->getStore())
);
?>
<section class="admin__page-section order-view-account-information">
<div class="admin__page-section-title">
<span class="title"><?php /* @escapeNotVerified */ echo __('Order & Account Information') ?></span>
</div>
<div class="admin__page-section-content">
<div class="admin__page-section-item order-information">
<?php /* Order Information */?>
<?php if ($_order->getEmailSent()):
$_email = __('The order confirmation email was sent');
else:
$_email = __('The order confirmation email is not sent');
endif; ?>
<div class="admin__page-section-item-title">
<span class="title">
<?php if ($block->getNoUseOrderLink()): ?>
<?php /* @escapeNotVerified */ echo __('Order # %1', $_order->getRealOrderId()) ?> (<span><?php /* @escapeNotVerified */ echo $_email ?></span>)
<?php else: ?>
<a href="<?php /* @escapeNotVerified */ echo $block->getViewUrl($_order->getId()) ?>"><?php /* @escapeNotVerified */ echo __('Order # %1', $_order->getRealOrderId()) ?></a>
<span>(<?php /* @escapeNotVerified */ echo $_email ?>)</span>
<?php endif; ?>
</span>
</div>
<div class="admin__page-section-item-content">
<table class="admin__table-secondary order-information-table">
<tr>
<th><?php /* @escapeNotVerified */ echo __('Order Date') ?></th>
<td><?php /* @escapeNotVerified */ echo $orderAdminDate ?></td>
</tr>
<?php if ($orderAdminDate != $orderStoreDate):?>
<tr>
<th><?php /* @escapeNotVerified */ echo __(
'Order Date (%1)',
$block->getTimezoneForStore($_order->getStore())
) ?></th>
<td><?php /* @escapeNotVerified */ echo $orderStoreDate ?></td>
</tr>
<?php endif;?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Order Status') ?></th>
<td><span id="order_status"><?php /* @escapeNotVerified */ echo $_order->getStatusLabel() ?></span></td>
</tr>
<?php echo $block->getChildHtml(); ?>
<?php if ($block->isSingleStoreMode() == false):?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Purchased From') ?></th>
<td><?php /* @escapeNotVerified */ echo $block->getOrderStoreName() ?></td>
</tr>
<?php endif; ?>
<?php if ($_order->getRelationChildId()): ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Link to the New Order') ?></th>
<td><a href="<?php /* @escapeNotVerified */ echo $block->getViewUrl($_order->getRelationChildId()) ?>">
<?php /* @escapeNotVerified */ echo $_order->getRelationChildRealId() ?>
</a></td>
</tr>
<?php endif; ?>
<?php if ($_order->getRelationParentId()): ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Link to the Previous Order') ?></th>
<td><a href="<?php /* @escapeNotVerified */ echo $block->getViewUrl($_order->getRelationParentId()) ?>">
<?php /* @escapeNotVerified */ echo $_order->getRelationParentRealId() ?>
</a></td>
</tr>
<?php endif; ?>
<?php if ($_order->getRemoteIp() && $block->shouldDisplayCustomerIp()): ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Placed from IP') ?></th>
<td><?php /* @escapeNotVerified */ echo $_order->getRemoteIp(); echo($_order->getXForwardedFor()) ? ' (' . $block->escapeHtml($_order->getXForwardedFor()) . ')' : ''; ?></td>
</tr>
<?php endif; ?>
<?php if ($_order->getGlobalCurrencyCode() != $_order->getBaseCurrencyCode()): ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('%1 / %2 rate:', $_order->getGlobalCurrencyCode(), $_order->getBaseCurrencyCode()) ?></th>
<td><?php /* @escapeNotVerified */ echo $_order->getBaseToGlobalRate() ?></td>
</tr>
<?php endif; ?>
<?php if ($_order->getBaseCurrencyCode() != $_order->getOrderCurrencyCode()): ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('%1 / %2 rate:', $_order->getOrderCurrencyCode(), $_order->getBaseCurrencyCode()) ?></th>
<th><?php /* @escapeNotVerified */ echo $_order->getBaseToOrderRate() ?></th>
</tr>
<?php endif; ?>
</table>
</div>
</div>
<div class="admin__page-section-item order-account-information">
<?php /* Account Information */?>
<div class="admin__page-section-item-title">
<span class="title"><?php /* @escapeNotVerified */ echo __('Account Information') ?></span>
<div class="actions"><?php /* @escapeNotVerified */ echo $block->getAccountEditLink()?></div>
</div>
<div class="admin__page-section-item-content">
<table class="admin__table-secondary order-account-information-table">
<tr>
<th><?php /* @escapeNotVerified */ echo __('Customer Name') ?></th>
<td>
<?php if ($_customerUrl = $block->getCustomerViewUrl()) : ?>
<a href="<?php /* @escapeNotVerified */ echo $_customerUrl ?>" target="_blank">
<span><?php echo $block->escapeHtml($_order->getCustomerName()) ?></span>
</a>
<?php else: ?>
<?php echo $block->escapeHtml($_order->getCustomerName()) ?>
<?php endif; ?>
</td>
</tr>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Email') ?></th>
<td><a href="mailto:<?php echo $block->escapeHtml($_order->getCustomerEmail()) ?>"><?php echo $block->escapeHtml($_order->getCustomerEmail()) ?></a></td>
</tr>
<?php if ($_groupName = $block->getCustomerGroupName()) : ?>
<tr>
<th><?php /* @escapeNotVerified */ echo __('Customer Group') ?></th>
<td><?php /* @escapeNotVerified */ echo $_groupName ?></td>
</tr>
<?php endif; ?>
<?php foreach ($block->getCustomerAccountData() as $data):?>
<tr>
<th><?php /* @escapeNotVerified */ echo $data['label'] ?></th>
<td><?php /* @escapeNotVerified */ echo $data['value'] ?></td>
</tr>
<?php endforeach;?>
</table>
</div>
</div>
</div>
</section>
<section class="admin__page-section order-addresses">
<div class="admin__page-section-title">
<span class="title"><?php /* @escapeNotVerified */ echo __('Address Information') ?></span>
</div>
<div class="admin__page-section-content">
<div class="admin__page-section-item order-billing-address">
<?php /* Billing Address */?>
<div class="admin__page-section-item-title">
<span class="title"><?php /* @escapeNotVerified */ echo __('Billing Address') ?></span>
<div class="actions"><?php /* @escapeNotVerified */ echo $block->getAddressEditLink($_order->getBillingAddress()); ?></div>
</div>
<address class="admin__page-section-item-content"><?php /* @escapeNotVerified */ echo $block->getFormattedAddress($_order->getBillingAddress()); ?></address>
</div>
<?php if (!$block->getOrder()->getIsVirtual()): ?>
<div class="admin__page-section-item order-shipping-address">
<?php /* Shipping Address */ ?>
<div class="admin__page-section-item-title">
<span class="title"><?php /* @escapeNotVerified */ echo __('Shipping Address') ?></span>
<div class="actions"><?php /* @escapeNotVerified */ echo $block->getAddressEditLink($_order->getShippingAddress()); ?></div>
</div>
<address class="admin__page-section-item-content"><?php /* @escapeNotVerified */ echo $block->getFormattedAddress($_order->getShippingAddress()); ?></address>
</div>
<?php endif; ?>
</div>
</section>
<section>
<H1>HERE IS IT MY BLOCK<H1>
</section>