0

I'm working on a customized success page and I would like to get that same table from cart to display on success page, I mean, it should contain product thumb, product name with configurable options (in my case, size and color), quantity ordered and price for each item, and on the foot, shipping price, coupon description and value and grand total.

Additionally, I need to show the customer's shipping address.

That will be a default success page for current and future projects, so I preferred to work without modules and make customisation directly on success page phtml file.

Please note that I'm just the front-end guy, so I have no knowledge in advanced development/backend development.

Thanks in advance for helping!

2
  • Are you okay with rebuilding the HTML? You can't repurpose the shopping cart table because it contains things that let it modify the quantity/other actions. You can, however just rebuild the HTML and get the list of products on the success.phtml file. To do it in a cleaner way, you can add an XML block with your own template (does not require a module). I'll put an example if you're good with that.
    – heraldo
    Apr 17, 2017 at 3:30
  • I think I'm okay, no problem. Just post an example and I will try to follow. Apr 17, 2017 at 20:15

2 Answers 2

0

I'd recommend adding a block via XML with its own template. It'll make it a little cleaner since it won't fill up the success.phtml file.

Step 1:

In your app/design/frontend/YOUR_PACKAGE/YOUR_THEME/layout/local.xml (This file is optional, so if you don't have one, create one)

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <!-- success page view -->
    <checkout_onepage_success>
        <!-- references the main body of the page -->
        <reference name="content">
            <block type="checkout/onepage_success" name="whatever.you.want" as="order_items" template="checkout/success/items.phtml" />
        </reference>
    </checkout_onepage_success>
</layout>

Step 2:

In your app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/checkout/success.phtml file, add the following call to request the block we just created. You can place it anywhere you'd like it to show up.

<?php echo $this->getChildHtml('order_items') ?>

The order_items references the as="order_items" attribute in my example local.xml file, so you can change it to whatever you'd like. Just make sure to change both of them.

Step 3:

As you can see, we're referencing a phtml that doesn't exist in the template="checkout/success/items.phtml" attribute. You need to create this file at that location. (You can change this location to whatever you'd like) So for this example, it should be at app/design/frontend/YOUR_PACKAGE/YOUR_THEME/template/checkout/success/items.phtml

In this file we can get the items and various data from the items with something like:

<?php
/*
 * joaogdesigner
 * custom items for the success page
 *
 * @category design
 * @package your_package
 * @block Mage_Checkout_Onepage_Success
 *
*/
    $order = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
    $items = $order->getAllVisibleItems();
    $total = $order->getGrandTotal(); // grand total
?>

<?php foreach( $items as $item ): ?>

    Product ID: <?php echo $item->getProductId(); ?>
    Name: <?php echo $item->getName(); ?>
    Qty: <?php echo $item->getQtyOrdered(); ?>
    Price: <?php echo $item->getPrice(); ?>

<?php endforeach; ?>

Hope this helps! Let me know if you need anything clarified.

2
  • Many thanks man, I will try and I go back here to tell you if it worked. Just a question: when I have to add a new code here in stackoverflow, I need to add a new answer since I can't use bbcode on comments? Apr 18, 2017 at 1:17
  • You can highlight code in the comments using the backtick ` before and after the code. like this. But if it's a lot of code, it's better to edit your question instead.
    – heraldo
    Apr 18, 2017 at 2:23
0

In Magento 2, you can retrieve the order details and shipping address on the success page by utilizing the available data and template files. Here's a step-by-step guide on how to achieve this:

  1. Override the success page template:

    • Create a new module or use an existing one in your Magento 2 installation.
    • In your module, create a file checkout_success.xml in the following location: app/code/{Vendor}/{Module}/view/frontend/layout/.
    • Add the following code to the checkout_success.xml file:
      <?xml version="1.0"?>
      <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
          <body>
              <referenceContainer name="content">
                  <block class="{Vendor}\{Module}\Block\Success" name="checkout.success" template="{Vendor}_{Module}::success.phtml" />
              </referenceContainer>
          </body>
      </page>
      
  2. Create the block class:

    • Create a new PHP file Success.php in the following location: app/code/{Vendor}/{Module}/Block/.
    • Add the following code to the Success.php file:
      <?php
      
      namespace {Vendor}\{Module}\Block;
      
      use Magento\Framework\View\Element\Template;
      
      class Success extends Template
      {
          protected $_checkoutSession;
      
          public function __construct(
              Template\Context $context,
              \Magento\Checkout\Model\Session $checkoutSession,
              array $data = []
          ) {
              $this->_checkoutSession = $checkoutSession;
              parent::__construct($context, $data);
          }
      
          public function getOrder()
          {
              return $this->_checkoutSession->getLastRealOrder();
          }
      }
      
  3. Create the template file:

    • Create a new file success.phtml in the following location: app/code/{Vendor}/{Module}/view/frontend/templates/.
    • Add the following code to the success.phtml file:
      <?php
      $order = $block->getOrder();
      $shippingAddress = $order->getShippingAddress();
      ?>
      
      <h1>Your Order</h1>
      
      <h2>Order Details:</h2>
      <table>
          <thead>
              <tr>
                  <th>Product Name</th>
                  <th>SKU</th>
                  <th>Price</th>
                  <th>Quantity</th>
                  <th>Subtotal</th>
              </tr>
          </thead>
          <tbody>
              <?php foreach ($order->getAllVisibleItems() as $item) : ?>
                  <tr>
                      <td><?php echo $item->getName(); ?></td>
                      <td><?php echo $item->getSku(); ?></td>
                      <td><?php echo $item->getPrice(); ?></td>
                      <td><?php echo $item->getQtyOrdered(); ?></td>
                      <td><?php echo $item->getRowTotal(); ?></td>
                  </tr>
              <?php endforeach; ?>
          </tbody>
      </table>
      
      <h2>Shipping Address:</h2>
      <p>
          <?php echo $shippingAddress->getName(); ?><br>
          <?php echo $shippingAddress->getStreetLine1(); ?><br>
          <?php echo $shippingAddress->getStreetLine2(); ?><br>
          <?php echo $shippingAddress->getCity(); ?>, <?php echo $shippingAddress->getRegion(); ?><br>
          <?
      

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.