wdrożenia PrestaShop

problem z menu w podstronach

  • 4 Odpowiedzi
  • 5001 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline sebastianp88

  • Użytkownik
  • **
  • 48
  • 0
problem z menu w podstronach
« dnia: Październik 23, 2012, 09:42:29 pm »
Witam wszystkich,

chyba nie mam szczęścia do presty bo co i róż mam z czymś problem. Sprawa wygląda następująco:
Na stronie głównej całe menu za które odpowiada TM Categories działa. Menu całe ładnie się rozwija i ogólnie jest ok, ale tylko na głównej. Niestety na podstronach całe menu przestaje działać. Są tylko główne kategorie które w żaden sposób nie reagują na najechanie kursorem. W CSS'ie zmieniałem tylko kolory w backgroundach więc nie było raczej możliwości coś skopać. W 2 modułach dodałem warunek dotyczący warunkowe wyświetlania bloku prostego wyszukiwania. Będę wdzięczny za wszelkie sugestie. Link do strony:

http://wszystko-gra.home.pl/sklep/GameShop/

Z góry dziękuję za wszelką pomoc.

*

Offline design4VIP

  • user
  • Mieszkaniec
  • *****
  • 3,866
  • 131
    • design4VIP z innej strony...
  • PrestaShop: PS
  • Status: Programista
Odp: problem z menu w podstronach
« Odpowiedź #1 dnia: Październik 24, 2012, 09:24:25 am »
po plikach tpl i js modulu za wiele nie widac aby cos bylo nie tak, ot standardowe pliczki. jedyne co to mozesz miec uwarunkowanie w pliku .php, ze subcat ma byc wyswietlane tylko na $page_name=='index'. bo teoretycznie podkategorie rozwiaje sa na stronie tylko z parametrem stylu "display:none"
design4VIP z innej strony...

*

Offline sebastianp88

  • Użytkownik
  • **
  • 48
  • 0
Odp: problem z menu w podstronach
« Odpowiedź #2 dnia: Październik 24, 2012, 10:27:01 pm »
W pliku php tmcategories nigdzie nie mam żadnego warunku. Czy jest jakiś sposób aby sprawdzić co ewentualnie może broić? Swoją drogą jak włączyć konsolę błędów w preście - może ślepy jestem albo nie umiem szukać ale nie znalazłem na forum informacji na ten temat.

Swoją drogą, poniżej zamieszczam kody plików tpl z modułu searchblock i blockuserinfo - czy te warunki są w odpowiednich miejscach umiejscowione?

<!-- Block search module TOP -->
{if $page_name != 'index'}
<div id="search_block_top">
<form method="get" action="{$link->getPageLink('search.php')}" id="searchbox">
<label>{l s='Search' mod='blocksearch'}</label>
<input class="search_query" type="text" id="search_query_top" name="search_query" value="{if isset($smarty.get.search_query)}{$smarty.get.search_query|htmlentities:$ENT_QUOTES:'utf-8'|stripslashes}{else}{l s='' mod='blocksearch'}{/if}" onFocus="if(this.value=='{l s='' mod='blocksearch'}')this.value='';" onBlur="if(this.value=='')this.value='{l s='' mod='blocksearch'}';" />
<a href="javascript:document.getElementById('searchbox').submit();">{l s='' mod='blocksearch'}</a>
<input type="hidden" name="orderby" value="position" />
<input type="hidden" name="orderway" value="desc" />
{*<input type="submit" name="submit_search" value="{l s='Search' mod='blocksearch'}" class="button" />*}
</form>
</div>

{if $instantsearch}
<script type="text/javascript">
// <![CDATA[
{literal}
function tryToCloseInstantSearch() {
if ($('#old_center_column').length > 0)
{
$('#center_column').remove();
$('#old_center_column').attr('id', 'center_column');
$('#center_column').show();
return false;
}
}
instantSearchQueries = new Array();
function stopInstantSearchQueries(){
for(i=0;i<instantSearchQueries.length;i++) {
instantSearchQueries[i].abort();
}
instantSearchQueries = new Array();
}
$("#search_query_top").keyup(function(){
if($(this).val().length > 0){
stopInstantSearchQueries();
instantSearchQuery = $.ajax({
url: '{/literal}{if $search_ssl == 1}{$link->getPageLink('search.php', true)}{else}{$link->getPageLink('search.php')}{/if}{literal}',
data: 'instantSearch=1&id_lang={/literal}{$cookie->id_lang}{literal}&q='+$(this).val(),
dataType: 'html',
success: function(data){
if($("#search_query_top").val().length > 0)
{
tryToCloseInstantSearch();
$('#center_column').attr('id', 'old_center_column');
$('#old_center_column').after('<div id="center_column" class="center_column instant_search_results">'+data+'</div>');
$('#old_center_column').hide();
$("#instant_search_results a.close").click(function() {
$("#search_query_top").val('');
return tryToCloseInstantSearch();
});
return false;
}
else
tryToCloseInstantSearch();
}
});
instantSearchQueries.push(instantSearchQuery);
}
else
tryToCloseInstantSearch();
});
// ]]>
{/literal}
</script>
{/if}
{if $ajaxsearch}
<script type="text/javascript">
// <![CDATA[
{literal}
$('document').ready( function() {
$("#search_query_top")
.autocomplete(
'{/literal}{if $search_ssl == 1}{$link->getPageLink('search.php', true)}{else}{$link->getPageLink('search.php')}{/if}{literal}', {
minChars: 3,
max: 10,
width: 500,
selectFirst: false,
scroll: false,
dataType: "json",
formatItem: function(data, i, max, value, term) {
return value;
},
parse: function(data) {
var mytab = new Array();
for (var i = 0; i < data.length; i++)
mytab[mytab.length] = { data: data[i], value: data[i].cname + ' > ' + data[i].pname };
return mytab;
},
extraParams: {
ajaxSearch: 1,
id_lang: {/literal}{$cookie->id_lang}{literal}
}
}
)
.result(function(event, data, formatted) {
$('#search_query_top').val(data.pname);
document.location.href = data.product_link;
})
});
{/literal}
// ]]>
</script>
{/if}
{/if}
<!-- /Block search module TOP -->

{if $page_name!='index'}
<!-- Block user information module HEADER --> <div id="shopping_cart">
{if !$PS_CATALOG_MODE}
<a href="{$link->getPageLink("$order_process.php", true)}" title="{l s='Your Shopping Cart' mod='blockuserinfo'}">{l s='Cart:' mod='blockuserinfo'}</a>
<span class="ajax_cart_quantity{if $cart_qties == 0} hidden{/if}">{$cart_qties}</span>
<span class="ajax_cart_product_txt{if $cart_qties != 1} hidden{/if}">{l s='product' mod='blockuserinfo'}</span>
<span class="ajax_cart_product_txt_s{if $cart_qties < 2} hidden{/if}">{l s='products' mod='blockuserinfo'}</span>
{*
{if $cart_qties >= 0}
<span class="ajax_cart_total{if $cart_qties == 0} hidden{/if}">
{if $priceDisplay == 1}
{assign var='blockuser_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant}
{convertPrice price=$cart->getOrderTotal(false, $blockuser_cart_flag)}
{else}
{assign var='blockuser_cart_flag' value='Cart::BOTH_WITHOUT_SHIPPING'|constant}
{convertPrice price=$cart->getOrderTotal(true, $blockuser_cart_flag)}
{/if}
</span>
{/if}
*}
<span class="ajax_cart_no_product{if $cart_qties > 0} hidden{/if}">{l s='(empty)' mod='blockuserinfo'}</span>
{/if}
</div>
<div id="header_user">
<ul>
<li id="header_user_info">
{l s='Welcome' mod='blockuserinfo'},
{if $cookie->isLogged()}
<span>{$cookie->customer_firstname} {$cookie->customer_lastname}</span>
(&nbsp;<a href="{$link->getPageLink('index.php')}?mylogout" title="{l s='Log me out' mod='blockuserinfo'}">{l s='Log out' mod='blockuserinfo'}</a>&nbsp;)
{else}
(&nbsp;<a href="{$link->getPageLink('my-account.php', true)}">{l s='Log in' mod='blockuserinfo'}</a>&nbsp;)
{/if}
</li>
<li id="your_account"><a href="{$link->getPageLink('my-account.php', true)}" title="{l s='Your Account' mod='blockuserinfo'}">{l s='Your Account' mod='blockuserinfo'}</a></li>

</ul>
</div>
{/if}
<!-- /Block user information module HEADER -->

*

Offline design4VIP

  • user
  • Mieszkaniec
  • *****
  • 3,866
  • 131
    • design4VIP z innej strony...
  • PrestaShop: PS
  • Status: Programista
Odp: problem z menu w podstronach
« Odpowiedź #3 dnia: Październik 25, 2012, 07:01:26 am »
Czy jest jakiś sposób aby sprawdzić co ewentualnie może broić? Swoją drogą jak włączyć konsolę błędów w preście - może ślepy jestem albo nie umiem szukać ale nie znalazłem na forum informacji na ten temat.

sprawdzic mozna przez konsole bledow, ale nie wiem czy taki blad, w tym wypadku wyrzuci.  wlaczenie masz w pliku config:

/* Debug only */
@ini_set('display_errors', 'on');
define('_PS_DEBUG_SQL_', true);


jezeli chodzi o warunki w userinfo i search to  masz zakomendowane cale moduly wiec tutaj, w zaleznosci od tego co chciales osoagnac, wszystko dziala dobrze. tylko jedno ale, jak moge wtracic, zostawil bym w userinfo czesc odpowiedzlana za logowanie (header_user). bo troche dziwny jest fakt, ze nie mozna sie zalogowac z glownej strony.

co do tmcategories to wrzuc kod pliku .php. mozliwe, ze gdzies tam masz zakomensdowanego !index-a bo po plikach .js nic nie widac, a jeszcze tam by cos moglo siedziec. bo zasadniczo co ma wyswietlic to wyswietla tylko jako display:none. ale fizicznie w kodzie kod opowiedzialny za submenu istnieje wiec .tpl-e chodza dobrze.
design4VIP z innej strony...

*

Offline sebastianp88

  • Użytkownik
  • **
  • 48
  • 0
Odp: problem z menu w podstronach
« Odpowiedź #4 dnia: Październik 27, 2012, 09:46:50 pm »
Kod php modułu tmcategories
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
class 
TMCategories extends Module
{
public function __construct()
{
$this->name 'tmcategories';
$this->tab 'front_office_features';
$this->version '1.4';
$this->author 'TM';
parent::__construct();
$this->displayName $this->l('TM Categories');
$this->description $this->l('Adds a block featuring product categories at the top of page');
}
public function install()
{
if (!parent::install() OR
!$this->registerHook('top') OR
// Temporary hooks. Do NOT hook any module on it. Some CRUD hook will replace them as soon as possible.
!$this->registerHook('categoryAddition') OR
!$this->registerHook('categoryUpdate') OR
!$this->registerHook('categoryDeletion') OR
!$this->registerHook('afterSaveAdminMeta') OR
!Configuration::updateValue('BLOCK_CATEG_MAX_DEPTH'3) OR
!Configuration::updateValue('BLOCK_CATEG_DHTML'1))
return false;
return true;
}
public function uninstall()
{
if (!parent::uninstall() OR
!Configuration::deleteByName('BLOCK_CATEG_MAX_DEPTH') OR
!Configuration::deleteByName('BLOCK_CATEG_DHTML'))
return false;
return true;
}
public function getContent()
{
$output '<h2>'.$this->displayName.'</h2>';
if (Tools::isSubmit('submitBlockCategories'))
{
$maxDepth = (int)(Tools::getValue('maxDepth'));
$dhtml Tools::getValue('dhtml');
$nbrColumns Tools::getValue('nbrColumns',4);
if ($maxDepth 0)
$output .= '<div class="alert error">'.$this->l('Maximum depth: Invalid number.').'</div>';
elseif ($dhtml != AND $dhtml != 1)
$output .= '<div class="alert error">'.$this->l('Dynamic HTML: Invalid choice.').'</div>';
else
{
Configuration::updateValue('BLOCK_CATEG_MAX_DEPTH', (int)($maxDepth));
Configuration::updateValue('BLOCK_CATEG_DHTML', (int)($dhtml));
Configuration::updateValue('BLOCK_CATEG_NBR_COLUMN_FOOTER'$nbrColumns);
$this->_clearBlockcategoriesCache();
$output .= '<div class="conf confirm"><img src="../img/admin/ok.gif" alt="'.$this->l('Confirmation').'" />'.$this->l('Settings updated').'</div>';
}
}
return $output.$this->displayForm();
}
public function displayForm()
{
return '
<form action="'
.$_SERVER['REQUEST_URI'].'" method="post">
<fieldset>
<legend><img src="'
.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend>
<label>'
.$this->l('Maximum depth').'</label>
<div class="margin-form">
<input type="text" name="maxDepth" value="'
.Configuration::get('BLOCK_CATEG_MAX_DEPTH').'" />
<p class="clear">'
.$this->l('Set the maximum depth of sublevels displayed in this block (0 = infinite)').'</p>
</div>
<label>'
.$this->l('Dynamic').'</label>
<div class="margin-form">
<input type="radio" name="dhtml" id="dhtml_on" value="1" '
.(Tools::getValue('dhtml'Configuration::get('BLOCK_CATEG_DHTML')) ? 'checked="checked" ' '').'/>
<label class="t" for="dhtml_on"> <img src="../img/admin/enabled.gif" alt="'
.$this->l('Enabled').'" title="'.$this->l('Enabled').'" /></label>
<input type="radio" name="dhtml" id="dhtml_off" value="0" '
.(!Tools::getValue('dhtml'Configuration::get('BLOCK_CATEG_DHTML')) ? 'checked="checked" ' '').'/>
<label class="t" for="dhtml_off"> <img src="../img/admin/disabled.gif" alt="'
.$this->l('Disabled').'" title="'.$this->l('Disabled').'" /></label>
<p class="clear">'
.$this->l('Activate dynamic (animated) mode for sublevels').'</p>
</div>
<label>'
.$this->l('Footer columns number').'</label>
<div class="margin-form">
<input type="text" name="nbrColumns" value="'
.Configuration::get('BLOCK_CATEG_NBR_COLUMN_FOOTER').'" />
<p class="clear">'
.$this->l('Set the number of footer columns').'</p>
</div>
<center><input type="submit" name="submitBlockCategories" value="'
.$this->l('Save').'" class="button" /></center>
</fieldset>
</form>'
;
}
public function getTree($resultParents$resultIds$maxDepth$id_category 1$currentDepth 0)
{
global $link;
$children = array();
if (isset($resultParents[$id_category]) AND sizeof($resultParents[$id_category]) AND ($maxDepth == OR $currentDepth $maxDepth))
foreach ($resultParents[$id_category] as $subcat)
$children[] = $this->getTree($resultParents$resultIds$maxDepth$subcat['id_category'], $currentDepth 1);
if (!isset($resultIds[$id_category]))
return false;
return array('id' => $id_category'link' => $link->getCategoryLink($id_category$resultIds[$id_category]['link_rewrite']),
 'name' => $resultIds[$id_category]['name'], 'desc'=> $resultIds[$id_category]['description'],
 'children' => $children);
}
public function hookTop($params)
{
global $smarty$cookie;
$id_customer = (int)($params['cookie']->id_customer);
// Get all groups for this customer and concatenate them as a string: "1,2,3..."
// It is necessary to keep the group query separate from the main select query because it is used for the cache
$groups $id_customer implode(', 'Customer::getGroupsStatic($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_;
$id_product = (int)(Tools::getValue('id_product'0));
$id_category = (int)(Tools::getValue('id_category'0));
$id_lang = (int)($params['cookie']->id_lang);
$smartyCacheId 'blockcategories|'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
Tools::enableCache();
if (!$this->isCached('tmcategories.tpl'$smartyCacheId))
{
$maxdepth Configuration::get('BLOCK_CATEG_MAX_DEPTH');
if (!$result Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
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 (c.`active` = 1 OR c.`id_category` = 1)
'
.((int)($maxdepth) != ' AND `level_depth` <= '.(int)($maxdepth) : '').'
AND cg.`id_group` IN ('
.pSQL($groups).')
GROUP BY id_category
ORDER BY `level_depth` ASC, c.`position` ASC'
)
)
return;
$resultParents = array();
$resultIds = array();
foreach ($result as &$row)
{
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
}
$blockCategTree $this->getTree($resultParents$resultIdsConfiguration::get('BLOCK_CATEG_MAX_DEPTH'));
unset($resultParents);
unset($resultIds);
$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == true false);
if (Tools::isSubmit('id_category'))
{
$cookie->last_visited_category $id_category;
$smarty->assign('currentCategoryId'$cookie->last_visited_category);
}
if (Tools::isSubmit('id_product'))
{
if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))
{
$product = new Product($id_product);
if (isset($product) AND Validate::isLoadedObject($product))
$cookie->last_visited_category = (int)($product->id_category_default);
}
$smarty->assign('currentCategoryId', (int)($cookie->last_visited_category));
}
$smarty->assign('blockCategTree'$blockCategTree);
if (file_exists(_PS_THEME_DIR_.'modules/tmcategories/tmcategories.tpl'))
$smarty->assign('branche_tpl_path'_PS_THEME_DIR_.'modules/tmcategories/category-tree-branch.tpl');
else
$smarty->assign('branche_tpl_path'_PS_MODULE_DIR_.'tmcategories/category-tree-branch.tpl');
$smarty->assign('isDhtml'$isDhtml);
}
$smarty->cache_lifetime 31536000// 1 Year
$display $this->display(__FILE__'tmcategories.tpl'$smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}
/*
public function hookFooter($params)
{
global $smarty, $cookie;
$id_customer = (int)($params['cookie']->id_customer);
// Get all groups for this customer and concatenate them as a string: "1,2,3..."
$groups = $id_customer ? implode(', ', Customer::getGroupsStatic($id_customer)) : _PS_DEFAULT_CUSTOMER_GROUP_;
$id_product = (int)(Tools::getValue('id_product', 0));
$id_category = (int)(Tools::getValue('id_category', 0));
$id_lang = (int)($params['cookie']->id_lang);
$smartyCacheId = 'blockcategories|'.$groups.'_'.$id_lang.'_'.$id_product.'_'.$id_category;
Tools::enableCache();
if (!$this->isCached('blockcategories_footer.tpl', $smartyCacheId))
{
$maxdepth = Configuration::get('BLOCK_CATEG_MAX_DEPTH');
if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_parent, c.id_category, cl.name, cl.description, cl.link_rewrite
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 (c.`active` = 1 OR c.`id_category` = 1)
'.((int)($maxdepth) != 0 ? ' AND `level_depth` <= '.(int)($maxdepth) : '').'
AND cg.`id_group` IN ('.pSQL($groups).')
ORDER BY `level_depth` ASC, c.`position` ASC')
)
return;
$resultParents = array();
$resultIds = array();
foreach ($result as &$row)
{
$resultParents[$row['id_parent']][] = &$row;
$resultIds[$row['id_category']] = &$row;
}
//$nbrColumns = Configuration::get('BLOCK_CATEG_NBR_COLUMNS_FOOTER');
$nbrColumns = Configuration::get('BLOCK_CATEG_NBR_COLUMN_FOOTER');
if(!$nbrColumns)
$nbrColumns=3;
$numberColumn = abs(sizeof($result)/$nbrColumns);
$widthColumn= floor(100/$nbrColumns);
$smarty->assign('numberColumn', $numberColumn);
$smarty->assign('widthColumn', $widthColumn);

$blockCategTree = $this->getTree($resultParents, $resultIds, Configuration::get('BLOCK_CATEG_MAX_DEPTH'));
unset($resultParents);
unset($resultIds);
$isDhtml = (Configuration::get('BLOCK_CATEG_DHTML') == 1 ? true : false);
if (Tools::isSubmit('id_category'))
{
$cookie->last_visited_category = $id_category;
$smarty->assign('currentCategoryId', $cookie->last_visited_category);
}
if (Tools::isSubmit('id_product'))
{
if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))
{
$product = new Product($id_product);
if (isset($product) AND Validate::isLoadedObject($product))
$cookie->last_visited_category = (int)($product->id_category_default);
}
$smarty->assign('currentCategoryId', (int)($cookie->last_visited_category));
}
$smarty->assign('blockCategTree', $blockCategTree);
if (file_exists(_PS_THEME_DIR_.'modules/blockcategories/blockcategories_footer.tpl'))
$smarty->assign('branche_tpl_path', _PS_THEME_DIR_.'modules/blockcategories/category-tree-branch.tpl');
else
$smarty->assign('branche_tpl_path', _PS_MODULE_DIR_.'blockcategories/category-tree-branch.tpl');
$smarty->assign('isDhtml', $isDhtml);
}
$smarty->cache_lifetime = 31536000; // 1 Year
$display = $this->display(__FILE__, 'blockcategories_footer.tpl', $smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}
*/
private function _clearBlockcategoriesCache()
{
$this->_clearCache('tmcategories.tpl');
Tools::restoreCacheSettings();
}
public function hookCategoryAddition($params)
{
$this->_clearBlockcategoriesCache();
}
public function hookCategoryUpdate($params)
{
$this->_clearBlockcategoriesCache();
}
public function hookCategoryDeletion($params)
{
$this->_clearBlockcategoriesCache();
}
public function hookAfterSaveAdminMeta($params)
{
$this->_clearBlockcategoriesCache();
}
}


Co do blockuserinfo specjalnie tak zrobiłem gdyż chciałem się pozbyć ze strony głównej "paska koszyka" który widniał obok wyszukiwarki, dlatego też został w taki a nie inny sposób zwarunkowany.