korni Posted October 30, 2013 Share Posted October 30, 2013 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 More sharing options...
vekia Posted October 30, 2013 Share Posted October 30, 2013 pytanie co kryje zmienna: $categories bo to od niej wszystko zależy Link to comment Share on other sites More sharing options...
korni Posted November 4, 2013 Author Share Posted November 4, 2013 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 More sharing options...
vekia Posted November 4, 2013 Share Posted November 4, 2013 taki wycinek kodu nie za wiele mówi, jak to wygląda w całości? Link to comment Share on other sites More sharing options...
korni Posted November 4, 2013 Author Share Posted November 4, 2013 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 More sharing options...
vekia Posted November 4, 2013 Share Posted November 4, 2013 biała strona była spowodowana faktem, że zmiennej $category używałeś na zewnątrz pętli foreach, tzn. ta zmienna w miejscu w którym była wykorzystywana po prostu nie istnieje Link to comment Share on other sites More sharing options...
korni Posted November 5, 2013 Author Share Posted November 5, 2013 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 More sharing options...
vekia Posted November 5, 2013 Share Posted November 5, 2013 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 More sharing options...
Recommended Posts