© Сделано на LiveStreet
Дизайн - ©2009 MODx RED Group
/* Snippet WayfinderKSV
* Author: Sergey Kravtsov
* Author email: sergey.kravtsov@jarstudio.com.ua
* Params: mode (to swich menu type)
*/
//Получаем текущий контекст, в принципе не обязательно, но у меня многосайтовая стуктура
$context=$modx->getOption('context_name')."_";
switch($mode) //В вызове сниппета будем указывать режим
{
case 'topmenu': //Верхнее меню
$key=$context.'wftopmenu'; //Название ключа кэша
$snippet='Wayfinder'; //Дальше идут параметры Wayfinder, без каких-то особенностей
$params=array(
'startId' => 0,
'outerTpl'=>'topMenuOuterTpl',
'innerTpl'=>'topMenuInnerTpl',
'rowTpl'=>'topMenuRowTpl',
'level'=>4
);
break;
case 'production'://Боковое меню
$key=$context.'wfprodmenu';//Название ключа кэша
$snippet='Wayfinder'; //Дальше идут параметры Wayfinder
$params=array(
'startId' => $modx->getOption('product_id'),
'hereClass'=>' ', //Здесь указываем пробелы, чтобы Wayfinder не добавлял классов
'selfClass'=>' ', //Здесь указываем пробелы, чтобы Wayfinder не добавлял классов
'rowTpl'=>'sideMenuRowTpl',
'rowIdPrefix'=>'sm_', //Это нужно для фильтрации ниже
'levelClass'=>'level_', //Это нужно для фильтрации ниже
'outerClass'=>'prodmenu',
'level'=>4
);
break;
}
$cached_wf = $modx->cacheManager->get($key); //Получаем сохраненную версию из кэша
if(!$cached_wf ) //Если не найдено
{
$wf= $modx->runSnippet($snippet,$params); //Запускаем Wayfinder
$cacheres=$modx->cacheManager->set($key,$wf,7200); //Кэшируем то что он выдаст
}
else $wf=$cached_wf;
if($mode=='production' ) //Если боковое меню, фильтруем
{
$id=$modx->resource->get('id');
$parents=$modx->getParentIds($id);
$root_parents=array(0,$modx->getOption('product_id'));
$parents = array_diff($parents, $root_parents);
$find=array();
$replace=array();
$i=0;
foreach($parents as $p){
$find[$i]='id="sm_'.$p.'" class="';
$replace[$i]=$find[$i].' current '; //Всем "родительских" узлов в меню ставим класс 'current'
$i++;
}
$find[$i]='id="sm_'.$id.'" class="';
$replace[$i]=$find[$i].' active current '; //Текущему документу ставим 'active current'
$wf=str_replace($find,$replace,$wf);
}
echo $wf;
#sidemenu-box ul.prodmenu li.level_2,
#sidemenu-box ul.prodmenu li.level_3,
#sidemenu-box ul.prodmenu li.level_4,
#sidemenu-box ul.prodmenu li.level_5,
#sidemenu-box ul.prodmenu li.level_6{
display:none;
}
#sidemenu-box ul.prodmenu li.current ul li.level_2,
#sidemenu-box ul.prodmenu li.current ul li.current ul li.level_3,
#sidemenu-box ul.prodmenu li.current ul li.current ul li.current ul li.level_3,
#sidemenu-box ul.prodmenu li.current ul li.current ul li.current ul li.current ul li.level_4,
#sidemenu-box ul.prodmenu li.current ul li.current ul li.current ul li.current ul li.current ul li.level_5{
display:inherit;
}[[WayfinderKSV? &mode=`production` ]]