Здравствуйте.
В стандартном модуле вывода категорий как меню
http://joomshopping.pro/download/module-category.html хочу сделать вывод категорий в зависимости от их вложения.
Уже доделывал, чтоб показывало количество вложенной продукции.
Сейчас выводит все одним списком подряд
Сделал, чтобы если выбираешь категорию, у которой есть вложения - подставляет ul li как надо, и тогда категории на одном уровне с выбранной отображаются рядом как li, а вложенные категории в ul. То есть многоуровневый список вроде норм.
Но если выделять дочернюю категорию, то строится начинает относительно нее, и все категории выше - тоже на уровне ее. А надо что бы дочерние все равно в ul были... никак не могу придумать, как это сделать.
Сейчас вот такой вариант:
код шаблона вывода default.php
<?php
<ul<?php if ($params->get('moduleclass_sfx')){ echo (" class=\"".$params->get('moduleclass_sfx')."\"");} ?>>
<?php
foreach($categories_arr as $key => $curr){
print $curr->html_tags_open;?>
<a href = "<?php print $curr->category_link; ?>"><?php print $curr->name; if ($params->get('show_count')){?><span class="count"><?php print " (".$countproducts_all[$key].")"; ?></span><?php }?>
<?php if ($show_image && $curr->category_image){?>
<img align = "absmiddle" src = "<?php print $jshopConfig->image_category_live_path."/".$curr->category_image?>" alt = "<?php print $curr->name?>" />
<?php } ?>
</a>
<?php print $curr->html_tags_close;?>
<?php } ?>
в html_tags_open и html_tags_close подставляются li или открывающие/закрывающие ul
файл с формированием данных helper.php
<?php
class jShopCategoriesHelper{
public static function getTreeCats($order, $ordering, $category_id, $categories_id, &$categories, $level=0){
if ($category_id){
if (isset($categories_id[$level])){
$cat = JTable::getInstance('category', 'jshop');
$cat->load($categories_id[$level]);
$cats = $cat->getSisterCategories($order, $ordering);
foreach ($cats as $key=>$value){
$value->level = $level;
if (in_array($value->category_id, $categories_id)){
$value->html_tags_open .= "<li>";
$categories[] = $value;
if ($value->category_id == $category_id){ //просматриваемая категория выделена, показываем подкатегории
$value->html_tags_open .= "<active>";
$value->html_tags_close .= "</active>";
$cat = JTable::getInstance('category', 'jshop');
$cat->load($categories_id[$level]);
$cat->category_id = $category_id;
$childs = $cat->getChildCategories($order, $ordering);
//список вложенных категорий
foreach ($childs as $key2=>$value2){
$value2->level = $level + 1;
$value2->html_tags_open .= "<li>";
$categories[] = $value2;
}
if ($childs){
$value->html_tags_close .= "<ul>";
$childs[count($childs)-1]->html_tags_close .= "</ul>";
}
//конец списка вложенных категорий
}
jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $categories, ++$level);
$level--;
} else { $categories[] = $value;
}
}
}
} else {
$cat = JTable::getInstance('category', 'jshop');
$cat->category_parent_id = 0;
$cats = $cat->getSisterCategories($order, $ordering);
foreach($cats as $key=>$value){
$cats[$key]->level = 0;
$value->html_tags_open = "<li>";
}
$categories = $cats;
$count = count($cats);
}
}
public static function getCatsArray($order, $ordering, $category_id, $categories_id = array()){
$res_arr = array();
jShopCategoriesHelper::getTreeCats($order, $ordering, $category_id, $categories_id, $res_arr, 0);
return $res_arr;
}
function getTotalItem($category_id){
$arrCate = array();
$arrCate = jShopCategoriesHelper::getAllSubcates($category_id);
if(empty($arrCate)){
return 0;
}
if(count($arrCate) == 1){
$where = " WHERE pc.category_id = ".$arrCate[0]. " ";
}else{
$strCate = implode(',',$arrCate);
$where = " WHERE pc.category_id IN (".$strCate.") ";
}
$db = &JFactory::getDBO();
$query = "SELECT COUNT(DISTINCT pc.product_id) AS total FROM `#__jshopping_products_to_categories` pc ".$where;
$db->setQuery($query);
$total = $db->loadObject();
return $total->total;
}
function getAllSubcates($category_id){
$lang = &JSFactory::getLang();
$db = &JFactory::getDBO();
$tmp[] = $category_id;
$query = "SELECT `".$lang->get('name')."` as name, category_id, category_parent_id, category_publish FROM `#__jshopping_categories`
where category_publish = '1' ORDER BY category_parent_id, ordering";
$db->setQuery($query);
$all_cats = $db->loadObjectList();
if(count($all_cats)) {
foreach ($all_cats as $key => $value) {
if(!empty( $value->category_parent_id ) && in_array($value->category_parent_id, $tmp)){
$tmp[] = $value->category_id;
}
}
}
return $tmp;
}
}
?>