Vincent-31 Posted August 17, 2015 Share Posted August 17, 2015 Hi, I have created a new hook called "displayCartInBreadcrumb" in the breadcrumb.tpl to display the link to the cart in every page of the template: <div class="breadcrumb clearfix"> <a href="">{hook h='displayCartInBreadcrumb'}</a> <a class="home" href="{$base_dir}" title="{l s='Return to Home'}">Accueil</a> {if isset($path) AND $path} <span class="navigation-pipe"{if isset($category) && isset($category->id_category) && $category->id_category == 1} style="display:none;"{/if}>{$navigationPipe|escape:'html':'UTF-8'}</span> {if $path|strpos:'span' !== false} <span class="navigation_page">{$path|@replace:'<a ': '<span itemscope itemtype="http://data-vocabulary.org/Breadcrumb"><a itemprop="url" '|@replace:'data-gg="">': '><span itemprop="title">'|@replace:'</a>': '</span></a></span>'}</span> {else} {$path} {/if} {/if} </div> There is the code in blockcart.php: class BlockCart extends Module { public function __construct() { $this->name = 'blockcart'; $this->tab = 'front_office_features'; $this->version = '1.6.0'; $this->author = 'PrestaShop'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Cart block'); $this->description = $this->l('Adds a block containing the customer\'s shopping cart.'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } public function assignContentVars($params) { global $errors; // Set currency if ((int)$params['cart']->id_currency && (int)$params['cart']->id_currency != $this->context->currency->id) $currency = new Currency((int)$params['cart']->id_currency); else $currency = $this->context->currency; $taxCalculationMethod = Group::getPriceDisplayMethod((int)Group::getCurrent()->id); $useTax = !($taxCalculationMethod == PS_TAX_EXC); $products = $params['cart']->getProducts(true); $nbTotalProducts = 0; foreach ($products as $product) $nbTotalProducts += (int)$product['cart_quantity']; $cart_rules = $params['cart']->getCartRules(); if (empty($cart_rules)) $base_shipping = $params['cart']->getOrderTotal($useTax, Cart::ONLY_SHIPPING); else { $base_shipping_with_tax = $params['cart']->getOrderTotal(true, Cart::ONLY_SHIPPING); $base_shipping_without_tax = $params['cart']->getOrderTotal(false, Cart::ONLY_SHIPPING); if ($useTax) $base_shipping = $base_shipping_with_tax; else $base_shipping = $base_shipping_without_tax; } $shipping_cost = Tools::displayPrice($base_shipping, $currency); $shipping_cost_float = Tools::convertPrice($base_shipping, $currency); $wrappingCost = (float)($params['cart']->getOrderTotal($useTax, Cart::ONLY_WRAPPING)); $totalToPay = $params['cart']->getOrderTotal($useTax); if ($useTax && Configuration::get('PS_TAX_DISPLAY') == 1) { $totalToPayWithoutTaxes = $params['cart']->getOrderTotal(false); $this->smarty->assign('tax_cost', Tools::displayPrice($totalToPay - $totalToPayWithoutTaxes, $currency)); } // The cart content is altered for display foreach ($cart_rules as &$cart_rule) { if ($cart_rule['free_shipping']) { $shipping_cost = Tools::displayPrice(0, $currency); $shipping_cost_float = 0; $cart_rule['value_real'] -= Tools::convertPrice($base_shipping_with_tax, $currency); $cart_rule['value_tax_exc'] = Tools::convertPrice($base_shipping_without_tax, $currency); } if ($cart_rule['gift_product']) { foreach ($products as $key => &$product) { if ($product['id_product'] == $cart_rule['gift_product'] && $product['id_product_attribute'] == $cart_rule['gift_product_attribute']) { $product['total_wt'] = Tools::ps_round($product['total_wt'] - $product['price_wt'], (int)$currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $product['total'] = Tools::ps_round($product['total'] - $product['price'], (int)$currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); if ($product['cart_quantity'] > 1) { array_splice($products, $key, 0, array($product)); $products[$key]['cart_quantity'] = $product['cart_quantity'] - 1; $product['cart_quantity'] = 1; } $product['is_gift'] = 1; $cart_rule['value_real'] = Tools::ps_round($cart_rule['value_real'] - $product['price_wt'], (int)$currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); $cart_rule['value_tax_exc'] = Tools::ps_round($cart_rule['value_tax_exc'] - $product['price'], (int)$currency->decimals * _PS_PRICE_DISPLAY_PRECISION_); } } } } $total_free_shipping = 0; if ($free_shipping = Tools::convertPrice(floatval(Configuration::get('PS_SHIPPING_FREE_PRICE')), $currency)) { $total_free_shipping = floatval($free_shipping - ($params['cart']->getOrderTotal(true, Cart::ONLY_PRODUCTS) + $params['cart']->getOrderTotal(true, Cart::ONLY_DISCOUNTS))); $discounts = $params['cart']->getCartRules(CartRule::FILTER_ACTION_SHIPPING); if ($total_free_shipping < 0) $total_free_shipping = 0; if (is_array($discounts) && count($discounts)) $total_free_shipping = 0; } $this->smarty->assign(array( 'products' => $products, 'customizedDatas' => Product::getAllCustomizedDatas((int)($params['cart']->id)), 'CUSTOMIZE_FILE' => Product::CUSTOMIZE_FILE, 'CUSTOMIZE_TEXTFIELD' => Product::CUSTOMIZE_TEXTFIELD, 'discounts' => $cart_rules, 'nb_total_products' => (int)($nbTotalProducts), 'shipping_cost' => $shipping_cost, 'shipping_cost_float' => $shipping_cost_float, 'show_wrapping' => $wrappingCost > 0 ? true : false, 'show_tax' => (int)(Configuration::get('PS_TAX_DISPLAY') == 1 && (int)Configuration::get('PS_TAX')), 'wrapping_cost' => Tools::displayPrice($wrappingCost, $currency), 'product_total' => Tools::displayPrice($params['cart']->getOrderTotal($useTax, Cart::BOTH_WITHOUT_SHIPPING), $currency), 'total' => Tools::displayPrice($totalToPay, $currency), 'order_process' => Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order', 'ajax_allowed' => (int)(Configuration::get('PS_BLOCK_CART_AJAX')) == 1 ? true : false, 'static_token' => Tools::getToken(false), 'free_shipping' => $total_free_shipping )); if (count($errors)) $this->smarty->assign('errors', $errors); if (isset($this->context->cookie->ajax_blockcart_display)) $this->smarty->assign('colapseExpandStatus', $this->context->cookie->ajax_blockcart_display); } public function getContent() { $output = ''; if (Tools::isSubmit('submitBlockCart')) { $ajax = Tools::getValue('PS_BLOCK_CART_AJAX'); if ($ajax != 0 && $ajax != 1) $output .= $this->displayError($this->l('Ajax: Invalid choice.')); else Configuration::updateValue('PS_BLOCK_CART_AJAX', (int)($ajax)); if (($productNbr = (int)Tools::getValue('PS_BLOCK_CART_XSELL_LIMIT') < 0)) $output .= $this->displayError($this->l('Please complete the "Products to display" field.')); else { Configuration::updateValue('PS_BLOCK_CART_XSELL_LIMIT', (int)(Tools::getValue('PS_BLOCK_CART_XSELL_LIMIT'))); $output .= $this->displayConfirmation($this->l('Settings updated')); } Configuration::updateValue('PS_BLOCK_CART_SHOW_CROSSSELLING', (int)(Tools::getValue('PS_BLOCK_CART_SHOW_CROSSSELLING'))); } return $output.$this->renderForm(); } public function install() { if ( parent::install() == false || $this->registerHook('top') == false || $this->registerHook('header') == false || $this->registerHook('actionCartListOverride') == false || $this->registerHook('displayCartInBreadcrumb') == false || Configuration::updateValue('PS_BLOCK_CART_AJAX', 1) == false || Configuration::updateValue('PS_BLOCK_CART_XSELL_LIMIT', 12) == false || Configuration::updateValue('PS_BLOCK_CART_SHOW_CROSSSELLING', 1) == false) return false; return true; } public function hookRightColumn($params) { if (Configuration::get('PS_CATALOG_MODE')) return; // @todo this variable seems not used $this->smarty->assign(array( 'order_page' => (strpos($_SERVER['PHP_SELF'], 'order') !== false), 'blockcart_top' => (isset($params['blockcart_top']) && $params['blockcart_top']) ? true : false, )); $this->assignContentVars($params); return $this->display(__FILE__, 'blockcart.tpl'); } public function hookLeftColumn($params) { return $this->hookRightColumn($params); } public function hookAjaxCall($params) { if (Configuration::get('PS_CATALOG_MODE')) return; $this->assignContentVars($params); $res = Tools::jsonDecode($this->display(__FILE__, 'blockcart-json.tpl'), true); if (is_array($res) && ($id_product = Tools::getValue('id_product')) && Configuration::get('PS_BLOCK_CART_SHOW_CROSSSELLING')) { $this->smarty->assign('orderProducts', OrderDetail::getCrossSells($id_product, $this->context->language->id, Configuration::get('PS_BLOCK_CART_XSELL_LIMIT'))); $res['crossSelling'] = $this->display(__FILE__, 'crossselling.tpl'); } $res = Tools::jsonEncode($res); return $res; } public function hookActionCartListOverride($params) { if (!Configuration::get('PS_BLOCK_CART_AJAX')) return; $this->assignContentVars(array('cookie' => $this->context->cookie, 'cart' => $this->context->cart)); $params['json'] = $this->display(__FILE__, 'blockcart-json.tpl'); } public function hookHeader() { if (Configuration::get('PS_CATALOG_MODE')) return; $this->context->controller->addCSS(($this->_path).'blockcart.css', 'all'); if ((int)(Configuration::get('PS_BLOCK_CART_AJAX'))) { $this->context->controller->addJS(($this->_path).'ajax-cart.js'); $this->context->controller->addJqueryPlugin(array('scrollTo', 'serialScroll', 'bxslider')); } } public function hookTop($params) { $params['blockcart_top'] = true; return $this->hookRightColumn($params); } public function hookDisplayNav($params) { $params['blockcart_top'] = true; return $this->hookTop($params); } public function hookdisplayCartInBreadcrumb($params){ return "hi there!"; } public function renderForm() { $fields_form = array( 'form' => array( 'legend' => array( 'title' => $this->l('Settings'), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'switch', 'label' => $this->l('Ajax cart'), 'name' => 'PS_BLOCK_CART_AJAX', 'is_bool' => true, 'desc' => $this->l('Activate Ajax mode for the cart (compatible with the default theme).'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'switch', 'label' => $this->l('Show cross-selling'), 'name' => 'PS_BLOCK_CART_SHOW_CROSSSELLING', 'is_bool' => true, 'desc' => $this->l('Activate cross-selling display for the cart.'), 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), array( 'type' => 'text', 'label' => $this->l('Products to display in cross-selling'), 'name' => 'PS_BLOCK_CART_XSELL_LIMIT', 'class' => 'fixed-width-xs', 'desc' => $this->l('Define the number of products to be displayed in the cross-selling block.') ), ), 'submit' => array( 'title' => $this->l('Save') ) ), ); $helper = new HelperForm(); $helper->show_toolbar = false; $helper->table = $this->table; $lang = new Language((int)Configuration::get('PS_LANG_DEFAULT')); $helper->default_form_language = $lang->id; $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0; $this->fields_form = array(); $helper->identifier = $this->identifier; $helper->submit_action = 'submitBlockCart'; $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab .'&module_name='.$this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->tpl_vars = array( 'fields_value' => $this->getConfigFieldsValues(), 'languages' => $this->context->controller->getLanguages(), 'id_language' => $this->context->language->id ); return $helper->generateForm(array($fields_form)); } public function getConfigFieldsValues() { return array( 'PS_BLOCK_CART_AJAX' => (bool)Tools::getValue('PS_BLOCK_CART_AJAX', Configuration::get('PS_BLOCK_CART_AJAX')), 'PS_BLOCK_CART_SHOW_CROSSSELLING' => (bool)Tools::getValue('PS_BLOCK_CART_SHOW_CROSSSELLING', Configuration::get('PS_BLOCK_CART_SHOW_CROSSSELLING')), 'PS_BLOCK_CART_XSELL_LIMIT' => (int)Tools::getValue('PS_BLOCK_CART_XSELL_LIMIT', Configuration::get('PS_BLOCK_CART_XSELL_LIMIT')) ); } } Actually, "hi there!" is well displayed in every page, but i am not able to display the link to the cart. Does someone know how to do it? Link to comment Share on other sites More sharing options...
Mohamadou Ndiaye Posted August 17, 2015 Share Posted August 17, 2015 Hi add this in your hook return '<a href="'.$this->context->link->getPageLink('order').'" > CART LINK </a>'; It will return a link to the cart Link to comment Share on other sites More sharing options...
Vincent-31 Posted August 17, 2015 Author Share Posted August 17, 2015 Thanks Mohamadou for your reply. In fact, i would like to add the link supplied by the custom block cart of the template, with an ajax behaviour (it displays the cart content when mouse si hover). Any idea? Link to comment Share on other sites More sharing options...
Vincent-31 Posted August 17, 2015 Author Share Posted August 17, 2015 I found a solution! In fact, it was only a css problem, if everything works great! 1 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