mdusamaansari Posted May 13, 2014 Share Posted May 13, 2014 Hi Techies, I am in need of creating two page checkout for my client. Nowadays many payment gateway providers need two page checkout. How can I create two page checkout instead of one or five page checkout. Please help me in this regard, Thanks in advance. Mohammed Link to comment Share on other sites More sharing options...
vekia Posted May 13, 2014 Share Posted May 13, 2014 you can turn on "one page checkout" preferences > general there is a dropdown with "order process type" form dropdown select second option "one page checkout" Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 13, 2014 Author Share Posted May 13, 2014 I have enabled one page checkout. But I need two pages instead of one page checkout. Link to comment Share on other sites More sharing options...
vekia Posted May 13, 2014 Share Posted May 13, 2014 in this case i can't help, this kind of feature needs a lot of customization in order process classes and controllers. a lot of. Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 14, 2014 Author Share Posted May 14, 2014 Is it possible to create it as a new module, instead of making changes on core? Link to comment Share on other sites More sharing options...
vekia Posted May 14, 2014 Share Posted May 14, 2014 it's possible, but in fact, this module will contain a lot of overrides related to order process, so instead of module, you can just override controllers and classes, and also theme files. unfortunately. Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 26, 2014 Author Share Posted May 26, 2014 (edited) Hi vekia, What is the best way to get this done, I have two images. I have attached images for two pages, Please look at these images and give me idea to get this done. Which mode can be altered, one-page or standard mode, or can I create a new mode to get this done. I am totally confused. Please help me out. I am using PS 1.5.4.1 Thanks in advance. Edited May 26, 2014 by mdusamaansari (see edit history) Link to comment Share on other sites More sharing options...
NemoPS Posted May 26, 2014 Share Posted May 26, 2014 Uhm..."this done"...what exactly? Are you referring to the customization mentioned above? If so, as vekia stated, it's not possible to guide you here as it involves a whole lot of customizations Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 27, 2014 Author Share Posted May 27, 2014 I have made few changes on it. I have customized one-page checkout controller as I need. I herewith pasting my controller code. <?php /* * 2007-2013 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: * http://opensource.org/licenses/osl-3.0.php * 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-2013 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class OrderOpcControllerCore extends ParentOrderController { public $php_self = 'order-opc'; public $isLogged; public $step; /** * Initialize order opc controller * @see FrontController::init() */ public function init() { parent::init(); $this->step = (int)(Tools::getValue('step')); //if (!$this->nbProducts) //$this->step = -1; if ($this->nbProducts) $this->context->smarty->assign('virtual_cart', false); $this->context->smarty->assign('is_multi_address_delivery', $this->context->cart->isMultiAddressDelivery() || ((int)Tools::getValue('multi-shipping') == 1)); $this->context->smarty->assign('open_multishipping_fancybox', (int)Tools::getValue('multi-shipping') == 1); if ($this->context->cart->nbProducts()) { if (Tools::isSubmit('ajax')) { if (Tools::isSubmit('method')) { switch (Tools::getValue('method')) { case 'updateMessage': if (Tools::isSubmit('message')) { $txtMessage = urldecode(Tools::getValue('message')); $this->_updateMessage($txtMessage); if (count($this->errors)) die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}'); die(true); } break; case 'updateCarrierAndGetPayments': if ((Tools::isSubmit('delivery_option') || Tools::isSubmit('id_carrier')) && Tools::isSubmit('recyclable') && Tools::isSubmit('gift') && Tools::isSubmit('gift_message')) { $this->_assignWrappingAndTOS(); if ($this->_processCarrier()) { //my code, I need to display my custom tpl file when I click Carrier submit button. $this->setTemplate(_PS_THEME_DIR_.'order-opc-step.tpl'); $carriers = $this->context->cart->simulateCarriersOutput(); $return = array_merge(array( 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'carrier_data' => $this->_getCarrierList(), 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array('carriers' => $carriers)) ), $this->getFormatedSummaryDetail() ); Cart::addExtraCarriers($return); die(Tools::jsonEncode($return)); } else $this->errors[] = Tools::displayError('An error occurred while updating the cart.'); if (count($this->errors)) die('{"hasError" : true, "errors" : ["'.implode('\',\'', $this->errors).'"]}'); exit; } break; case 'updateTOSStatusAndGetPayments': if (Tools::isSubmit('checked')) { $this->context->cookie->checkedTOS = (int)(Tools::getValue('checked')); die(Tools::jsonEncode(array( 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods() ))); } break; case 'getCarrierList': die(Tools::jsonEncode($this->_getCarrierList())); break; case 'editCustomer': if (!$this->isLogged) exit; if (Tools::getValue('years')) $this->context->customer->birthday = (int)Tools::getValue('years').'-'.(int)Tools::getValue('months').'-'.(int)Tools::getValue('days'); $_POST['lastname'] = $_POST['customer_lastname']; $_POST['firstname'] = $_POST['customer_firstname']; $this->errors = $this->context->customer->validateController(); $this->context->customer->newsletter = (int)Tools::isSubmit('newsletter'); $this->context->customer->optin = (int)Tools::isSubmit('optin'); $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'id_customer' => (int)$this->context->customer->id, 'token' => Tools::getToken(false) ); if (!count($this->errors)) $return['isSaved'] = (bool)$this->context->customer->update(); else $return['isSaved'] = false; die(Tools::jsonEncode($return)); break; case 'getAddressBlockAndCarriersAndPayments': if ($this->context->customer->isLogged()) { // check if customer have addresses if (!Customer::getAddressesTotalById($this->context->customer->id)) die(Tools::jsonEncode(array('no_address' => 1))); if (file_exists(_PS_MODULE_DIR_.'blockuserinfo/blockuserinfo.php')) { include_once(_PS_MODULE_DIR_.'blockuserinfo/blockuserinfo.php'); $blockUserInfo = new BlockUserInfo(); } $this->context->smarty->assign('isVirtualCart', $this->context->cart->isVirtualCart()); $this->_processAddressFormat(); $this->_assignAddress(); // Wrapping fees $wrapping_fees = $this->context->cart->getGiftWrappingPrice(false); $wrapping_fees_tax_inc = $wrapping_fees = $this->context->cart->getGiftWrappingPrice(); $return = array_merge(array( 'order_opc_adress' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-address.tpl'), 'block_user_info' => (isset($blockUserInfo) ? $blockUserInfo->hookTop(array()) : ''), 'carrier_data' => $this->_getCarrierList(), 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'no_address' => 0, 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)($this->context->cookie->id_currency)))) ), $this->getFormatedSummaryDetail() ); die(Tools::jsonEncode($return)); } die(Tools::displayError()); break; case 'makeFreeOrder': /* Bypass payment step if total is 0 */ if (($id_order = $this->_checkFreeOrder()) && $id_order) { $order = new Order((int)$id_order); $email = $this->context->customer->email; if ($this->context->customer->is_guest) $this->context->customer->logout(); // If guest we clear the cookie for security reason die('freeorder:'.$order->reference.':'.$email); } exit; break; case 'updateAddressesSelected': if ($this->context->customer->isLogged(true)) { $address_delivery = new Address((int)(Tools::getValue('id_address_delivery'))); $this->context->smarty->assign('isVirtualCart', $this->context->cart->isVirtualCart()); $address_invoice = ((int)(Tools::getValue('id_address_delivery')) == (int)(Tools::getValue('id_address_invoice')) ? $address_delivery : new Address((int)(Tools::getValue('id_address_invoice')))); if ($address_delivery->id_customer != $this->context->customer->id || $address_invoice->id_customer != $this->context->customer->id) $this->errors[] = Tools::displayError('This address is not yours.'); elseif (!Address::isCountryActiveById((int)(Tools::getValue('id_address_delivery')))) $this->errors[] = Tools::displayError('This address is not in a valid area.'); elseif (!Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted) $this->errors[] = Tools::displayError('This address is invalid.'); else { $this->context->cart->id_address_delivery = (int)(Tools::getValue('id_address_delivery')); $this->context->cart->id_address_invoice = Tools::isSubmit('same') ? $this->context->cart->id_address_delivery : (int)(Tools::getValue('id_address_invoice')); if (!$this->context->cart->update()) $this->errors[] = Tools::displayError('An error occurred while updating your cart.'); $infos = Address::getCountryAndState((int)($this->context->cart->id_address_delivery)); if (isset($infos['id_country']) && $infos['id_country']) { $country = new Country((int)$infos['id_country']); $this->context->country = $country; } // Address has changed, so we check if the cart rules still apply CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); if (!$this->context->cart->isMultiAddressDelivery()) $this->context->cart->setNoMultishipping(); // As the cart is no multishipping, set each delivery address lines with the main delivery address if (!count($this->errors)) { $result = $this->_getCarrierList(); // Wrapping fees $wrapping_fees = $this->context->cart->getGiftWrappingPrice(false); $wrapping_fees_tax_inc = $wrapping_fees = $this->context->cart->getGiftWrappingPrice(); $result = array_merge($result, array( 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)($this->context->cookie->id_currency)))), 'carrier_data' => $this->_getCarrierList()), $this->getFormatedSummaryDetail() ); die(Tools::jsonEncode($result)); } } if (count($this->errors)) die(Tools::jsonEncode(array( 'hasError' => true, 'errors' => $this->errors ))); } die(Tools::displayError()); break; case 'multishipping': $this->_assignSummaryInformations(); $this->context->smarty->assign('product_list', $this->context->cart->getProducts()); if ($this->context->customer->id) $this->context->smarty->assign('address_list', $this->context->customer->getAddresses($this->context->language->id)); else $this->context->smarty->assign('address_list', array()); $this->setTemplate(_PS_THEME_DIR_.'order-address-multishipping-products.tpl'); $this->display(); die(); break; case 'cartReload': $this->_assignSummaryInformations(); if ($this->context->customer->id) $this->context->smarty->assign('address_list', $this->context->customer->getAddresses($this->context->language->id)); else $this->context->smarty->assign('address_list', array()); $this->context->smarty->assign('opc', true); $this->setTemplate(_PS_THEME_DIR_.'shopping-cart.tpl'); $this->display(); die(); break; case 'noMultiAddressDelivery': $this->context->cart->setNoMultishipping(); die(); break; default: throw new PrestaShopException('Unknown method "'.Tools::getValue('method').'"'); } } else throw new PrestaShopException('Method is not defined'); } } elseif (Tools::isSubmit('ajax')) throw new PrestaShopException('Method is not defined'); } public function setMedia() { parent::setMedia(); if ($this->context->getMobileDevice() == false) { // Adding CSS style sheet $this->addCSS(_THEME_CSS_DIR_.'order-opc.css'); // Adding JS files $this->addJS(_THEME_JS_DIR_.'order-opc.js'); $this->addJqueryPlugin('scrollTo'); } else $this->addJS(_THEME_MOBILE_JS_DIR_.'opc.js'); $this->addJS(_THEME_JS_DIR_.'tools/statesManagement.js'); } /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); /* id_carrier is not defined in database before choosing a carrier, set it to a default one to match a potential cart _rule */ if (empty($this->context->cart->id_carrier)) { $checked = $this->context->cart->simulateCarrierSelectedOutput(); $checked = ((int)Cart::desintifier($checked)); $this->context->cart->id_carrier = $checked; $this->context->cart->update(); CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); } // SHOPPING CART $this->_assignSummaryInformations(); // WRAPPING AND TOS $this->_assignWrappingAndTOS(); $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT')); if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true); else $countries = Country::getCountries($this->context->language->id, true); // If a rule offer free-shipping, force hidding shipping prices $free_shipping = false; foreach ($this->context->cart->getCartRules() as $rule) if ($rule['free_shipping'] && !$rule['carrier_restriction']) { $free_shipping = true; break; } $this->context->smarty->assign(array( 'free_shipping' => $free_shipping, 'isGuest' => isset($this->context->cookie->is_guest) ? $this->context->cookie->is_guest : 0, 'countries' => $countries, 'sl_country' => isset($selectedCountry) ? $selectedCountry : 0, 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), 'errorCarrier' => Tools::displayError('You must choose a carrier.', false), 'errorTOS' => Tools::displayError('You must accept the Terms of Service.', false), 'isPaymentStep' => (bool)(isset($_GET['isPaymentStep']) && $_GET['isPaymentStep']), 'genders' => Gender::getGenders(), 'one_phone_at_least' => (int)Configuration::get('PS_ONE_PHONE_AT_LEAST'), 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop') )); $years = Tools::dateYears(); $months = Tools::dateMonths(); $days = Tools::dateDays(); $this->context->smarty->assign(array( 'years' => $years, 'months' => $months, 'days' => $days, )); /* Load guest informations */ if ($this->isLogged && $this->context->cookie->is_guest) $this->context->smarty->assign('guestInformations', $this->_getGuestInformations()); // ADDRESS if ($this->isLogged) $this->_assignAddress(); // CARRIER $this->_assignCarrier(); // PAYMENT $this->_assignPayment(); Tools::safePostVars(); $blocknewsletter = Module::getInstanceByName('blocknewsletter'); $this->context->smarty->assign('newsletter', (bool)($blocknewsletter && $blocknewsletter->active)); $this->_processAddressFormat(); $this->setTemplate(_PS_THEME_DIR_.'order-opc.tpl'); } protected function _getGuestInformations() { $customer = $this->context->customer; $address_delivery = new Address($this->context->cart->id_address_delivery); if ($customer->birthday) $birthday = explode('-', $customer->birthday); else $birthday = array('0', '0', '0'); return array( 'id_customer' => (int)$customer->id, 'email' => Tools::htmlentitiesUTF8($customer->email), 'customer_lastname' => Tools::htmlentitiesUTF8($customer->lastname), 'customer_firstname' => Tools::htmlentitiesUTF8($customer->firstname), 'newsletter' => (int)$customer->newsletter, 'optin' => (int)$customer->optin, 'id_address_delivery' => (int)$this->context->cart->id_address_delivery, 'company' => Tools::htmlentitiesUTF8($address_delivery->company), 'lastname' => Tools::htmlentitiesUTF8($address_delivery->lastname), 'firstname' => Tools::htmlentitiesUTF8($address_delivery->firstname), 'vat_number' => Tools::htmlentitiesUTF8($address_delivery->vat_number), 'dni' => Tools::htmlentitiesUTF8($address_delivery->dni), 'address1' => Tools::htmlentitiesUTF8($address_delivery->address1), 'postcode' => Tools::htmlentitiesUTF8($address_delivery->postcode), 'city' => Tools::htmlentitiesUTF8($address_delivery->city), 'phone' => Tools::htmlentitiesUTF8($address_delivery->phone), 'phone_mobile' => Tools::htmlentitiesUTF8($address_delivery->phone_mobile), 'id_country' => (int)($address_delivery->id_country), 'id_state' => (int)($address_delivery->id_state), 'id_gender' => (int)$customer->id_gender, 'sl_year' => $birthday[0], 'sl_month' => $birthday[1], 'sl_day' => $birthday[2] ); } protected function _assignCarrier() { if (!$this->isLogged) { $carriers = $this->context->cart->simulateCarriersOutput(); $oldMessage = Message::getMessageByCartId((int)($this->context->cart->id)); $this->context->smarty->assign(array( 'HOOK_EXTRACARRIER' => null, 'HOOK_EXTRACARRIER_ADDR' => null, 'oldMessage' => isset($oldMessage['message'])? $oldMessage['message'] : '', 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array( 'carriers' => $carriers, 'checked' => $this->context->cart->simulateCarrierSelectedOutput(), 'delivery_option_list' => $this->context->cart->getDeliveryOptionList(), 'delivery_option' => $this->context->cart->getDeliveryOption(null, true) )) )); } else parent::_assignCarrier(); } protected function _assignPayment() { $this->context->smarty->assign(array( 'HOOK_TOP_PAYMENT' => ($this->isLogged ? Hook::exec('displayPaymentTop') : ''), 'HOOK_PAYMENT' => $this->_getPaymentMethods() )); } protected function _getPaymentMethods() { if (!$this->isLogged) return '<p class="warning">'.Tools::displayError('Please sign in to see payment methods.').'</p>'; if ($this->context->cart->OrderExists()) return '<p class="warning">'.Tools::displayError('Error: This order has already been validated.').'</p>'; if (!$this->context->cart->id_customer || !Customer::customerIdExistsStatic($this->context->cart->id_customer) || Customer::isBanned($this->context->cart->id_customer)) return '<p class="warning">'.Tools::displayError('Error: No customer.').'</p>'; $address_delivery = new Address($this->context->cart->id_address_delivery); $address_invoice = ($this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice ? $address_delivery : new Address($this->context->cart->id_address_invoice)); if (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice || !Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted) return '<p class="warning">'.Tools::displayError('Error: Please select an address.').'</p>'; if (count($this->context->cart->getDeliveryOptionList()) == 0 && !$this->context->cart->isVirtualCart()) { if ($this->context->cart->isMultiAddressDelivery()) return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to some of the addresses you\'ve selected.').'</p>'; else return '<p class="warning">'.Tools::displayError('Error: None of your chosen carriers deliver to the address you\'ve selected.').'</p>'; } if (!$this->context->cart->getDeliveryOption(null, false) && !$this->context->cart->isVirtualCart()) return '<p class="warning">'.Tools::displayError('Error: Please choose a carrier.').'</p>'; if (!$this->context->cart->id_currency) return '<p class="warning">'.Tools::displayError('Error: No currency has been selected.').'</p>'; if (!$this->context->cookie->checkedTOS && Configuration::get('PS_CONDITIONS')) return '<p class="warning">'.Tools::displayError('Please accept the Terms of Service.').'</p>'; /* If some products have disappear */ if (!$this->context->cart->checkQuantities()) return '<p class="warning">'.Tools::displayError('An item in your cart is no longer available. You cannot proceed with your order.').'</p>'; /* Check minimal amount */ $currency = Currency::getCurrency((int)$this->context->cart->id_currency); $minimalPurchase = Tools::convertPrice((float)Configuration::get('PS_PURCHASE_MINIMUM'), $currency); if ($this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase) return '<p class="warning">'.sprintf( Tools::displayError('A minimum purchase total of %s is required in order to validate your order.'), Tools::displayPrice($minimalPurchase, $currency) ).'</p>'; /* Bypass payment step if total is 0 */ if ($this->context->cart->getOrderTotal() <= 0) return '<p class="center"><input type="button" class="exclusive_large" name="confirmOrder" id="confirmOrder" value="'.Tools::displayError('I confirm my order.').'" onclick="confirmFreeOrder();" /></p>'; $return = Hook::exec('displayPayment'); if (!$return) return '<p class="warning">'.Tools::displayError('No payment method is available for use at this time. ').'</p>'; return $return; } protected function _getCarrierList() { $address_delivery = new Address($this->context->cart->id_address_delivery); $cms = new CMS(Configuration::get('PS_CONDITIONS_CMS_ID'), $this->context->language->id); $link_conditions = $this->context->link->getCMSLink($cms, $cms->link_rewrite, true); if (!strpos($link_conditions, '?')) $link_conditions .= '?content_only=1'; else $link_conditions .= '&content_only=1'; $carriers = $this->context->cart->simulateCarriersOutput(); $delivery_option = $this->context->cart->getDeliveryOption(null, false, false); $wrapping_fees = $this->context->cart->getGiftWrappingPrice(false); $wrapping_fees_tax_inc = $wrapping_fees = $this->context->cart->getGiftWrappingPrice(); $oldMessage = Message::getMessageByCartId((int)($this->context->cart->id)); $free_shipping = false; foreach ($this->context->cart->getCartRules() as $rule) { if ($rule['free_shipping'] && !$rule['carrier_restriction']) { $free_shipping = true; break; } } $vars = array( 'free_shipping' => $free_shipping, 'checkedTOS' => (int)($this->context->cookie->checkedTOS), 'recyclablePackAllowed' => (int)(Configuration::get('PS_RECYCLABLE_PACK')), 'giftAllowed' => (int)(Configuration::get('PS_GIFT_WRAPPING')), 'cms_id' => (int)(Configuration::get('PS_CONDITIONS_CMS_ID')), 'conditions' => (int)(Configuration::get('PS_CONDITIONS')), 'link_conditions' => $link_conditions, 'recyclable' => (int)($this->context->cart->recyclable), 'gift_wrapping_price' => (float)$wrapping_fees, 'total_wrapping_cost' => Tools::convertPrice($wrapping_fees_tax_inc, $this->context->currency), 'total_wrapping_tax_exc_cost' => Tools::convertPrice($wrapping_fees, $this->context->currency), 'delivery_option_list' => $this->context->cart->getDeliveryOptionList(), 'carriers' => $carriers, 'checked' => $this->context->cart->simulateCarrierSelectedOutput(), 'delivery_option' => $delivery_option, 'address_collection' => $this->context->cart->getAddressCollection(), 'opc' => true, 'oldMessage' => isset($oldMessage['message'])? $oldMessage['message'] : '', 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array( 'carriers' => $carriers, 'delivery_option_list' => $this->context->cart->getDeliveryOptionList(), 'delivery_option' => $delivery_option )) ); Cart::addExtraCarriers($vars); $this->context->smarty->assign($vars); if (!Address::isCountryActiveById((int)($this->context->cart->id_address_delivery)) && $this->context->cart->id_address_delivery != 0) $this->errors[] = Tools::displayError('This address is not in a valid area.'); elseif ((!Validate::isLoadedObject($address_delivery) || $address_delivery->deleted) && $this->context->cart->id_address_delivery != 0) $this->errors[] = Tools::displayError('This address is invalid.'); else { $result = array( 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array( 'carriers' => $carriers, 'delivery_option_list' => $this->context->cart->getDeliveryOptionList(), 'delivery_option' => $this->context->cart->getDeliveryOption(null, true) )), 'carrier_block' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-carrier.tpl') ); Cart::addExtraCarriers($result); return $result; } if (count($this->errors)) return array( 'hasError' => true, 'errors' => $this->errors, 'carrier_block' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-carrier.tpl') ); } protected function _processAddressFormat() { $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT')); $address_delivery = new Address((int)$this->context->cart->id_address_delivery); $address_invoice = new Address((int)$this->context->cart->id_address_invoice); $inv_adr_fields = AddressFormat::getOrderedAddressFields((int)$address_delivery->id_country, false, true); $dlv_adr_fields = AddressFormat::getOrderedAddressFields((int)$address_invoice->id_country, false, true); $inv_all_fields = array(); $dlv_all_fields = array(); foreach (array('inv', 'dlv') as $adr_type) { foreach (${$adr_type.'_adr_fields'} as $fields_line) foreach (explode(' ', $fields_line) as $field_item) ${$adr_type.'_all_fields'}[] = trim($field_item); $this->context->smarty->assign($adr_type.'_adr_fields', ${$adr_type.'_adr_fields'}); $this->context->smarty->assign($adr_type.'_all_fields', ${$adr_type.'_all_fields'}); } } protected function getFormatedSummaryDetail() { $result = array('summary' => $this->context->cart->getSummaryDetails(), 'customizedDatas' => Product::getAllCustomizedDatas($this->context->cart->id, null, true)); foreach ($result['summary']['products'] as $key => &$product) { $product['quantity_without_customization'] = $product['quantity']; if ($result['customizedDatas']) { if (isset($result['customizedDatas'][(int)$product['id_product']][(int)$product['id_product_attribute']])) foreach ($result['customizedDatas'][(int)$product['id_product']][(int)$product['id_product_attribute']] as $addresses) foreach ($addresses as $customization) $product['quantity_without_customization'] -= (int)$customization['quantity']; } } if ($result['customizedDatas']) Product::addCustomizationPrice($result['summary']['products'], $result['customizedDatas']); return $result; } } Here is my order-carrier.tpl file. {* * 2007-2013 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 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: * http://opensource.org/licenses/afl-3.0.php * 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-2013 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {if !$opc} <script type="text/javascript"> //<![CDATA[ var orderProcess = 'order'; var currencySign = '{$currencySign|html_entity_decode:2:"UTF-8"}'; var currencyRate = '{$currencyRate|floatval}'; var currencyFormat = '{$currencyFormat|intval}'; var currencyBlank = '{$currencyBlank|intval}'; var txtProduct = "{l s='Product' js=1}"; var txtProducts = "{l s='Products' js=1}"; var orderUrl = '{$link->getPageLink("order", true)|addslashes}'; var msg = "{l s='You must agree to the terms of service before continuing.' js=1}"; {literal} function acceptCGV() { if ($('#cgv').length && !$('input#cgv:checked').length) { alert(msg); return false; } else return true; } {/literal} //]]> </script> {else} <script type="text/javascript"> var txtFree = "{l s='Free'}"; </script> {/if} {if isset($virtual_cart) && !$virtual_cart && $giftAllowed && $cart->gift == 1} <script type="text/javascript"> {literal} // <![CDATA[ $('document').ready( function(){ if ($('input#gift').is(':checked')) $('p#gift_div').show(); }); //]]> {/literal} </script> {/if} {if !$opc} {capture name=path}{l s='Shipping:'}{/capture} {/if} {if !$opc} <div id="carrier_area"> {else} <div id="carrier_area" class="opc-main-block"> {/if} {if !$opc} <h1>{l s='Shipping'}</h1> {else} <!--<h2><span>2</span> {l s='Delivery methods'}</h2>--> {/if} {if !$opc} {assign var='current_step' value='shipping'} {include file="$tpl_dir./order-steps.tpl"} {include file="$tpl_dir./errors.tpl"} <form id="form" action="{$link->getPageLink('order', true, NULL, "multi-shipping={$multi_shipping}")|escape:'html'}" method="post" onsubmit="return acceptCGV();"> {else} <div id="opc_delivery_methods" class="opc-main-block"> <div id="opc_delivery_methods-overlay" class="opc-overlay" style="display: none;"></div> {/if} <div class="order_carrier_content"> {if isset($virtual_cart) && $virtual_cart} <input id="input_virtual_carrier" class="hidden" type="hidden" name="id_carrier" value="0" /> {else} <!--<h3 class="carrier_title">{l s='Choose your delivery method'}</h3>--> {if $conditions AND $cms_id} <!--<h3 class="condition_title">{l s='Terms of service'}</h3>--> <p class="checkbox-new"> <label for="cgv">{l s='By this purchase, I agree unikmobils'} <a href="{$link_conditions}" class="iframe"><u>{l s='terms and conditions'}</u></a></label> <input type="checkbox" name="cgv" id="cgv" value="1" {if $checkedTOS}checked="checked"{/if} autocomplete="off"/> </p> <script type="text/javascript"> $(document).ready(function() { $("a.iframe").fancybox({ 'type' : 'iframe', 'width':600, 'height':600 }); }); </script> {/if} <div id="HOOK_BEFORECARRIER"> {if isset($carriers) && isset($HOOK_BEFORECARRIER)} {$HOOK_BEFORECARRIER} {/if} </div> {if isset($isVirtualCart) && $isVirtualCart} <p class="warning">{l s='No carrier is needed for this order.'}</p> {else} {if $recyclablePackAllowed} <p class="checkbox"> <input type="checkbox" name="recyclable" id="recyclable" value="1" {if $recyclable == 1}checked="checked"{/if} autocomplete="off"/> <label for="recyclable">{l s='I would like to receive my order in recycled packaging.'}.</label> </p> {/if} <div class="delivery_options_address"> {if isset($delivery_option_list)} {foreach $delivery_option_list as $id_address => $option_list} <h3> {if isset($address_collection[$id_address])} {l s='Choose a shipping option for this address:'} {$address_collection[$id_address]->alias} {else} {l s='Choose a shipping option'} {/if} </h3> <div class="delivery_options"> {foreach $option_list as $key => $option} <div class="delivery_option {if ($option@index % 2)}alternate_{/if}item"> <label for="delivery_option_{$id_address}_{$option@index}"> <table class="resume" style="width: 100%;"> <tr> <td class="delivery_option_logo"> {foreach $option.carrier_list as $carrier} {if $carrier.logo} <img src="{$carrier.logo}" alt="{$carrier.instance->name}"/> {else if !$option.unique_carrier} {$carrier.instance->name} {if !$carrier@last} - {/if} {/if} {/foreach} </td> <td> {if $option.unique_carrier} {foreach $option.carrier_list as $carrier} <div class="delivery_option_title">{$carrier.instance->name}</div> {/foreach} {if isset($carrier.instance->delay[$cookie->id_lang])} <div class="delivery_option_delay">{$carrier.instance->delay[$cookie->id_lang]}</div> {/if} {/if} {if count($option_list) > 1} {if $option.is_best_grade} {if $option.is_best_price} <div class="delivery_option_best delivery_option_icon">{l s='The best price and speed'}</div> {else} <div class="delivery_option_fast delivery_option_icon">{l s='The fastest'}</div> {/if} {else} {if $option.is_best_price} <div class="delivery_option_best_price delivery_option_icon">{l s='The best price'}</div> {/if} {/if} {/if} </td> <td> <div class="delivery_option_price"><strong> {if $option.total_price_with_tax && (!isset($free_shipping) || (isset($free_shipping) && !$free_shipping))} {if $use_taxes == 1} {convertPrice price=$option.total_price_with_tax} {l s='(tax incl.)'} {else} {convertPrice price=$option.total_price_without_tax} {l s='(tax excl.)'} {/if} {else} {l s='Free'} {/if} </strong> </div> </td> <td> // Here is my code when I submit input named "processCarrier", a set of tpl file to be loaded. <input class="delivery_option_radio" type="radio" name="delivery_option[{$id_address}]" onclick="{$link->getPageLink('order-tpc', true, NULL, 'step=2')}" onchange="{if $opc}updateCarrierSelectionAndGift();{else}updateExtraCarrier('{$key}', {$id_address});{/if}" id="delivery_option_{$id_address}_{$option@index}" value="{$key}" /><input type="hidden" name="cart-final" value="1" /><input type="submit" name="processCarrier" value="{l s='SELECT TO PROCEED'}" class="exclusive-uk" /> </td> </tr> </table> <table class="delivery_option_carrier {if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key}selected{/if} {if $option.unique_carrier}not-displayable{/if}"> {foreach $option.carrier_list as $carrier} <tr> {if !$option.unique_carrier} <td class="first_item"> <input type="hidden" value="{$carrier.instance->id}" name="id_carrier" /> {if $carrier.logo} <img src="{$carrier.logo}" alt="{$carrier.instance->name}"/> {/if} </td> <td> {$carrier.instance->name} </td> {/if} <td {if $option.unique_carrier}class="first_item" colspan="2"{/if}> <input type="hidden" value="{$carrier.instance->id}" name="id_carrier" /> {if isset($carrier.instance->delay[$cookie->id_lang])} {$carrier.instance->delay[$cookie->id_lang]}<br /> {if count($carrier.product_list) <= 1} ({l s='Product concerned:'} {else} ({l s='Products concerned:'} {/if} {* This foreach is on one line, to avoid tabulation in the title attribute of the acronym *} {foreach $carrier.product_list as $product} {if $product@index == 4}<acronym title="{/if}{if $product@index >= 4}{$product.name}{if !$product@last}, {else}">...</acronym>){/if}{else}{$product.name}{if !$product@last}, {else}){/if}{/if}{/foreach} {/if} </td> </tr> {/foreach} </table> </label> </div> {/foreach} </div> <div class="hook_extracarrier" id="HOOK_EXTRACARRIER_{$id_address}">{if isset($HOOK_EXTRACARRIER_ADDR) && isset($HOOK_EXTRACARRIER_ADDR.$id_address)}{$HOOK_EXTRACARRIER_ADDR.$id_address}{/if}</div> {foreachelse} <p class="warning" id="noCarrierWarning"> {foreach $cart->getDeliveryAddressesWithoutCarriers(true) as $address} {if empty($address->alias)} {l s='No carriers available.'} {else} {l s='No carriers available for the address "%s".' sprintf=$address->alias} {/if} {if !$address@last} <br /> {/if} {foreachelse} {l s='No carriers available.'} {/foreach} </p> {/foreach} {/if} </div> <div style="display: none;" id="extra_carrier"></div> {if $giftAllowed} <h3 class="gift_title">{l s='Gift'}</h3> <p class="checkbox"> <input type="checkbox" name="gift" id="gift" value="1" {if $cart->gift == 1}checked="checked"{/if} autocomplete="off"/> <label for="gift">{l s='I would like my order to be gift wrapped.'}</label> <br /> {if $gift_wrapping_price > 0} ({l s='Additional cost of'} <span class="price" id="gift-price"> {if $priceDisplay == 1}{convertPrice price=$total_wrapping_tax_exc_cost}{else}{convertPrice price=$total_wrapping_cost}{/if} </span> {if $use_taxes}{if $priceDisplay == 1} {l s='(tax excl.)'}{else} {l s='(tax incl.)'}{/if}{/if}) {/if} </p> <p id="gift_div" class="textarea"> <label for="gift_message">{l s='If you\'d like, you can add a note to the gift:'}</label> <textarea rows="5" cols="35" id="gift_message" name="gift_message">{$cart->gift_message|escape:'htmlall':'UTF-8'}</textarea> </p> {/if} {/if} {/if} </div> {if !$opc} <p class="cart_navigation submit"> <input type="hidden" name="step" value="3" /> <input type="hidden" name="back" value="{$back}" /> {if !$is_guest} {if $back} <a href="{$link->getPageLink('order', true, NULL, "step=1&back={$back}&multi-shipping={$multi_shipping}")|escape:'html'}" title="{l s='Previous'}" class="button">« {l s='Previous'}</a> {else} <a href="{$link->getPageLink('order', true, NULL, "step=1&multi-shipping={$multi_shipping}")|escape:'html'}" title="{l s='Previous'}" class="button">« {l s='Previous'}</a> {/if} {else} <a href="{$link->getPageLink('order', true, NULL, "multi-shipping={$multi_shipping}")|escape:'html'}" title="{l s='Previous'}" class="button">« {l s='Previous'}</a> {/if} {if isset($virtual_cart) && $virtual_cart || (isset($delivery_option_list) && !empty($delivery_option_list))} <input type="submit" name="processCarrier" value="{l s='Next'} »" class="exclusive" /> {/if} </p> </form> {else} <!--<h3>{l s='Leave a message'}</h3> <div> <p>{l s='If you would like to add a comment about your order, please write it in the field below.'}</p> <p class="opc-comments"><textarea cols="120" rows="3" name="message" id="message" placeholder="If you would like to add a comment about your order, please write it in the field below.">{if isset($oldMessage)}{$oldMessage|escape:'htmlall':'UTF-8'}{/if}</textarea></p> </div>--> </div> {/if} </div> <!--<script type="text/javascript"> $(document).ready(function(){ //togBkEle(); $('#delivery_option_1067_0').on('change', function() { alert('Are you sure?'); if($(this).is(':checked'))togEle(); else togBkEle(); }); $('#delivery_option_1067_1').on('change', function() { alert('Are you sure?'); if($(this).is(':checked'))togEle(); else togBkEle(); }); //toggleFields(); /* $('.delivery_option_radio').on('change', function() { toggleFields(); });*/ }); function togEle() { $('.delivery_options_address').hide(); $('.paiement_block').show(); } function togBkEle() { $('.delivery_options_address').show(); $('.paiement_block').hide(); } function toggleFields() { if ($('#delivery_option_1067_0').is(':checked')) { $('.delivery_options_address').hide(); $('.paiement_block').show(); } if ($('#delivery_option_1067_1').is(':checked')) { $('.delivery_options_address').css('display','none'); $('.paiement_block').css('display','block'); } } </script> --> I have mentioned the my code in files with commented lines. Please help me into this. Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 27, 2014 Author Share Posted May 27, 2014 (edited) Hi Techies, I simple words, I am using only two files OrderOpcController.php and order-carrier.tpl. I have submit button in tpl file. When I submit the button, the order-opc-step.tpl(Custom) file to be displayed instead of order-opc.tpl. How can I get it done. Please give me a hint. Edited May 27, 2014 by mdusamaansari (see edit history) Link to comment Share on other sites More sharing options...
mdusamaansari Posted May 27, 2014 Author Share Posted May 27, 2014 Hi Techies, I need a condition in my order-opc.tpl file. if url is "http://example.com/index.php?controller=order-opc" { certain set of tpl files to be loaded } if url is "http://example.com/index.php?controller=order-opc&step=2" { another set of tpl files to be loaded } Please help me to this issue. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now