【问题标题】:Magento 2 - get order preview on success pageMagento 2 - 在成功页面上获取订单预览
【发布时间】:2016-04-27 13:40:05
【问题描述】:

有没有办法在下单后在成功页面显示订单信息?成功的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>

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

【问题讨论】:

    标签: php html magento2


    【解决方案1】:

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

    覆盖块

    创建文件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>
    

    创建文件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();
        }
    
    }
    

    覆盖模板

    创建文件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>
    

    创建文件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>
    

    就是这样,希望能帮到你。

    编辑

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

    $session->clearQuote(); 
    

    // $session->clearQuote();
    

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

    【讨论】:

    • 这在 2.1.2 中似乎无法正常工作。留下一个空白的成功页面。
    • 这个解决方案是从 ~2.0.5 开始编写的,我不确定它是否仍然是 100% 最新的,但这应该会带你进入正确的方向。
    • 这段代码确实有效。我在 Magento 2.3 中使用过它。它是使用方法首选项的简单覆盖。当您说白屏时,那是 php 服务器错误。您对扩展名进行了错误编码或 phtml 文件中的某些内容发生了更改,只需使用您的主题/核心中的那个。
    • 注释我们 clearQuote() 的路径;自 M2.3 起已更改 - 现在是:vendor/magento/module-checkout/Controller/Onepage
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多