Jump to content

Move blockcart in new hook


Vincent-31

Recommended Posts

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

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...