mdusamaansari Posted August 5, 2014 Share Posted August 5, 2014 Hi Techies, My prestashop Version is 1.5.4.1. I have installed Crossselling with custom hook as displayCrossSelling. My module is working perfect, it showing its tpl file contents, but products are not showing. here is the link http://store.unikmobil.dk/da/quick-order Its working perfect on product page, and its showing products for all products. Please check this and help me for getting products. Thanks in advance. Link to comment Share on other sites More sharing options...
vekia Posted August 5, 2014 Share Posted August 5, 2014 i don't see any cross seling module on your website, both on product page and in cart Link to comment Share on other sites More sharing options...
NemoPS Posted August 5, 2014 Share Posted August 5, 2014 Is it the "related products' Tab in the product page? How and where did you setup the hook for the cart page? Link to comment Share on other sites More sharing options...
mdusamaansari Posted August 5, 2014 Author Share Posted August 5, 2014 Sorry, now I have uploaded it. Please check it now, I have disabled the hook on product detail page. Link to comment Share on other sites More sharing options...
mdusamaansari Posted August 5, 2014 Author Share Posted August 5, 2014 i don't see any cross seling module on your website, both on product page and in cart The text "Kunder, der købte denne vare, købte også:" section is the crossselling module div and its a custom hook. Link to comment Share on other sites More sharing options...
mdusamaansari Posted August 5, 2014 Author Share Posted August 5, 2014 Hi Nemos and Vekia, Here is my crossselling.php <?php /* * 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 (!defined('_PS_VERSION_')) exit; class CrossSelling extends Module { private $_html; public function __construct() { $this->name = 'crossselling'; $this->tab = 'front_office_features'; $this->version = 0.1; $this->author = 'PrestaShop'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Cross Selling'); $this->description = $this->l('Customers who bought this product also bought:'); if (!$this->isRegisteredInHook('header')) $this->registerHook('header'); } public function install() { if (!parent::install() OR !$this->registerHook('productFooter') OR !$this->registerHook('header') OR !$this->registerHook('displayCrossSelling') OR !Configuration::updateValue('CROSSSELLING_DISPLAY_PRICE', 0) OR !Configuration::updateValue('CROSSSELLING_NBR', 10)) return false; return true; } public function uninstall() { if (!parent::uninstall() OR !$this->unregisterHook('productFooter') OR !$this->unregisterHook('header') OR !$this->unregisterHook('displayCrossSelling') OR !Configuration::deleteByName('CROSSSELLING_DISPLAY_PRICE') OR !Configuration::deleteByName('CROSSSELLING_NBR')) return false; return true; } public function getContent() { $this->_html = ''; if (Tools::isSubmit('submitCross')) { if (Tools::getValue('displayPrice') != 0 AND Tools::getValue('displayPrice') != 1) $this->_html .= $this->displayError('Invalid displayPrice'); else if (!($productNbr = Tools::getValue('productNbr')) || empty($productNbr)) $this->_html .= $this->displayError('You must fill in the \'Products displayed\' field.'); elseif ((int)($productNbr) == 0) $this->_html .= $this->displayError('Invalid number.'); else { Configuration::updateValue('CROSSSELLING_DISPLAY_PRICE', (int)Tools::getValue('displayPrice')); Configuration::updateValue('CROSSSELLING_NBR', (int)Tools::getValue('productNbr')); $this->_html .= $this->displayConfirmation($this->l('Settings updated successfully')); } } $this->_html .= ' <form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post"> <fieldset><legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend> <label>'.$this->l('Display price on products').'</label> <div class="margin-form"> <input type="radio" name="displayPrice" id="display_on" value="1" '.(Configuration::get('CROSSSELLING_DISPLAY_PRICE') ? 'checked="checked" ' : '').'/> <label class="t" for="display_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Enabled').'" /></label> <input type="radio" name="displayPrice" id="display_off" value="0" '.(!Configuration::get('CROSSSELLING_DISPLAY_PRICE') ? 'checked="checked" ' : '').'/> <label class="t" for="display_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('Disabled').'" /></label> <p class="clear">'.$this->l('Show the price on the products in the block.').'</p> </div> <div class="margin-form"> <input type="text" name="productNbr" value="'.(int)Configuration::get('CROSSSELLING_NBR').'" /> <p class="clear">'.$this->l('Define the number of products displayed in this block').'</p> </div> <center><input type="submit" name="submitCross" value="'.$this->l('Save').'" class="button" /></center> </fieldset> </form>'; return $this->_html; } public function hookHeader() { $this->context->controller->addCSS(($this->_path).'crossselling.css', 'all'); $this->context->controller->addJS(($this->_path).'js/crossselling.js'); } /** * Returns module content */ public function hookDisplayCrossSelling($params) { /*if (!$params['products']) return;*/ global $smarty, $cookie, $link; $qOrders = 'SELECT o.id_order FROM '._DB_PREFIX_.'orders o LEFT JOIN '._DB_PREFIX_.'order_detail od ON (od.id_order = o.id_order) WHERE o.valid = 1 AND ('; $nProducts = count($params['products']); $i = 1; $pIds = array(); foreach ($params['products'] as $product) { $qOrders .= 'od.product_id = '.(int)$product['id_product']; if ($i < $nProducts) $qOrders .= ' OR '; ++$i; $pIds[] = (int)$product['id_product']; } $qOrders .= ')'; $orders = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($qOrders); if (sizeof($orders)) { $list = ''; foreach ($orders AS $order) $list .= (int)$order['id_order'].','; $list = rtrim($list, ','); $list_product_ids = join(',', $pIds); $orderProducts = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT DISTINCT od.product_id, pl.name, pl.link_rewrite, p.reference, i.id_image, product_shop.show_price, cl.link_rewrite category, p.ean13 FROM '._DB_PREFIX_.'order_detail od LEFT JOIN '._DB_PREFIX_.'product p ON (p.id_product = od.product_id) '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = od.product_id'.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = product_shop.id_category_default'.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = od.product_id) WHERE od.id_order IN ('.$list.') AND pl.id_lang = '.(int)$this->context->language->id.' AND cl.id_lang = '.(int)$this->context->language->id.' AND od.product_id NOT IN ('.$list_product_ids.') AND i.cover = 1 AND product_shop.active = 1 ORDER BY RAND() LIMIT '.(int)Configuration::get('CROSSSELLING_NBR').' '); $taxCalc = Product::getTaxCalculationMethod(); foreach ($orderProducts AS &$orderProduct) { //my content here $dummy_text = "success"; $orderProduct['image'] = $this->context->link->getImageLink($orderProduct['link_rewrite'], (int)$orderProduct['product_id'].'-'.(int)$orderProduct['id_image'], ImageType::getFormatedName('medium')); $orderProduct['link'] = $this->context->link->getProductLink((int)$orderProduct['product_id'], $orderProduct['link_rewrite'], $orderProduct['category'], $orderProduct['ean13']); if (Configuration::get('CROSSSELLING_DISPLAY_PRICE') AND ($taxCalc == 0 OR $taxCalc == 2)) $orderProduct['displayed_price'] = Product::getPriceStatic((int)$orderProduct['product_id'], true, NULL); elseif (Configuration::get('CROSSSELLING_DISPLAY_PRICE') AND $taxCalc == 1) $orderProduct['displayed_price'] = Product::getPriceStatic((int)$orderProduct['product_id'], false, NULL); } $this->smarty->assign(array('order' => (count($pIds) > 1 ? true : false), 'orderProducts' => $orderProducts, 'middlePosition_crossselling' => round(sizeof($orderProducts) / 2, 0), //my content here 'dummy_text' => $dummy_text, 'new_orders' => $orders, 'crossDisplayPrice' => Configuration::get('CROSSSELLING_DISPLAY_PRICE'))); } return $this->display(__FILE__, 'crossselling.tpl'); } /** * Returns module content for left column */ public function hookProductFooter($params) { $orders = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT o.id_order FROM '._DB_PREFIX_.'orders o LEFT JOIN '._DB_PREFIX_.'order_detail od ON (od.id_order = o.id_order) WHERE o.valid = 1 AND od.product_id = '.(int)$params['product']->id); if (sizeof($orders)) { $list = ''; foreach ($orders AS $order) $list .= (int)$order['id_order'].','; $list = rtrim($list, ','); $orderProducts = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT DISTINCT od.product_id, pl.name, pl.link_rewrite, p.reference, i.id_image, product_shop.show_price, cl.link_rewrite category, p.ean13 FROM '._DB_PREFIX_.'order_detail od LEFT JOIN '._DB_PREFIX_.'product p ON (p.id_product = od.product_id) '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = od.product_id'.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = product_shop.id_category_default'.Shop::addSqlRestrictionOnLang('cl').') LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = od.product_id) WHERE od.id_order IN ('.$list.') AND pl.id_lang = '.(int)$this->context->language->id.' AND cl.id_lang = '.(int)$this->context->language->id.' AND od.product_id != '.(int)$params['product']->id.' AND i.cover = 1 AND product_shop.active = 1 ORDER BY RAND() LIMIT '.(int)Configuration::get('CROSSSELLING_NBR').' '); $taxCalc = Product::getTaxCalculationMethod(); foreach ($orderProducts AS &$orderProduct) { $orderProduct['image'] = $this->context->link->getImageLink($orderProduct['link_rewrite'], (int)$orderProduct['product_id'].'-'.(int)$orderProduct['id_image'], ImageType::getFormatedName('medium')); $orderProduct['link'] = $this->context->link->getProductLink((int)$orderProduct['product_id'], $orderProduct['link_rewrite'], $orderProduct['category'], $orderProduct['ean13']); if (Configuration::get('CROSSSELLING_DISPLAY_PRICE') AND ($taxCalc == 0 OR $taxCalc == 2)) $orderProduct['displayed_price'] = Product::getPriceStatic((int)$orderProduct['product_id'], true, NULL); elseif (Configuration::get('CROSSSELLING_DISPLAY_PRICE') AND $taxCalc == 1) $orderProduct['displayed_price'] = Product::getPriceStatic((int)$orderProduct['product_id'], false, NULL); } $this->smarty->assign(array('order' => false, 'orderProducts' => $orderProducts, 'middlePosition_crossselling' => round(sizeof($orderProducts) / 2, 0), 'crossDisplayPrice' => Configuration::get('CROSSSELLING_DISPLAY_PRICE'))); } return $this->display(__FILE__, 'crossselling.tpl'); } } Here is my crossselling.tpl file codes {* * 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 isset($orderProducts) && count($orderProducts)} <div id="crossselling"> <script type="text/javascript">var cs_middle = {$middlePosition_crossselling};</script> <h2 class="productscategory_h2">{l s='Customers who bought this product also bought:' mod='crossselling'}</h2> <p>{$new_orders}</p> <p>{$dummy_text}</p> <div id="{if count($orderProducts) > 5}crossselling{else}crossselling_noscroll{/if}"> {if count($orderProducts) > 5}<a id="crossselling_scroll_left" title="{l s='Previous' mod='crossselling'}" href="javascript:{ldelim}{rdelim}">{l s='Previous' mod='crossselling'}</a>{/if} <div id="crossselling_list"> <ul class="clearfix" {if count($orderProducts) > 5}style="width: {math equation="width * nbImages" width=107 nbImages=$orderProducts|@count}px"{/if}> {foreach from=$orderProducts item='orderProduct' name=orderProduct} <li> <a href="{$orderProduct.link}" title="{$orderProduct.name|htmlspecialchars}" class="lnk_img"><img src="{$orderProduct.image}" alt="{$orderProduct.name|htmlspecialchars}" /></a> <p class="product_name"><a href="{$orderProduct.link}" title="{$orderProduct.name|htmlspecialchars}">{$orderProduct.name|truncate:15:'...'|escape:'htmlall':'UTF-8'}</a></p> {if $crossDisplayPrice AND $orderProduct.show_price == 1 AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE} <span class="price_display"> <span class="price">{convertPrice price=$orderProduct.displayed_price}</span> </span><br /> {else} <br /> {/if} <!-- <a title="{l s='View' mod='crossselling'}" href="{$orderProduct.link}" class="button_small">{l s='View' mod='crossselling'}</a><br /> --> </li> {/foreach} </ul> </div> {if count($orderProducts) > 5}<a id="crossselling_scroll_right" title="{l s='Next' mod='crossselling'}" href="javascript:{ldelim}{rdelim}">{l s='Next' mod='crossselling'}</a>{/if} </div> </div> {/if} Please help me in this issue. Link to comment Share on other sites More sharing options...
NemoPS Posted August 6, 2014 Share Posted August 6, 2014 Where did you add 'DisplayCrossSelling' ? The hook, I mean Link to comment Share on other sites More sharing options...
mdusamaansari Posted August 6, 2014 Author Share Posted August 6, 2014 Hi Nemos and Vekia, I have done this out. I used a custom hook so $params['products'] values are empty. So i used $products = $params['cart']->getProducts(true); in module php file. So its everything perfect. Thanks for your support. 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