We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17124
    • 6 Posts
    На странице имеется 2 вызова wayfinder, один для документов 1го уровня
    [[Wayfinder? &startId=`0` &level=`1` &outerTpl=`menuTable` &rowTpl=`menuTd` &hereTpl=`menuActive` &activeParentRowTpl=`menuActive`]]

    другой - для 2го уровня:
    [[Wayfinder? &startId=`21` &level=`2` &outerTpl=`leftMenuUl` &rowTpl=`leftMenuLi` &hereTpl=`leftMenuActive`]] 


    Необходимо сделать следующее: если активен документ 2го меню, то в меню 1го уровня должен быть активен соответствующий родительский документ. Измучился. Полез править код сниппета, однако это еще более усугубило проблему. В чем ошибка? Как правильно вызывать сниппеты?
      • 785
      • 2,113 Posts
      Если ничего не править, а использовать стандартные шаблоны, так и будет – для родителей текущей страницы будет задаваться <li class="active">. А что получается в измененных шаблонах – неизвестно.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 17124
        • 6 Posts
        В моем случае использование стандартных шаблонов не представляется возможным.
        Неужели нет более простого решения, чем правка сниппета?
          • 785
          • 2,113 Posts
          Quote from: LightSight at Nov 11, 2009, 12:14 PM

          В моем случае использование стандартных шаблонов не представляется возможным.
          Неужели нет более простого решения, чем правка сниппета?
          А кто сказал, что нужно править сниппет? Просто делая собственные шаблоны, надо следовать правилам данного сниппета.
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 17124
            • 6 Posts
            Подправил сниппет. Может кому пригодится..

            Реализовал требуемое следующим образом:

            в 1ый вызов добавил &bgColor=’1’ - показываю, что нужно изменить цвет фона ячейки, если дочерний документ активен.

            в массив $wf->_config, отправляемый в wayfinder.inc, добавляю
            'bgColor' => isset($bgColor) ? $bgColor: FALSE


            в wayfinder.inc в тело функции renderRow() добавляю:
            $id_temp = $modx->getParent($modx->documentIdentifier);
            if ($phArray[8] == $id_temp['id']) {
               $phArray[12] = 'style=\'background-color:#000000;vertical-align:middle\'';   }

            $phArray[8] - здесь хранится id выводимого элемента меню,
            $phArray[12] - сюда записываю нужный стиль для выводимого элемента меню, если он является родителем текущему документу.

            В этой же функции $phArray выглядит так:
                    $phArray = array($useSub,$useClass,$classNames,$resource['link'],$resource['title'],$resource['linktext'],$useId,$resource['link_attributes'],$resource['id'],$resource['introtext'],$resource['description'],$numChildren,'');


            Соответственно массив $placeHolders определяется следующим образом:
            	var $placeHolders = array(
            		'rowLevel' => array('[+wf.wrapper+]','[+wf.classes+]','[+wf.classnames+]','[+wf.link+]','[+wf.title+]','[+wf.linktext+]','[+wf.id+]','[+wf.attributes+]','[+wf.docid+]','[+wf.introtext+]','[+wf.description+]','[+wf.subitemcount+]','[+wf.bgColor+]'),
            		'wrapperLevel' => array('[+wf.wrapper+]','[+wf.classes+]','[+wf.classnames+]'),
            		'tvs' => array(),
            	);
              • 785
              • 2,113 Posts
              Quote from: LightSight at Nov 11, 2009, 10:42 PM

              Подправил сниппет. Может кому пригодится..
              Если кто-то подумает, что ему это может пригодиться, то тому надо еще подумать. Всего-то и надо было в нужном месте шаблона поставить [+wf.classes+] и задать при вызове параметр &hereClass. А в более сложных случаях можно создать свой шаблон activeParentRowTpl, но менять код сниппета в любом случае вряд ли нужно.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 17124
                • 6 Posts
                Quote from: AKots at Nov 12, 2009, 03:47 AM

                Quote from: LightSight at Nov 11, 2009, 10:42 PM

                Подправил сниппет. Может кому пригодится..
                Если кто-то подумает, что ему это может пригодиться, то тому надо еще подумать. Всего-то и надо было в нужном месте шаблона поставить [+wf.classes+] и задать при вызове параметр &hereClass. А в более сложных случаях можно создать свой шаблон activeParentRowTpl, но менять код сниппета в любом случае вряд ли нужно.

                Я был бы рад прописать стили в &hereClass и подобных параметрах, однако в моем случае меню требует создания своих шаблонов для корректного отображения, при этом параметр &activeParentRowTpl в моей ситуации не работает. Это вынудило меня прибегнуть к изменению кода сниппета, которое не дает никаких последствий относительно работы стандартных вызовов.
                  • 785
                  • 2,113 Posts
                  Дело хозяйское, хотите – правьте. Я лично не встречал меню, которое нельзя было бы описать без исправления кода. И, несмотря на туманные намеки о невозможности использования обычных средств, пока никаких свидетельств этого не видно. Но впрочем, раз проблема решена, так и говорить больше не о чем.
                    Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                    Статьи о MODx, регулярно новые публикации
                    • 29487
                    • 385 Posts
                    LightSight

                    В самом первом вызове сниппета level=`2` должно быть. Это старый баг Wayfinder с уровнями и activeParentRowTpl, который в более сложных случаях лечили с помощью замены

                    } elseif ($resource['isfolder'] && $this->_templates['activeParentRowTpl'] && ($resource['level'] < $this->_config['level'] || $this->_config['level'] == 0) && $this->isHere($resource['id'])) {
                    


                    на

                    } elseif ($resource['isfolder'] && $this->_templates['activeParentRowTpl'] && $resource['id'] != $modx->documentObject['id'] && $this->isHere($resource['id'])) {
                    
                      • 785
                      • 2,113 Posts
                      Quote from: Temus at Nov 12, 2009, 12:47 PM

                      Это старый баг Wayfinder
                      А это точно баг? Если рассматривать с точки зрения меню (а не сайта), если нет вложенных документов (а их нет, так как ограничен уровень вложенности), то шаблон для папок не следует использовать. А для решения проблем активности вложенных документов, не отображающихся в меню, должно хватать &hereClass. Так что, как мне кажется, это было сделано специально.
                        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                        Статьи о MODx, регулярно новые публикации