iserg 1 Жалоба Опубликовано: May 16, 2016 Здравствуйте, 1. подскажите пожалуйста как вывести в главном меню первым пунктом выпадающий список-меню со всеми городами (название пункта: Все города). А когда человек выбрал в этом выпадающем меню город и перешел на его страничку то выводить название города вместо Все города. Т.е. главное меню будет приобретать такой вид к примеру Алушта ↓ | Аренда посуточная ↓ | Аренда долгосрочная ↓ | Продажа ↓ Желательно чтобы было также разделение на регионы в этом пункте. - Все города ↓ --- Большая Алушта ------- Алушта ------- Утес --- Большая Ялта ------- Ялта ------- Ливадия Т.е. главный пункт - выпадающие подпункты Регион1 Регион2... из которых выпадают пункты городов - меню третьего уровня. 2. еще когда юзер выбрал город - тогда для пунктов меню Аренда посуточная (выпадающие пункты 1кк, 2кк...), Аренда долгосрочная и пр. мне нужно чтобы добавлялся в url к пунктам меню само id выбранного города. К примеру чтобы url приобретал такой вид: /arenda-posutochno/1-komnatnye/?region_id=8&city_id=3 Сейчас получается когда к примеру в блоки фильтрации человек выбрал город (url приобрел вид /?city_id=3), а затем в главном меню выбрал Аренда посуточная - то параметры города при переходе теряются и опять выводится по всем городам, опять ему нужно в блоке Фильтр выставлять регион и город. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iserg 1 Жалоба Опубликовано: May 17, 2016 вот это я озадачил :): Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iserg 1 Жалоба Опубликовано: May 17, 2016 Решение компромиссное нашел тут - только переделал немного по-другому. Добавил города через админку - Контент - Меню (/admin/index.php?action=menu) - создал первый главный пункт Города (url его #) и добавил подпункты с названием городов (их url ?city_id=X) где X id-шник города. Для этого как писали на форуме отредактировал /template/frontend/realia/main/main.php заменил private function getTemplateMenu($menues=array()){ . . . }); на private function getTemplateMenu($menues=array()){ //remove comment from next string for testing //unset($_SESSION['_site_cache']['nave_menu']); $DBC=DBC::getInstance(); require_once(SITEBILL_DOCUMENT_ROOT.'/template/frontend/realia/main/realia_menu_decorator.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_implements.php'); require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php'); $SM=new Structure_Manager(); $structure=$SM->loadCategoryStructure(); $DBC=DBC::getInstance(); $add_points=array(); $additional_menues=array(); $ids=array(); if(!empty($menues)){ foreach($menues as $m){ if($m['id']==0){ $m['href']=$this->getServerFullUrl().'/'; }else{ if(isset($_SESSION['_site_cache']['nave_menu'][$m['id']])){ $add_points[$m['id']]=$_SESSION['_site_cache']['nave_menu'][$m['id']]; }else{ $ids[]=$m['id']; } } $additional_menues[$m['id']]=$m; } if(!empty($ids)){ $query='SELECT * FROM '.DB_PREFIX.'_menu_structure WHERE menu_id IN ('.implode(',', $ids).') ORDER BY sort_order'; $stmt=$DBC->query($query); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ar['url']=trim($ar['url']); if($ar['url']!='' && 0!==strpos($ar['url'], 'http:')){ $ar['url'] = trim($ar['url'], '/'); } $add_points[$ar['menu_id']][]=$ar; $_SESSION['_site_cache']['nave_menu'][$ar['menu_id']]=$add_points[$ar['menu_id']]; } } } } if(!empty($additional_menues)){ $behind=array(); $after=array(); foreach ($additional_menues as $k=>$ad_menu){ if($ad_menu['position']=='behind'){ $behind[]=$ad_menu; }else{ $after[]=$ad_menu; } } if(!empty($behind)){ $behind=array_reverse($behind); } $additional_menues=array_merge($behind, $after); foreach ($additional_menues as $ad_menu){ $k=$ad_menu['id']; $indexes=array_keys($structure['catalog']); sort($indexes); $last_index=end($indexes)+1; if($ad_menu['position']=='behind'){ array_unshift($structure['childs'][0], $last_index); }else{ $structure['childs'][0][]=$last_index; } if(isset($ad_menu['href']) && $ad_menu['href']!=''){ $href=trim($ad_menu['href'], '/'); }else{ $href='#'; } $structure['catalog'][$last_index]=array('url'=>$href, 'name'=>$ad_menu['title']); if(isset($add_points[$k]) && !empty($add_points[$k])){ $current_index=$last_index+1; foreach ($add_points[$k] as $ad_point){ $structure['catalog'][$current_index]=array('url'=>$ad_point['url'], 'name'=>$ad_point['name']); $structure['childs'][$last_index][]=$current_index; $current_index++; } } } } return Realia_Menu_Decorator::getMenu($structure); } и $this->template->assert('navmenu', $this->getTemplateMenu()); на $menues=array(array('id'=>24,'title'=>'Города','position'=>'behind','href'=>'#')); /*наш набор пунктов*/$this->template->assert('navmenu', $this->getTemplateMenu($menues)); /*тут мы его передали в декоратор*/ Ну корявенько - ну хоть как-то. Спасибо за вменяемый форум! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chernetskiy 469 Жалоба Опубликовано: May 18, 2016 В 17.05.2016 в 18:38, iserg сказал: вот это я озадачил :): Не уверен, что кто-то озадачился А с другой стороны, зачем такая сложная подчиненность справочников? Захочу у вас на сайте найти предложения поиском по Алуште, мне надо догадаться, что искать надо в Большой Алуште? Да я название такое впервые вижу, хорошо что там слово Алушта присутствует... Думаю, что ваша примочка больше во вред чем на пользу посетителям. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
iserg 1 Жалоба Опубликовано: May 18, 2016 Так захотел клиент. Но вообще когда в фильтре в сайдбаре выбрал город, отфильтровал, а затем кликнул в главном меню тип недвижимости, перешел и заново в фильтре нужно выбирать город, я считаю, что главное меню может и «подыграть» пользователю не сбрасывая настройки города в фильтре - это правильно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах