Jump to content

homecategories zależne od ilości sklepów


Recommended Posts

Hej, 

 

zainstalowałem moduł do wyświetlania kategorii na stronie głównej:
http://www.prestashop.com/forums/topic/121735-free-module-homepage-categories-module/

 

pięknie działało, ale w chwili gdy przenosiłem na multistora, zauważyłem, ze on nie współpracuje z nim

 

wyświetlanie nazw się dubluje w zależności od posiadanych sklepów.

czyli mam 3 kategorie główne, 3 sklepy I zamiast wyświetlać pojedynczo, to nagle mam 9 kategorii, po 3 sztuki w rzędzie z każdej ;]

 

ma ktoś pomysł jak zmodifikować ten kod:

{if isset($categories) AND $categories}
<ul>
{foreach from=$categories item=category name=homeCategories}
{assign var='categoryLink' value=$link->getcategoryLink($category.id_category, $category.link_rewrite)}
<li class="ajax_block_category {if $smarty.foreach.homeCategories.first}first_item{elseif $smarty.foreach.homeCategories.last}last_item{else}item{/if}">
<div id="cat_img"><a href="{$categoryLink}" title="{$category.legend}" class="category_image"><img src="{$img_cat_dir}{$category.id_category}.png" alt="{$category.name}" title="{$category.name}" class="categoryImage" width="{$categorySize.width}" height="{$categorySize.height}" /></a></div> 
<div id="cat"><a href="{$categoryLink}" title="{$category.legend}">{$category.name|truncate:35}</a></div>


</li>
{/foreach}
</ul>
{else}
<p>{l s='No categories' mod='homecategories'}</p>
{/if}

?

 

 

Link to comment
Share on other sites

tutaj jest fragment tablicy:

array(9) { 
  [0]=> array(19) { 
    ["id_category"]=> string(1) "8" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "5" 
    ["nright"]=> string(1) "6" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:08:46" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:22" 
    ["position"]=> string(1) "1" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "1" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(11) "Kategoria1" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria1" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [1]=> array(19) { 
    ["id_category"]=> string(1) "8" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "5" 
    ["nright"]=> string(1) "6" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:08:46" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:22" 
    ["position"]=> string(1) "1" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "7" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(11) "Kategoria1" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria1" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  }
[...]
}

wpisuje po 3 tablice znaków dla każdej kategorii, czyli indeksy [0], [1], [2] te same kategorie [3][4][5] kategoria 2 i [6][7][8] kategoria 3. 

Różni się tylko id_shop.

 

próbuję pójść na łatwiznę i o ile pod kodem głównym działa poniższy kod:

{if {$category.id_shop} == 12}
  dwanascie
{else}
  co inne
{/if}

to przy objęciu tym warunkiem kodu:

{if {$category.id_shop} == 12} {
  {if isset($categories) AND $categories }				
    <ul>
    [...]
  <div class="cr"></div>
}
{/if}

wywala mi białą stronę

Link to comment
Share on other sites

plik php:

<?php
class Homecategories extends Module
{
	private $_html = '';
	private $_postErrors = array();

	function __construct()
	{
		$this->name = 'homecategories';
		$this->tab = 'front_office_features';
		$this->version = 1.3;
		$this->author = 'John Stocks';
		$this->need_instance = 0;
		parent::__construct(); // The parent construct is required for translations
		$this->page = basename(__FILE__, '.php');
		$this->displayName = $this->l('Homepage Categories for v1.5');
		$this->description = $this->l('Displays categories on your homepage');
	}
	function install()
	{
			return (parent::install() AND $this->registerHook('home') AND $this->registerHook('header'));
	}
  public function hookHeader()
	{
		Tools::addCSS(($this->_path).'homecategories.css', 'all');
	}
function hookHome($params)
{
  global $smarty, $cookie, $link;
  $id_customer = (int)$params['cookie']->id_customer;
  $id_group = $id_customer ? Customer::getDefaultGroupId($id_customer) : _PS_DEFAULT_CUSTOMER_GROUP_;
  $id_lang = (int)$params['cookie']->id_lang;
  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
  SELECT c.*, cl.*
  FROM `'._DB_PREFIX_.'category` c
  LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (c.`id_category` = cl.`id_category` AND `id_lang` = '.$id_lang.')
  LEFT JOIN `'._DB_PREFIX_.'category_group` cg ON (cg.`id_category` = c.`id_category`)
  WHERE level_depth > 1 And level_depth < 3
  AND c.`active` = 1
  AND cg.`id_group` = '.$id_group.'
  ORDER BY `level_depth` ASC, c.`position` ASC');
  $category = new Category(1);
  $nb = intval(Configuration::get('HOME_categories_NBR'));
     global $link;
                 $this->context->smarty->assign(array(
                 'categories' => $result, Category::getRootCategories(intval($params['cookie']->id_lang), true),
                 'link' => $link));                
  $this->context->smarty->assign(array(
   'category' => $category,
   'lang' => Language::getIsoById(intval($params['cookie']->id_lang)),
  ));
  return $this->display(__FILE__, 'homecategories.tpl');
 }
}

tpl:

<!-- MODULE Home categories -->
  <div class="home_categories">
  <!-- h2>{l s='Categories' mod='homecategories'}</h2 -->
  {if isset($categories) AND $categories }
    <ul>	
     {foreach from=$categories item=category name=homeCategories}
      {assign var='categoryLink' value=$link->getcategoryLink($category.id_category, $category.link_rewrite)}
      <li class="ajax_block_category {if $smarty.foreach.homeCategories.first}first_item{elseif $smarty.foreach.homeCategories.last}last_item{else}item{/if}">
        <div id="cat_img"><a href="{$categoryLink}" title="{$category.legend}" class="category_image"><img src="{$img_cat_dir}{$category.id_category}.png" alt="{$category.name}" title="{$category.name}" class="categoryImage" width="{$categorySize.width}" height="{$categorySize.height}" /></a></div> 
	<div id="cat"><a href="{$categoryLink}" title="{$category.legend}">{$category.name|truncate:35}</a></div>
      </li>
    {/foreach}
   </ul>					
  {else}
    <p>{l s='No categories' mod='homecategories'}</p>
  {/if}
  <div class="cr"></div>				
 </div>
<!-- /MODULE Home categories -->

to wszystko,
potem tylko zamieściłem dumpa ze zmiennej categories o której wspominałeś.
Poniżej pełny zrzut:

array(9) { 
  [0]=> array(19) { 
    ["id_category"]=> string(1) "8" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "5" 
    ["nright"]=> string(1) "6" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:08:46" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:22" 
    ["position"]=> string(1) "1" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "1" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(11) "Kategoria1" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria1" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [1]=> array(19) { 
    ["id_category"]=> string(1) "8" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "5" 
    ["nright"]=> string(1) "6" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:08:46" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:22" 
    ["position"]=> string(1) "1" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "7" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(11) "Kategoria1" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria1" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [2]=> array(19) { 
    ["id_category"]=> string(1) "8" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "5" 
    ["nright"]=> string(1) "6" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:08:46" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:22" 
    ["position"]=> string(1) "1" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(2) "12" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(11) "Kategoria1" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria1" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [3]=> array(19) { 
    ["id_category"]=> string(1) "9" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "7" 
    ["nright"]=> string(1) "8" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:10" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:20" 
    ["position"]=> string(1) "2" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "1" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(19) "Kategoria2" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(19) "kategoria2" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [4]=> array(19) { 
    ["id_category"]=> string(1) "9" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "7" 
    ["nright"]=> string(1) "8" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:10" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:20" 
    ["position"]=> string(1) "2" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "7" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(19) "Kategoria2" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(19) "kategoria2" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [5]=> array(19) { 
    ["id_category"]=> string(1) "9" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "7" 
    ["nright"]=> string(1) "8" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:10" 
    ["date_upd"]=> string(19) "2013-11-04 09:45:20" 
    ["position"]=> string(1) "2"  
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(2) "12" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(19) "Kategoria2" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(19) "kategoria2" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [6]=> array(19) { 
    ["id_category"]=> string(2) "10" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "9" 
    ["nright"]=> string(2) "10" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:29" 
    ["date_upd"]=> string(19) "2013-10-30 14:47:25" 
    ["position"]=> string(1) "3" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "1" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(12) "Kategoria3" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "kategoria3" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [7]=> array(19) { 
    ["id_category"]=> string(2) "10" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "9" 
    ["nright"]=> string(2) "10" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:29" 
    ["date_upd"]=> string(19) "2013-10-30 14:47:25" 
    ["position"]=> string(1) "3" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(1) "7" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(12) "Kategoria3" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "Kategoria3" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
  [8]=> array(19) { 
    ["id_category"]=> string(2) "10" 
    ["id_parent"]=> string(1) "3" 
    ["id_shop_default"]=> string(2) "12" 
    ["level_depth"]=> string(1) "2" 
    ["nleft"]=> string(1) "9" 
    ["nright"]=> string(2) "10" 
    ["active"]=> string(1) "1" 
    ["date_add"]=> string(19) "2013-10-30 14:15:29" 
    ["date_upd"]=> string(19) "2013-10-30 14:47:25" 
    ["position"]=> string(1) "3" 
    ["is_root_category"]=> string(1) "0" 
    ["id_shop"]=> string(2) "12" 
    ["id_lang"]=> string(1) "1" 
    ["name"]=> string(12) "Kategoria3" 
    ["description"]=> string(0) "" 
    ["link_rewrite"]=> string(11) "Kategoria3" 
    ["meta_title"]=> string(0) "" 
    ["meta_keywords"]=> string(0) "" 
    ["meta_description"]=> string(0) "" 
  } 
}

Poradziłem sobie zamieniając w templatce pętlę na konkretne odnośniki, no ale to jest prymitywne rozwiązanie

Link to comment
Share on other sites

nie mogę się z Tobą zgodzić tutaj, ponieważ zmienna $category jest zmienną publiczną, mogę się do niej odnosić w całym sklepie.
zresztą najlepszy przykład był tego, że warunek z id_shop == 12 mogę postawić pod pętlą.

Biała strona nie jest uzależniona od tego czy istnieje dana zmienna. Po prostu nie przejdzie warunek i wykona się to co w {else}

To musi być czymś innym spowodowane.

Link to comment
Share on other sites

niestety, nie jest zmienna globalną (chyba to miałeś na myśli), nie wiem o jakim obiekcie mówisz, i z całą pewnością nie jest dostępna wszędzie. Gdyby tak było mógłbyś na każdej stronie wykorzystywać tą zmienną a nie możesz. Już nie chodzi o fakt, że tej zmiennej nie ma, tylko o próbę dobrania się do elementu obiektu .id_shop, który nie istnieje. Smarty w tym wypadku nie wywala zwykłego notice  tylko fatal error. Zwróć uwagę na foreach:

{foreach from=$categories item=category name=homeCategories}

dopiero w tym momencie jest definiowana zmienna $category i dopiero teraz masz dostęp do charakterystyki obiektu

Link to comment
Share on other sites

×
×
  • Create New...