Respostas:
Você pode usar qualquer arquivo de layout do Magento no seu módulo para inserir seu bloco personalizado. No seu caso, você precisa usar o checkout_onepage_success.xml
arquivo de layout em seu módulo personalizado, que estará ativo quando um cliente estiver na página de êxito do pedido. No arquivo de layout, você precisa especificar onde deseja adicionar seu modelo personalizado usando referenceContainer
ou referenceBlock
.
Para você, criei um módulo simples e testei o que funciona bem.
registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
Magento\Framework\Component\ComponentRegistrar::MODULE,
'Amit_Orderpage',
__DIR__
);
compositer.json
{
"name": "amit/orderpage-module",
"description": "Simple Magento 2 module that adds a new template on order success page.",
"type": "magento2-module",
"version": "1.0.0",
"license": [
"OSL-3.0",
"AFL-3.0"
],
"require": {
"php": "~5.5.0|~5.6.0|~7.0.0",
"magento/framework": "~100.0"
},
"autoload": {
"files": [ "registration.php" ],
"psr-4": {
"Amit\\Orderpage\\": ""
}
}
}
etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Amit_Orderpage" setup_version="2.0.0"/>
</config>
Block / Success.php
<?php
namespace Amit\Orderpage\Block;
class Success extends \Magento\Framework\View\Element\Template
{
public function getSomething()
{
return 'returned something from custom block.';
}
}
visualizar / frontend / layout / checkout_onepage_success.xml
<?xml version="1.0"?>
<body>
<referenceContainer name="order.success.additional.info">
<block class="Amit\Orderpage\Block\Success"
name="amit.order.success"
template="Amit_Orderpage::order/success.phtml"
after="-">
</block>
</referenceContainer>
</body>
Especifique before
ou after
marque para especificar onde você deseja adicionar seu modelo antes ou depois do order.success.additional.info
contêiner. Aqui, after="-"
você adicionará seu modelo ao order.success.additional.info
container, depois de todos os outros containers presentes na mesma seção.
view / frontend / templates / order / success.phtml
<?php /* @var $block \Amit\Orderpage\Block\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
Se você deseja utilizar / acessar o objeto $ order atual em seu arquivo block / html, sem substituir o bloco / modelo de sucesso do pedido original. Aqui está a solução completa:
registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'MageAj_OrderSuccess',
__DIR__
);
etc / module.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="MageAj_OrderSuccess" setup_version="2.0.0" />
</config>
app / code / MageAj / OrderSuccess / view / frontend / layout / checkout_onepage_success.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="order.success.additional.info">
<block class="Magento\Framework\View\Element\Template" name="mageaj.success" template="MageAj_OrderSuccess::checkout/onepage/success.phtml" cacheable="false">
<arguments>
<argument name="view_model" xsi:type="object">MageAj\OrderSuccess\ViewModel\Checkout\Onepage\Success</argument>
</arguments>
</block>
</referenceContainer>
</body>
</page>
app / code / MageAj / OrderSuccess / ViewModel / Checkout / Onepage / Success.php
<?php
namespace MageAj\OrderSuccess\ViewModel\Checkout\Onepage;
class Success implements \Magento\Framework\View\Element\Block\ArgumentInterface
{
protected $_checkoutSession;
public function __construct(
\Magento\Checkout\Model\Session $checkoutSession
) {
$this->_checkoutSession = $checkoutSession;
}
public function getOrder()
{
return $this->_checkoutSession->getLastRealOrder();
}
}
app / code / MageAj / OrderSuccess / view / frontend / templates / order / success.phtml
<?php $order = $block->getViewModel()->getOrder(); ?>
Se você não deseja criar um novo módulo, também pode fazê-lo no seu tema. Siga as etapas abaixo:
1. Crie checkout_onepage_success.xml
no seu tema. Por exemplo:
app / design / frontend /// Magento_Checkout / layout / checkout_onepage_success.xml.
O conteúdo do arquivo é:
<?xml version="1.0"?>
<body>
<referenceContainer name="order.success.additional.info">
<block class="Magento\Checkout\Block\Onepage\Success"
name="custom_info.order.success"
template="Magento_Checkout::order/success/custom_info.phtml"
after="-">
</block>
</referenceContainer>
</body>
2.Então você precisa criar o arquivo de modelo:
app / design / frontend /// Magento_Checkout / templates / order / success / custom_info.phtml
Você pode adicionar qualquer conteúdo no modelo. Por exemplo:
<?php /* @var $block \Magento\Checkout\Block\Onepage\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
Limpe o cache e pronto.
Em checkout_onepage_success.xml: -
<block class="Magento\Framework\View\Element\Template" name="test_file" template="Magento_Theme::test.phtml"/>
Perdeu meu código antes, você pode verificar minha resposta agora.
você pode usar referenceContainer ou referenceBlock para adicionar seu arquivo phtml na página de sucesso dos pedidos.
<referenceBlock name="checkout.success">
<block class="[Company]\[Vendor]\Block\[Yourblock]" template="Company_Vendor::yourfile.phtml" name="[Yourblock Name]"/>
</referenceBlock>