I want to put the shopping cart at the right side of of my horizontal checkout.
Something like this
Magento – How to put Shopping cart on the right sidebar in checkout
cartcheckoutmagento-1.9onepage-checkoutshopping-cart
Related Solutions
Step1: Create local.xml at
app/design/frontend/yourpackage/yourTemplate/layout/
add this code at this file:
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="header">
<block type="checkout/cart_sidebar" name="cart_sidebar_header" template="checkout/cart/sidebar.phtml" before="-">
<action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/sidebar/default.phtml</template></action>
<action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/sidebar/default.phtml</template></action>
<action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/sidebar/default.phtml</template></action>
<block type="core/text_list" name="cart_sidebar.extra_actions" as="extra_actions" translate="label" module="checkout">
<label>Shopping Cart Sidebar Extra Actions</label>
</block>
</block>
</reference>
</default>
</layout>
This code is call cart side bar to header section.
Step2: on header.phtml call this cart sidebar using below code :
<?php echo $this->getChildHtml('cart_sidebar_header');?>
then rest of you need to put your logic
[Update] I have update code for sidebar
<?php
$count=0;
if (Mage::helper('core')->isModuleOutputEnabled('Mage_Checkout')) {
$count = $this->helper('checkout/cart')->getSummaryCount();
if ($count >= 1) { $text = $this->__('Cart (%s)', $count); }
elseif ($count > 0) {$text = $this->__('Cart (%s)', $count); }
else { $text = $this->__('Cart (0)'); }
}?>
<div class="i_cart" onMouseOver="show_sidebar()" onMouseOut="hide_sidebar()">
<p class="item">MY CART</p>
<p class="cart_digit">
<?php echo $count; ?>
</p>
</div>
<script type="text/javascript">
function show_sidebar()
{
document.getElementById('headsidebar').style.display="block";
}
function hide_sidebar()
{
document.getElementById('headsidebar').style.display="noone";
}
</script>
<?php if ($this->getIsNeedToDisplaySideBar()):?>
<div class="block block-cart" id="headsidebar">
<?php $_cartQty = $this->getSummaryCount() ?>
<div class="block-title">
<strong><span><?php echo $this->__('My Cart') ?></span></strong>
</div>
<div class="block-content">
<?php if ($_cartQty>0): ?>
<div class="summary">
<?php if ($_cartQty==1): ?>
<p class="amount"><?php echo $this->__('There is <a href="%s">1 item</a> in your cart.', $this->getUrl('checkout/cart')) ?></p>
<?php else: ?>
<p class="amount"><?php echo $this->__('There are <a href="%s">%s items</a> in your cart.', $this->getUrl('checkout/cart'), $_cartQty) ?></p>
<?php endif ?>
<p class="subtotal">
<?php if ($this->canApplyMsrp()): ?>
<span class="map-cart-sidebar-total"><?php echo $this->__('ORDER TOTAL WILL BE DISPLAYED BEFORE YOU SUBMIT THE ORDER'); ?></span>
<?php else: ?>
<span class="label"><?php echo $this->__('Cart Subtotal:') ?></span> <?php echo Mage::helper('checkout')->formatPrice($this->getSubtotal()) ?>
<?php if ($_subtotalInclTax = $this->getSubtotalInclTax()): ?>
<br />(<?php echo Mage::helper('checkout')->formatPrice($_subtotalInclTax) ?> <?php echo Mage::helper('tax')->getIncExcText(true) ?>)
<?php endif; ?>
<?php endif; ?>
</p>
</div>
<?php endif ?>
<?php if($_cartQty && $this->isPossibleOnepageCheckout()): ?>
<div class="actions">
<?php echo $this->getChildHtml('extra_actions') ?>
<button type="button" title="<?php echo $this->__('Checkout') ?>" class="button" onclick="setLocation('<?php echo $this->getCheckoutUrl() ?>')"><span><span><?php echo $this->__('Checkout') ?></span></span></button>
</div>
<?php endif ?>
<?php $_items = $this->getRecentItems() ?>
<?php if(count($_items)): ?>
<p class="block-subtitle"><?php echo $this->__('Recently added item(s)') ?></p>
<ol id="cart-sidebar" class="mini-products-list">
<?php foreach($_items as $_item): ?>
<?php echo $this->getItemHtml($_item) ?>
<?php endforeach; ?>
</ol>
<script type="text/javascript">decorateList('cart-sidebar', 'none-recursive')</script>
<?php else: ?>
<p class="empty"><?php echo $this->__('You have no items in your shopping cart.') ?></p>
<?php endif ?>
</div>
</div>
<?php endif;?>
If you make cart siderbar block as
child block of magento default processbar which is in rwd theme then it is be automatically update as each step of checkout Onepage.
So, you need to change the reference name right (<reference name="right">
) to checkout.progress <reference name="checkout.progress">
Code:
<checkout_onepage_index>
<reference name="checkout.progress"> <!--change the right to checkout.progress -->
.....
</block>
</reference>
</checkout_onepage_index>
And add echo $this->getChildHtml('cart_sidebar_checkout')
code at checkout/onepage/progress.phtml
.
If process bar is working but cartsidebar is not render then you need to add xml code at checkout.xml
as on right reference of checkout_onepage_index
handler, Magento was doing unset all child blocks using:
<action method="unsetChildren"></action>
And also call this checkout sidber at checkout_onepage_progress
handler.
<checkout_onepage_progress>
<reference name="root">
<block type="checkout/cart_sidebar" name="cart_sidebar_checkout" template="checkout/cart/minicart/items.phtml" >
<action method="addItemRender">
<type>simple</type>
<block>checkout/cart_item_renderer</block>
<template>checkout/cart/sidebar/default.phtml</template>
</action>
<action method="addItemRender">
<type>grouped</type>
<block>checkout/cart_item_renderer_grouped</block>
<template>checkout/cart/sidebar/default.phtml</template>
</action>
<action method="addItemRender">
<type>configurable</type>
<block>checkout/cart_item_renderer_configurable</block>
<template>checkout/cart/sidebar/default.phtml</template>
</action>
</block>
</reference>
</checkout_onepage_progress>
Best Answer
When I wanted to show the cart on the sidebar, my first instinct was to use the existing
checkout/cart_sidebar
block in Magento, but I have found a better solution which uses thecheckout/onepage_review_info
block instead.Here's what it looks like:
Just add this to your local.xml: