Jump to content

[SOLVED] show cart_summary in all checkout steps


Recommended Posts

Hello, 

 

I mentioned that by default PS shows cart_summary only in 1st & last step of checkout process.

I would like to show cart_summary in all steps. I tried to just copy the code between Shopping Cart Start & End tag from file shopping-cart.tpl in the rest steps (eg order-address.tpl) but this revealed the table without the products name & prices. Any idea why this is caused?

Link to comment
Share on other sites

it's because only shopping cart step has got products variable

you have to pass it to smarty array also to other parts of shopping cart (it's necessary to modify contorllers)

what is your ps verison?

I am working on 1.6.0.8

Can I somehow get to know which controller or even better which classes of a controller is being loaded when a page is loaded? This way I could try to share product variables on the right classes in order to render correctly on other steps.

Edited by HaCos (see edit history)
Link to comment
Share on other sites

 

it's a OrderController.php located in controllers/front/ directory

you can find there SWITCH function with several case values related to order steps

to each of them try to add this:

$this->_assignSummaryInformations();

 

Worked like a charm! 

Thanks!

Link to comment
Share on other sites

  • 3 weeks later...

When a user selects to pay with "COD" or "Pay with Bank Wire", there is an extra step in the checkout process, where client is asked to validate the order. This step seems to be part of the module ( url looks like : .../module/bankwire/payment ) and doesnt work with the solution mentioned above. How can i add Cart summary in the module as well or skip the validation step?

 

Although this thread is mentioned as solved i think its better to be resolved here instead of a new thread,  since is part of the checkout process.

 

Regards,

C

Link to comment
Share on other sites

  • 2 weeks later...

Hello vekia, can u help me?

 

this is code of ordercontroller.php 

 

<?php
/*
* 2007-2011 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2011 PrestaShop SA
*  @version  Release: $Revision: 6823 $
*  @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/
 
ControllerFactory::includeController('ParentOrderController');
 
class OrderControllerCore extends ParentOrderController
{
public $step;
 
public function init()
{
parent::init();
 
$this->step = (int)(Tools::getValue('step'));
if (!$this->nbProducts)
$this->step = -1;
}
 
public function preProcess()
{
global $isVirtualCart, $orderTotal;
 
parent::preProcess();
 
/* If some products have disappear */
if (!self::$cart->checkQuantities())
{
$this->step = 0;
$this->errors[] = Tools::displayError('An item in your cart is no longer available for this quantity, you cannot proceed with your order.');
}
 
/* Check minimal amount */
$currency = Currency::getCurrency((int)self::$cart->id_currency);
 
$orderTotal = self::$cart->getOrderTotal();
$minimalPurchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
if (self::$cart->getOrderTotal(false) < $minimalPurchase && $this->step != -1)
{
$this->step = 0;
$this->errors[] = Tools::displayError('A minimum purchase total of').' '.Tools::displayPrice($minimalPurchase, $currency).
' '.Tools::displayError('is required in order to validate your order.');
}
 
if (!self::$cookie->isLogged(true) AND in_array($this->step, array(1, 2, 3)))
Tools::redirect('authentication.php?back='.urlencode('order.php?step='.$this->step));
 
if ($this->nbProducts)
self::$smarty->assign('virtual_cart', $isVirtualCart);
}
 
public function displayHeader()
{
if (!Tools::getValue('ajax'))
parent::displayHeader();
}
 
public function process()
{
parent::process();
 
/* 4 steps to the order */
switch ((int)$this->step)
{
case -1;
self::$smarty->assign('empty', 1);
break;
case 1:
$this->_assignAddress();
break;
case 2:
if(Tools::isSubmit('processAddress'))
$this->processAddress();
$this->autoStep();
$this->_assignCarrier();
break;
case 3:
//Test that the conditions (so active) were accepted by the customer 
$cgv = Tools::getValue('cgv');
if (Configuration::get('PS_CONDITIONS') AND (!Validate::isBool($cgv)))
Tools::redirect('order.php?step=2');
 
if(Tools::isSubmit('processCarrier'))
$this->processCarrier();
$this->autoStep();
/* Bypass payment step if total is 0 */
if (($id_order = $this->_checkFreeOrder()) AND $id_order)
{
if (self::$cookie->is_guest)
{
$email = self::$cookie->email;
self::$cookie->logout(); // If guest we clear the cookie for security reason
Tools::redirect('guest-tracking.php?id_order='.(int)$id_order.'&email='.urlencode($email));
}
else
Tools::redirect('history.php');
}
$this->_assignPayment();
break;
default:
$this->_assignSummaryInformations();
break;
}
}
 
private function processAddressFormat()
{
$addressDelivery = new Address((int)(self::$cart->id_address_delivery));
$addressInvoice = new Address((int)(self::$cart->id_address_invoice));
 
$invoiceAddressFields = AddressFormat::getOrderedAddressFields($addressInvoice->id_country);
$deliveryAddressFields = AddressFormat::getOrderedAddressFields($addressDelivery->id_country);
 
self::$smarty->assign(array(
'inv_adr_fields' => $invoiceAddressFields,
'dlv_adr_fields' => $deliveryAddressFields));
}
 
public function displayContent()
{
global $currency;
 
parent::displayContent();
 
self::$smarty->assign(array(
'currencySign' => $currency->sign,
'currencyRate' => $currency->conversion_rate,
'currencyFormat' => $currency->format,
'currencyBlank' => $currency->blank,
));
 
switch ((int)$this->step)
{
case -1:
self::$smarty->display(_PS_THEME_DIR_.'shopping-cart.tpl');
break;
case 1:
$this->processAddressFormat();
self::$smarty->display(_PS_THEME_DIR_.'order-address.tpl');
break;
case 2:
self::$smarty->display(_PS_THEME_DIR_.'order-carrier.tpl');
break;
case 3:
self::$smarty->display(_PS_THEME_DIR_.'order-payment.tpl');
break;
default:
self::$smarty->display(_PS_THEME_DIR_.'shopping-cart.tpl');
break;
}
}
 
public function displayFooter()
{
if (!Tools::getValue('ajax'))
parent::displayFooter();
}
 
/* Order process controller */
public function autoStep()
{
global $isVirtualCart;
 
if ($this->step >= 2 AND (!self::$cart->id_address_delivery OR !self::$cart->id_address_invoice))
Tools::redirect('order.php?step=1');
$delivery = new Address((int)(self::$cart->id_address_delivery));
$invoice = new Address((int)(self::$cart->id_address_invoice));
 
if ($delivery->deleted OR $invoice->deleted)
{
if ($delivery->deleted)
unset(self::$cart->id_address_delivery);
if ($invoice->deleted)
unset(self::$cart->id_address_invoice);
Tools::redirect('order.php?step=1');
}
elseif ($this->step >= 3 AND !self::$cart->id_carrier AND !$isVirtualCart)
Tools::redirect('order.php?step=2');
}
 
/*
* Manage address
*/
public function processAddress()
{
if (!Tools::isSubmit('id_address_delivery') OR !Address::isCountryActiveById((int)Tools::getValue('id_address_delivery')))
$this->errors[] = Tools::displayError('This address is not in a valid area.');
else
{
self::$cart->id_address_delivery = (int)(Tools::getValue('id_address_delivery'));
self::$cart->id_address_invoice = Tools::isSubmit('same') ? self::$cart->id_address_delivery : (int)(Tools::getValue('id_address_invoice'));
if (!self::$cart->update())
$this->errors[] = Tools::displayError('An error occurred while updating your cart.');
 
if (Tools::isSubmit('message'))
$this->_updateMessage(Tools::getValue('message'));
}
if (sizeof($this->errors))
{
if (Tools::getValue('ajax'))
die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}');
$this->step = 1;
}
if (Tools::getValue('ajax'))
die(true);
}
 
/* Carrier step */
protected function processCarrier()
{
global $orderTotal;
 
parent::_processCarrier();
 
if (sizeof($this->errors))
{
self::$smarty->assign('errors', $this->errors);
$this->_assignCarrier();
$this->step = 2;
$this->displayContent();
include(dirname(__FILE__).'/../footer.php');
exit;
}
$orderTotal = self::$cart->getOrderTotal();
}
 
/* Address step */
protected function _assignAddress()
{
parent::_assignAddress();
 
self::$smarty->assign('cart', self::$cart);
if (self::$cookie->is_guest)
Tools::redirect('order.php?step=2');
}
 
/* Carrier step */
protected function _assignCarrier()
{
global $defaultCountry;
 
if (isset(self::$cookie->id_customer))
$customer = new Customer((int)(self::$cookie->id_customer));
else
die(Tools::displayError('Fatal error: No customer'));
// Assign carrier
parent::_assignCarrier();
// Assign wrapping and TOS
$this->_assignWrappingAndTOS();
 
self::$smarty->assign('is_guest' ,(isset(self::$cookie->is_guest) ? self::$cookie->is_guest : 0));
}
 
/* Payment step */
protected function _assignPayment()
{
global $orderTotal;
 
// Redirect instead of displaying payment modules if any module are grefted on
Hook::backBeforePayment('order.php?step=3');
 
/* We may need to display an order summary */
self::$smarty->assign(self::$cart->getSummaryDetails());
self::$smarty->assign(array(
'total_price' => (float)($orderTotal),
'taxes_enabled' => (int)(Configuration::get('PS_TAX'))
));
self::$cookie->checkedTOS = '1';
 
parent::_assignPayment();
}
}
 
 
where i enter your suggestion?  ($this->_assignSummaryInformations();)
 
help me please?
Link to comment
Share on other sites

  • 1 year later...

Hi,

 

I've just tried to apply this method to OrderController.php in PS 1.6.1.4.

As suggested by Milos, I added one line  $this->_assignSummaryInformations();   for each set of  case .... break; steps.

It seems isn't working.

Is it possible to paste the SWITCH portion of the OrderController.php with these changes?

 

Thank you,

Alex

  • Thanks 1
Link to comment
Share on other sites

  • 2 years later...
On 9/5/2018 at 5:08 PM, srikumar said:

vekia  you have already solve this problem like 


$this->_assignSummaryInformations();

but i need to diplay in authentication.tpl page but in switch case there is not available , so please help me to solve this problem , 

Capture.PNG

 

Link to comment
Share on other sites

  • 8 months later...

Hello, you put:

$this->_assignSummaryInformations();

just before each step of cart. 

Then I had put in each step (tpl file) of cart, code from cart summary. 

Everything works. 

BUT

How to do it for Sign in step? 

Thank you

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...