Замена Wayfinder на pdoMenu
Привет!
Прошу прощения за нубство, но не понял, как заменить такую конструкцию от Wayfinder и UltimateParent на подобную от pdoMenu и pdoField:
Заменил на такую конструкцию, но результат не тот:
Это работает, но с UltimateParent
Что я делаю не так?
Прошу прощения за нубство, но не понял, как заменить такую конструкцию от 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`]]
Что я делаю не так?
Комментарии: 7
Не совсем понятно, что Вам требуется.
Конструкция
Как я понимаю, логика такая: «если ID открытого ресурса такой же как у пункта меню, то вывести topLevel, иначе subLevel»?
Если так, то вообще не надо огород городить:
Конструкция
[[UltimateParent? &id=`[[+wf.docid]]`]]
выдает просто ID текущего ресурса.Как я понимаю, логика такая: «если ID открытого ресурса такой же как у пункта меню, то вывести topLevel, иначе subLevel»?
Если так, то вообще не надо огород городить:
[[+id:is=`[[*id]]`:then=`topLevel`:else=`subLevel`]]
Или я не понял задачу? [[pdoField? &id=`[[+id]]` &topLevel =`0`]]
— но вызывать в каждом пункте меню такую проверку не лучшим образом скажется на производительности. Лучше вообще пересмотреть подход к решению.Можно, например, использовать атрибуты ссылки документов, дописав в элементы верхнего уровня «topLevel», а в вызове pdoMenu проверять уже его наличие.
UPD:
Или же решить задачу вообще методами css:
Или же решить задачу вообще методами css:
.container > .ul {} //topLevel
.container > .ul .ul {} //subLevel
Благодарю, но CSS не подоходит. Требуется интегрировать готовое решение. На сколько затормозит сайт при использовании проверки
[[pdoField? &id=`[[+id]]` &topLevel =`0`]]
?
Зависит от количества выводимых пунктов pdoMenu -> каждый пункт = один запрос к базе.
Вы можете замерить разницу, используя следующие плейсхолдеры где-нибудь в шаблоне:
Также есть дополнение debugParser, выполняющий схожий функционал (но более развернутый).
Вы можете замерить разницу, используя следующие плейсхолдеры где-нибудь в шаблоне:
[^qt^] - время на запросы к базе данных
[^q^] - запросов к базе данных
[^p^] - время на работу PHP скриптов
[^t^] - общее время на генерацию страницы
[^s^] - источник содержимого (база или кэш)
Также есть дополнение debugParser, выполняющий схожий функционал (но более развернутый).
А чем работающий вариант не устраивает?
[[+id:is=`[[UltimateParent? &id=`[[+id]]`]]`:then=`topLevel`:else=`subLevel`]]
Вопрос в выпадающем бутстрап-меню с вложенными меню, вот его код:
В документацию pdoMenu вникнуть сложно, параметр tplParentRow перекрывает всё. Как использовать параметры (и какие) для внутренних контейнеров с потомками, не нашёл. Параметр tplCategoryFolder вообще что-то неизведанное, не цепляется никоим образом. Да и всё равно проверку ставить для классов: dropdown или dropdown dropdown-submenu.
Может кто что-нибудь подскажет?
<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.
Может кто что-нибудь подскажет?
А чем работающий вариант не устраивает?Хочется все инструменты из одной коробки.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.