Замена Wayfinder на pdoMenu

Привет!

Прошу прощения за нубство, но не понял, как заменить такую конструкцию от Wayfinder и UltimateParent на подобную от pdoMenu и pdoField:

[[+wf.docid:is=`[[UltimateParent? &id=`[[+wf.docid]]`]]`:then=`topLevel`:else=`subLevel`]]

Заменил на такую конструкцию, но результат не тот:

[[+id:is=`[[pdoField? &id=`[[+id]]`]]`:then=`topLevel`:else=`subLevel`]]

Это работает, но с UltimateParent

[[+id:is=`[[UltimateParent? &id=`[[+id]]`]]`:then=`topLevel`:else=`subLevel`]]

Что я делаю не так?
Влад
29 октября 2015, 06:44
modx.pro
2 335
+1

Комментарии: 7

Павел Романов
29 октября 2015, 11:51
0
Не совсем понятно, что Вам требуется.
Конструкция
[[UltimateParent? &id=`[[+wf.docid]]`]]
выдает просто ID текущего ресурса.
Как я понимаю, логика такая: «если ID открытого ресурса такой же как у пункта меню, то вывести topLevel, иначе subLevel»?
Если так, то вообще не надо огород городить:
[[+id:is=`[[*id]]`:then=`topLevel`:else=`subLevel`]]
Или я не понял задачу?
    Максим Кузнецов
    29 октября 2015, 13:33
    0
    [[pdoField? &id=`[[+id]]` &topLevel =`0`]]
    — но вызывать в каждом пункте меню такую проверку не лучшим образом скажется на производительности. Лучше вообще пересмотреть подход к решению.

    Можно, например, использовать атрибуты ссылки документов, дописав в элементы верхнего уровня «topLevel», а в вызове pdoMenu проверять уже его наличие.
      Максим Кузнецов
      29 октября 2015, 13:44
      0
      UPD:

      Или же решить задачу вообще методами css:
      .container > .ul {} //topLevel
      .container > .ul .ul {} //subLevel
        Влад
        29 октября 2015, 15:51
        0
        Благодарю, но CSS не подоходит. Требуется интегрировать готовое решение. На сколько затормозит сайт при использовании проверки
        [[pdoField? &id=`[[+id]]` &topLevel =`0`]]
        ?
          Максим Кузнецов
          29 октября 2015, 16:10
          +2
          Зависит от количества выводимых пунктов pdoMenu -> каждый пункт = один запрос к базе.

          Вы можете замерить разницу, используя следующие плейсхолдеры где-нибудь в шаблоне:
          [^qt^] - время на запросы к базе данных
          [^q^] - запросов к базе данных
          [^p^] - время на работу PHP скриптов
          [^t^] - общее время на генерацию страницы
          [^s^] - источник содержимого (база или кэш)

          Также есть дополнение debugParser, выполняющий схожий функционал (но более развернутый).
      Stan Ezersky
      29 октября 2015, 19:26
      0
      А чем работающий вариант не устраивает?

      [[+id:is=`[[UltimateParent? &id=`[[+id]]`]]`:then=`topLevel`:else=`subLevel`]]
        Влад
        29 октября 2015, 19:44
        +1
        Вопрос в выпадающем бутстрап-меню с вложенными меню, вот его код:

        <ul class="nav navbar-nav">
                <li><a href="#">Link</a></li>
                <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown 1<b class="caret"></b></a>
                  <ul class="dropdown-menu">
                    <li><a href="#">Dropdown Link 1</a></li>
                    <li><a href="#">Dropdown Link 2</a></li>
                    <li><a href="#">Dropdown Link 3</a></li>
                    <li class="divider"></li>
                    <li class="dropdown dropdown-submenu">
                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown Link 4</a>
                      <ul class="dropdown-menu">
                        <li><a href="#">Dropdown Submenu Link 4.1</a></li>
                        <li><a href="#">Dropdown Submenu Link 4.2</a></li>
                      </ul>
                    </li>
                    <li class="dropdown dropdown-submenu">
                      <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown Link 5</a>
                      <ul class="dropdown-menu">
                      <li><a href="#">Dropdown Submenu Link 5.1</a></li>
                      <li class="dropdown dropdown-submenu"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown Submenu Link 5.4</a>
                        <ul class="dropdown-menu">
                          <li><a href="#">Dropdown Submenu Link 5.4.1</a></li>
                          <li class="dropdown dropdown-submenu"><a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown Submenu Link 5.4.3</a>
                            <ul class="dropdown-menu">
                              <li><a href="#">Dropdown Submenu Link 5.4.3.1</a></li>
                            </ul>
                          </li>
                        </ul>
                      </li>
                    </ul>
                  </li>
                </ul>
              </li>
            </ul>
        Вот его вывод:
        [[pdoMenu?
                  &startId=`0`
                  &parents=`0`
                  &level=`10`
                  &firstClass=``
                  &lastClass=``
                  &tplOuter=`@INLINE <ul[[+classes]]>[[+wrapper]]</ul>`
                  &outerClass=`nav navbar-nav`
                  &tplParentRow=`navbar.pt.row`
                  &parentClass=`dropdown`
                  &innerClass=`dropdown-menu`
                ]]
        и чанк navbar.pt.row
        <li class="[[+id:is=`[[UltimateParent? &id=`[[+id]]`]]`:then=`dropdown`:else=`dropdown dropdown-submenu`]]">
          <a id="[[+id]]" href="[[+link]]" class="dropdown-toggle" data-toggle="dropdown">
            [[+menutitle]]  
            [[+id:is=`[[UltimateParent? &id=`[[+id]]`]]`:then=`<b class="caret"></b>`:else=``]]
          </a>
          [[+wrapper]]
        </li>
        Эта конструкция работает. В ней проверяется, не верхний ли это уровень меню. Если да, подставляется класс dropdown и
        <b class="caret"></b>
        , если нет, класс: dropdown dropdown-submenu. Собственно, ничего вроде бы сложного.

        В документацию pdoMenu вникнуть сложно, параметр tplParentRow перекрывает всё. Как использовать параметры (и какие) для внутренних контейнеров с потомками, не нашёл. Параметр tplCategoryFolder вообще что-то неизведанное, не цепляется никоим образом. Да и всё равно проверку ставить для классов: dropdown или dropdown dropdown-submenu.

        Может кто что-нибудь подскажет?

        А чем работающий вариант не устраивает?
        Хочется все инструменты из одной коробки.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7