Magento 2 - 在成功页面上获得订单预览

g5w*_*5wx 6 html php magento2

有没有办法在下订单后在成功页面上显示订单信息?成功phtml目前仅显示订单号信息.结构:

?>
<?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?>
<div class="checkout-success">
    <?php if ($block->getOrderId()):?>
        <?php if ($block->getCanViewOrder()) :?>
            <p><?php echo __('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeHtml($block->getViewOrderUrl()), $block->escapeHtml($block->getOrderId()))) ?></p>
        <?php  else :?>
            <p><?php echo __('Your order # is: <span>%1</span>.', $block->escapeHtml($block->getOrderId())) ?></p>
        <?php endif;?>
            <p><?php /* @escapeNotVerified */ echo __('We\'ll email you an order confirmation with details and tracking info.') ?></p>
    <?php endif;?>

    <?php echo $block->getAdditionalInfoHtml() ?>

    <div class="actions-toolbar">
        <div class="primary">
            <a class="action primary continue" href="<?php /* @escapeNotVerified */ echo $block->getUrl() ?>"><span><?php /* @escapeNotVerified */ echo __('Continue Shopping') ?></span></a>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我尝试getOrder() ?>从销售模块调用该函数:Module_Sales/view/frontend/templates/order/view.phtml但它不起作用.

Tim*_*oot 5

我即将做完全相同的事情,所以我将记录每一步。

覆盖块

创建文件app/code/Vendor/Module/etc/di.xml并添加以下内容:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../vendor/magento/framework/ObjectManager/etc/config.xsd">
    <preference for="Magento\Checkout\Block\Onepage\Success" type="Vendor\Module\Block\Success"/>
</config>
Run Code Online (Sandbox Code Playgroud)

创建文件app/code/Vendor/Module/Block/Success.php并添加以下内容:

<?php

namespace Vendor\Module\Block;

class Success extends \Magento\Checkout\Block\Onepage\Success {

    public function getOrder() {
        return $this->_checkoutSession->getLastRealOrder();
    }

}
Run Code Online (Sandbox Code Playgroud)

覆盖模板

创建文件app/code/Vendor/Module/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>
        <referenceBlock name="checkout.success" template="Your_Module::checkout/success.phtml"/>
    </body>
</page>
Run Code Online (Sandbox Code Playgroud)

创建文件app/code/Vendor/Module/view/frontend/templates/checkout/success.phtml并添加以下内容:

<?php /** @var $block \Vendor\Module\Block\Success */ ?>
<div class="checkout-success">
    <?php if ($block->getOrderId()):?>
        <?php if ($block->getCanViewOrder()) :?>
            <p><?php echo __('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeHtml($block->getViewOrderUrl()), $block->escapeHtml($block->getOrderId()))) ?></p>
        <?php else: ?>
            <p><?php echo __('Your order # is: <span>%1</span>.', $block->escapeHtml($block->getOrderId())) ?></p>
        <?php endif; ?>

        <!-- BEGIN VENDOR_MODULE CUSTOM -->
        <p><?php echo __('You ordered %1 items.', (int) $block->getOrder()->getTotalQtyOrdered()) ?></p>
        <!-- END VENDOR_MODULE CUSTOM -->

        <p><?php /* @escapeNotVerified */ echo __('We\'ll email you an order confirmation with details and tracking info.') ?></p>
    <?php endif; ?>

    <?php echo $block->getAdditionalInfoHtml() ?>

    <div class="actions-toolbar">
        <div class="primary">
            <a class="action primary continue" href="<?php /* @escapeNotVerified */ echo $block->getUrl() ?>"><span><?php /* @escapeNotVerified */ echo __('Continue Shopping') ?></span></a>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

大概就是这些了,希望能帮到你。

编辑

您可能想经常刷新结帐/成功页面,因此要解决该问题,请转到文件app/code/Magento/Checkout/Controller/Onepage/Success.php并在第 22 行进行更改。

$session->clearQuote(); 
Run Code Online (Sandbox Code Playgroud)

// $session->clearQuote();
Run Code Online (Sandbox Code Playgroud)

这样,当您打开页面时,您的报价将不会被清除。

  • 这在 2.1.2 中似乎无法正常运行。留下空白的成功页面。 (3认同)