Câu trả lời:
Bạn có thể sử dụng bất kỳ tệp bố cục nào của Magento trong mô-đun của mình để chèn khối tùy chỉnh. Trong trường hợp của bạn, bạn cần sử dụng checkout_onepage_success.xml
tệp bố cục trong mô-đun tùy chỉnh sẽ hoạt động khi khách hàng ở trang thành công. Trong tệp bố cục, bạn cần chỉ định nơi bạn muốn thêm mẫu tùy chỉnh của mình bằng cách sử dụng referenceContainer
hoặc referenceBlock
.
Đối với bạn, tôi đã tạo ra một mô-đun đơn giản và thử nghiệm nó hoạt động tốt.
đăng ký.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
Magento\Framework\Component\ComponentRegistrar::MODULE,
'Amit_Orderpage',
__DIR__
);
composer.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\\": ""
}
}
}
vv / 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>
Chặn / Thành công.php
<?php
namespace Amit\Orderpage\Block;
class Success extends \Magento\Framework\View\Element\Template
{
public function getSomething()
{
return 'returned something from custom block.';
}
}
xem / 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>
Chỉ định before
hoặc after
gắn thẻ để chỉ định nơi bạn muốn thêm mẫu trước hoặc sau khi order.success.additional.info
chứa. Ở đây after="-"
sẽ thêm mẫu của bạn vào order.success.additional.info
container sau khi tất cả các container khác có trong cùng một phần.
xem / frontend / mẫu / đặt hàng / thành công.
<?php /* @var $block \Amit\Orderpage\Block\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
Nếu bạn muốn sử dụng / truy cập đối tượng $ order hiện tại trong tệp block / html của mình, mà không ghi đè khối / mẫu thành công của đơn đặt hàng ban đầu. Đây là giải pháp hoàn chỉnh:
đăng ký.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'MageAj_OrderSuccess',
__DIR__
);
vv / 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>
ứng dụng / mã / 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>
ứng dụng / mã / 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();
}
}
ứng dụng / mã / MageAj / OrderSuccess / view / frontend / samples / order / thành công.
<?php $order = $block->getViewModel()->getOrder(); ?>
Nếu bạn không muốn tạo mô-đun mới, bạn cũng có thể làm điều đó trong chủ đề của mình. Thực hiện theo các bước dưới đây:
1.Tạo checkout_onepage_success.xml
trong chủ đề của bạn. Ví dụ:
ứng dụng / thiết kế / frontend /// Magento_Checkout / layout / checkout_onepage_success.xml.
Nội dung của tập tin là:
<?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.Sau đó, bạn cần tạo tệp mẫu:
ứng dụng / thiết kế / frontend /// Magento_Checkout / samples / order / thành công / custom_info.phtml
Bạn có thể thêm bất kỳ nội dung nào trong mẫu. Ví dụ:
<?php /* @var $block \Magento\Checkout\Block\Onepage\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
Xóa bộ nhớ cache và bạn đã hoàn tất.
Trong checkout_onepage_success.xml: -
<block class="Magento\Framework\View\Element\Template" name="test_file" template="Magento_Theme::test.phtml"/>
Bỏ lỡ mã của tôi trước đây, bạn có thể kiểm tra câu trả lời của tôi bây giờ.
bạn có thể sử dụng ReferenceContainer hoặc ReferenceBlock để thêm tệp phtml của mình vào trang thành công.
<referenceBlock name="checkout.success">
<block class="[Company]\[Vendor]\Block\[Yourblock]" template="Company_Vendor::yourfile.phtml" name="[Yourblock Name]"/>
</referenceBlock>