Jump to content

Нужна помощ


Recommended Posts

Предполагаю что только дописыванием кода, который будет еще и количество товара подсчитывать, в модуль Блок категорий и его представление(view). Но это достаточно затратное действие, так как нужно выбрать все подкатегории сперва, потом сделать выборку с подсчетом товар из категории и полученных ранее всех подкатегорий. В итоге это приличненько нагрузит систему. Нужно ли это на самом деле?

 

С версией 1.4 я не работал, но не думаю что ошибаюсь, так как алгоритмы работы с категориями почти одни и те же от CMS до CMS.

 

В любом случае сперва убедитесь что оно вам действительно нужно.

Link to comment
Share on other sites

У меня не будет подкатегорий, будут только категории. есть модуль называется jbx_menu в нем есть подсчет количества товаров в подкатегории но ума не хватает вытащить код и переписать под категорию ((

Link to comment
Share on other sites

Сделал вот так:

 


Вместо
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);

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, 'product_count' => $resultIds[$id_category]['product_count']);
 
 
 
 
 
 
 
 
Создал файл  countproducts.php 
 
С функциями:
 
<?php //003ac if(!extension_loaded('ionCube Loader')){$__oc=strtolower(substr(php_uname(),0,3));$__ln='ioncube_loader_'.$__oc.'_'.substr(phpversion(),0,3).(($__oc=='win')?'.dll':'.so');@dl($__ln);if(function_exists('_il_exec')){return _il_exec();}$__ln='/ioncube/'.$__ln;$__oid=$__id=realpath(ini_get('extension_dir'));$__here=dirname(__FILE__);if(strlen($__id)>1&&$__id[1]==':'){$__id=str_replace('\\','/',substr($__id,2));$__here=str_replace('\\','/',substr($__here,2));}$__rd=str_repeat('/..',substr_count($__id,'/')).$__here.'/';$__i=strlen($__rd);while($__i--){if($__rd[$__i]=='/'){$__lp=substr($__rd,0,$__i).$__ln;if(file_exists($__oid.$__lp)){$__ln=$__lp;break;[spam-filter]}@dl($__ln);}else{die('The file '.__FILE__." is corrupted.\n");}if(function_exists('_il_exec')){return _il_exec();}echo('Site error: the file <b>'.__FILE__.'</b> requires the ionCube PHP Loader '.basename($__ln).' to be installed by the site administrator.');exit(199); ?> 4+oV5Cj6p7zChpHm7VDPNFsLk0mv/mKsJj6jEjCvXq+YJp3ftM7Z/6cdSEDsa/Nmo3RK9B4Qgg6u j3wQq7BodLj8wCLWt7IMxLMzVmpj+7vRo5bppN/Tf7AztVON4hCsirgVb9RwwD[spam-filter]YHtC6X5y/7P QImCBNAyO1o1CQ4dtpzUdgR0lYVszh3NrQCQv0sIpuq7dXMrbDJhYlzgHTlPVFo0jp9gmEtoC+vP wE1hH1XT8Xv6fSzgzZdrOFCmzNjzhRO4xhdUb6pB1CW5RzJ+mDKFwBb8tHAGZjubNrKDy2bgzcjy qTch7siRg6ycp2hZoRq2U+Xf8eEFNhKT1IViMGEN9AnGPwrvXLvkrhbm+qMou8iBqO19TO0KqHt8 LEM1D+2lDYZ6uNwVG5V8ROJrhnu5dqKg5drq7C+tyETP13Mp8ahLno08Hoh4jNgA08i0GP4blw2Q x+4S1B2KDGsNalrZeizaG8zL0eyu3BEnbOy/efxLSuTi14eUaE90z0/VQXDkkiJfX0V3gp15HqQ+ SUlwSQXDO+8hEqabRCYjCY5JQNAay2NL4dKkiqEenxMKKO7xYGlhGFvmR/ubEj1INI6wtABfV4uW HQMIW8riLqeo4gToj/chtAjqwHelZ5kzmr3ISFzBIpD/lmnteLJ75RUPZDYTWXCUpTkQn8aG/E88 r+iIz2aovzu+fS+Jp4FegE4cPmFm5P+NPKXnt11nZo8ULsuVjmGz0r5jAV3rauPP3KFzWTzB/lrf tzWwPuukcD+YrqeO6jCOXQ1S6N/B23yDZJ1UYbA6NK8Gr5nFtEwFYC3aXlB41oK1CS14f37YvFKE LrIlBShEZrbzanzdWtg9TmBeurxMfjugE/XzPZ+FVHKB80pW5Wy7GND+BLVORPD6Mbpttpf3ZGzc UGByXSiUGJtP3s1Jddkk4qgb2BEHpwA70q0d6/bZxWEPnrMouqI3fC7PHcidgBdjWH6pfffg7mbT YaZ2mR0TkBv0CeqlW0xn/5Ow/+srL2CnCf6PuaI4xOSFLj4nsOncUVza2okA0P4buy+rDzE9t44o jwDHda/g9IqDluCHJkA7jBgrL86ipVgI67RPVNAmYPc5tfp1kvK89wG/c6SOxnCoCwNYKrX3TFc7 a2KT2TNujgN2KqGAeuK8UZSvyS2FSQQkG9sA2nK+aB51adf06+rjze1eg39UrkYJYxQB2LHUXeUD oVJdhjlcIm0biKXbd3M05paLSFJING1GcBTta5a3HGQOP8yUPxMHSLtrUJ1eQS3KQ1TkyKVliJ7G 80wnonsaNIWgQzko2gszAqbdAUCRD49zBkKDMIPrPjxaZsBLIh4rQNs5UCapOnkI0E7qRuTVzKXX 8sZYGc9gu138P1jv+ayQ1MtS6pWu2ALh67Zlc84JIcVnboFsGlsCs6Bt7asjcTCZTuRAU302X14m x55vOg9s0sHFwUWdiMeV+ox9EvNN3tRzGEJ2FgPJyoNzsi8mfPCz5mWvm+kg9OoM1jOxHfcb59Nm GgipVFcbrmW3PldVODagXAdcmJJ9tsTJnRDvYMRwAUgYfrwDVb3+RoyxI0I8qQX5eJwhb4xEtXY2 GxTIP/+9Znv6znk4ruXyAGnZCDMGWiqFARxSbBz4q72a/ONVO5ZsdQ2pSGBk84Ob5srHKlaIidGM WzV3UZ5UdXz+J45zRmBOLz4hKtHmi+hgYC8WT8wCC0YsxvGmG8ImrMOHvAjpFZ/3spJdXrqYEIC8 EP+Tre03GWr9omP0+E6bMLyZXx1t5hj9
 
 
 
countproducts.php Присоединил к blockcategories.php 
 
вот так
public function install() 

include(dirname(__FILE__).'/countproducts.php'); 
if (!parent::install() OR 
!$this->registerHook('leftColumn') OR 
!$this->registerHook('header') OR
 
 
 
 

В category-tree-branch.tpl

поменял
<a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>

на 

<a href="{$node.link|escape:html:'UTF-8'}" {if $node.id == $currentCategoryId}class="selected"{/if} title="{$node.name}">{$node.name} {if isset($prod_count[$node.id])} {$prod_count[$node.id]} {else} (0) {/if}</a>

Edited by Methew2211 (see edit history)
Link to comment
Share on other sites

Подсказываю. Потому что товары привязаны к листьям. Родительские категории не содержат товара. На них ссылаются подкатегории. Подкатегории на подкатегории. И лишь самый нижний уровень скорее всего содержит сам товар. Чтобы узнать количество товара, нужно сперва выбрать подкатегории(все дочерние) и потом выбрать товары принадлежащие им. Все чуток сложнее чем вы предполагали.

Link to comment
Share on other sites

Там как бы не столь сложно, сколько ресурсоемко. Последовательность действий опишу приблизительно:

1) Получаете ID текущей категории.

2) Делаете выборку id_category, id_parent_category из prefix_category.

3) В массиве циклом перебираете все подкатегории данной категории и  их подкатегории, закидываете в список через ","

4) Делаете выборку count(*) по товарам "SELECT count(*) from prefix_product IN ($строка_с_айди_категорий_из_п_3)", в итоге получив заветное число. 

 

Вот приблизительно такая логика. Возможно не самый лучший вариант, но лучше я чет пока не вижу. Вам остается реализовать.

Link to comment
Share on other sites

В любой новой задаче, которой вы учитесь, вам не будет хватать опыта. А такие есть всегда. У вас есть задача(цель) и вам ее нужно решить. Все остальное лишь оправдания. Дорогу осилит идущий. ;-)

Link to comment
Share on other sites

×
×
  • Create New...