回答:
モジュールでMagentoのレイアウトファイルを使用して、カスタムブロックを挿入できます。あなたのケースcheckout_onepage_success.xml
では、顧客が注文成功ページにいるときにアクティブになるカスタムモジュールでレイアウトファイルを使用する必要があります。レイアウトファイルで、referenceContainer
またはを使用して、カスタムテンプレートを追加する場所を指定する必要がありますreferenceBlock
。
あなたのために私は簡単なモジュールを作成し、それがうまく機能することをテストしました。
registration.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\\": ""
}
}
}
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.';
}
}
view / 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>
指定before
またはafter
あなたが前か後に、テンプレートを追加したい場所を指定し、タグorder.success.additional.info
のコンテナ。ここでafter="-"
はorder.success.additional.info
、同じセクションにある他のすべてのコンテナの後に、テンプレートをコンテナに追加します。
view / frontend / templates / order / success.phtml
<?php /* @var $block \Amit\Orderpage\Block\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
元の注文成功ブロック/テンプレートを上書きせずに、block / htmlファイル内の現在の$ orderオブジェクトを利用/アクセスしたい場合。ここに完全なソリューションがあります:
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(); ?>
新しいモジュールを作成したくない場合は、テーマで作成することもできます。以下の手順に従ってください:
1. checkout_onepage_success.xml
テーマを作成します。例えば:
app / design / frontend /// Magento_Checkout / layout / checkout_onepage_success.xml。
ファイルの内容は次のとおりです。
<?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.次に、テンプレートファイルを作成する必要があります:
app / design / frontend /// Magento_Checkout / templates / order / success / custom_info.phtml
テンプレートには任意のコンテンツを追加できます。例えば:
<?php /* @var $block \Magento\Checkout\Block\Onepage\Success */?>
<?php echo __('Custom template file content.'); ?>
<?php echo $block->getSomething(); ?>
キャッシュをクリアすれば完了です。
checkout_onepage_success.xmlで:
<block class="Magento\Framework\View\Element\Template" name="test_file" template="Magento_Theme::test.phtml"/>
以前に私のコードを逃しました、今私の答えをチェックできますか?
referenceContainerまたはreferenceBlockを使用して、成功ページにphtmlファイルを追加できます。
<referenceBlock name="checkout.success">
<block class="[Company]\[Vendor]\Block\[Yourblock]" template="Company_Vendor::yourfile.phtml" name="[Yourblock Name]"/>
</referenceBlock>