tazam

количество тем в категориях

Recommended Posts

Товарищи может кто то сталкивался , хотел бы допилить верхнее меню добавив в него количество объектов по категориям , к примеру "Частный сектор (43)"post-1965-0-08490600-1397141346_thumb.jp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

в принципе это возможно, нужно ковырять 

apps/system/lib/frontend/menu 

purecssmenu.php

purecssmenu_base.php

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотрим файл

/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;			}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Смотрим файл

/template/frontend/agency/main/main.php

Добавляем функцию генерации меню с подсчетом объявлений внутри (если нет такой, если есть, то модифицируем)

и что нам даст добавление? (getTemplateMenu ведь нигде не дёргается + private)

Изменено пользователем XTRO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и что нам даст добавление? (getTemplateMenu ведь нигде не дёргается + private)

все работает, проверенно на шаблонах agency и realia

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я сделал по другому (всё по аналогии, не совсем кошерно, т.к. дублирование в декораторе, но на скорую руку работает) :
В темплейте как обычно:

{$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() в виде опции (в конфиге рядом с выбором типа меню в следующих релизах )

post-1927-0-46557600-1397996879_thumb.pn

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и что нам даст добавление? (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());

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Там где нет вызова этой функции, нужно поменять старые вызовы на новые.

 

это уже не agency из demo :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас