tazam 2 Жалоба Опубликовано: April 10, 2014 Товарищи может кто то сталкивался , хотел бы допилить верхнее меню добавив в него количество объектов по категориям , к примеру "Частный сектор (43)" Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TopRaN 235 Жалоба Опубликовано: April 10, 2014 в принципе это возможно, нужно ковырять apps/system/lib/frontend/menu purecssmenu.phppurecssmenu_base.php и не забываем о том что желательно делать копии а так же выносить и подключать файл по отдельному пути . иначе при обновлении модуля ваше изменение затрется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tazam 2 Жалоба Опубликовано: April 10, 2014 полез на шкаф за бубном , будет сегодня горячая ночка ) спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: April 15, 2014 Смотрим файл/template/frontend/agency/main/main.phpДобавляем функцию генерации меню с подсчетом объявлений внутри (если нет такой, если есть, то модифицируем) private function getTemplateMenu(){ require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/menu_decorator.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php'); $SM=new Structure_Manager(); $structure=$SM->loadCategoryStructure(); $data_structure=$SM->load_data_structure(0); foreach($structure['catalog'] as $cat_point){ $ch=0; $SM->getChildsItemsCount($cat_point['id'], $structure['childs'], $data_structure['data'][0], $ch); $data_structure['data'][0][$cat_point['id']]+=$ch; } foreach($structure['catalog'] as $id=>$cat_point){ if(!in_array($cat_point['id'], $structure['childs'][0])){ $structure['catalog'][$id]['name']=$structure['catalog'][$id]['name'].' ('.$data_structure['data'][0][$id].')'; } } $rs = Menu_Decorator::getMenu('purecss', $structure); return $rs; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
XTRO 154 Жалоба Опубликовано: April 20, 2014 (изменено) Смотрим файл/template/frontend/agency/main/main.phpДобавляем функцию генерации меню с подсчетом объявлений внутри (если нет такой, если есть, то модифицируем)и что нам даст добавление? (getTemplateMenu ведь нигде не дёргается + private) Изменено April 20, 2014 пользователем XTRO Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TopRaN 235 Жалоба Опубликовано: April 20, 2014 и что нам даст добавление? (getTemplateMenu ведь нигде не дёргается + private)все работает, проверенно на шаблонах agency и realia Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
XTRO 154 Жалоба Опубликовано: April 20, 2014 я сделал по другому (всё по аналогии, не совсем кошерно, т.к. дублирование в декораторе, но на скорую руку работает) :В темплейте как обычно:{$resp_menu}создал \apps\system\lib\frontend\menu\resp_menu.php:<?php/** * Resp menu class */class Resp_Menu extends Structure_Manager{ /** * Constructor */ function __construct() { $this->SiteBill(); } /** * Get resp menu * @param * @return */ function get_menu() { require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/menu_decorator.php'); //require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php'); $SM=new Structure_Manager(); $structure=$SM->loadCategoryStructure(); $data_structure=$SM->load_data_structure(0); foreach($structure['catalog'] as $cat_point){ $ch=0; $SM->getChildsItemsCount($cat_point['id'], $structure['childs'], $data_structure['data'][0], $ch); $data_structure['data'][0][$cat_point['id']]+=$ch; } foreach($structure['catalog'] as $id=>$cat_point){ if(!in_array($cat_point['id'], $structure['childs'][0])){ $structure['catalog'][$id]['name']=$structure['catalog'][$id]['name'].' ('.$data_structure['data'][0][$id].')'; } } $rs = Menu_Decorator::getMenu('resp_menu', $structure); return $rs; }}?>в apps\system\lib\frontend\menu\menu_decorator.php добавил выбор:case 'resp_menu' : { $function_name='getMenu_respmenu'; break; }и в конец класса:private static function getMenu_respmenu($category_structure){ $rs = '<ul class="menu">'; foreach ( $category_structure['childs'][0] as $item_id => $categoryID ) { if($category_structure['catalog'][$categoryID]['url']!=''){ if ( preg_match('/^http/', $category_structure['catalog'][$categoryID]['url']) ) { $rs .= '<li><a href="'.$category_structure['catalog'][$categoryID]['url'].'">'.$category_structure['catalog'][$categoryID]['name'].'</a>'; } else { $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$categoryID]['url'].'">'.$category_structure['catalog'][$categoryID]['name'].'</a>'; } }else{ $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/topic'.$categoryID.'.html">'.$category_structure['catalog'][$categoryID]['name'].'</a>'; } $rs .= self::getChildNodes_respmenu($categoryID, $category_structure, $current_category_id); $rs .= '</li>'; } $rs .= '</ul>'; return $rs; } private static function getChildNodes_respmenu($categoryID, $category_structure, $current_category_id) { if ( !is_array($category_structure['childs'][$categoryID]) ) { return ''; } $rs = '<ul style="z-index: 50">';//TODO move in css // foreach ( $category_structure['childs'][$categoryID] as $child_id ) { if($category_structure['catalog'][$child_id]['url']!=''){ $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/'.$category_structure['catalog'][$child_id]['url'].'">'.$category_structure['catalog'][$child_id]['name'].'</a>'; }else{ $rs .= '<li><a href="'.SITEBILL_MAIN_URL.'/topic'.$child_id.'.html"><span class="no-image">'.$category_structure['catalog'][$child_id]['name'].'</a>'; } if ( count($category_structure['childs'][$child_id]) > 0 ) { $rs .= self::getChildNodes_respmenu($child_id, $category_structure, $current_category_id); } $rs .= '</li>'; } $rs .= '</ul>'; return $rs; }в main.php в main() добавил } elseif ( $this->getConfigValue('menu_type') == 'respmenu' ) { require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/respmenu.php'); $resp_menu = new Resp_Menu(); $this->template->assert('resp_menu', $resp_menu->get_menu());Ну, и в \apps\config\admin\config_mask.php, чтобы в админке можно было выбрать тип, заменил на:$data_model['menu_type']['select_data'] = array('purecss'=>'purecss','slidemenu'=>'slidemenu','megamenu'=>'megamenu', 'respmenu'=>'respmenu');css по вкусу. Я юзал KickStart. Правда, этот вариант отработает до очередного обновления .Имхо, просто добавить getChildsItemsCount() в виде опции (в конфиге рядом с выбором типа меню в следующих релизах ) 1 Дмитрий Кондин reacted to this Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: April 21, 2014 и что нам даст добавление? (getTemplateMenu ведь нигде не дёргается + private)Там где нет вызова этой функции, нужно поменять старые вызовы на новые.Меняем вот это if ( $this->getConfigValue('menu_type') == 'purecss' ) { require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/purecssmenu.php'); $purecssmenu = new PureCSS_Menu(); $this->template->assert('slide_menu', $purecssmenu->get_menu()); } elseif ( $this->getConfigValue('menu_type') == 'onelevel' ) { require_once(SITEBILL_DOCUMENT_ROOT.'/apps/onelevelmenu/lib/onelevelmenu.php'); $onelevel = new Onelevel_Menu(); $this->template->assert('slide_menu', $onelevel->get_menu()); } else { require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/frontend/menu/slidemenu.php'); $slidemenu = new Slide_Menu(); $this->template->assert('slide_menu', $slidemenu->get_menu()); }на это$this->template->assert('slide_menu', $this->getTemplateMenu()); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
XTRO 154 Жалоба Опубликовано: April 21, 2014 Там где нет вызова этой функции, нужно поменять старые вызовы на новые. это уже не agency из demo Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах