Убрать из выборки первый уровень вызова pdoMenu

Приветствую сообщество!

В общем вопрос следующего характера, есть вот такая конструкция, например:
-Главная (id — 1)
-Категория 1 (id — 2)
--Подкатегория 1.1 (Раздел с тикетами) (id — 5)
--Подкатегория 1.2 (Раздел с тикетами) (id — 6)
--Подкатегория 1.3 (обычный документ) (id — 7)
-Категория 2 (id — 3)
--Подкатегория 2.1 (Категория товаров) (id — 8)
--Подкатегория 2.2 (Категория товаров) (id — 9)
--Подкатегория 2.3 (обычный документ) (id — 10)
-Служебные страницы (id — 4)

так вот, смысл в том, что мне надо соорудить меню! Но логика (как хотелось бы, чтобы она работала) должна работать следующим образом:
  • На главной отображается два элемента, тип выбор куда попасть в Категорию 1 или в Категорию 2 (это легко, при помощи pdoTools сделал, допустим, фигня)
  • Нажимаю на Подкатегория 1.1 и здесь должно быть только меню этой категории, т.е. так:
    --Подкатегория 1.1 (Раздел с тикетами)
    --Подкатегория 1.2 (Раздел с тикетами)
    --Подкатегория 1.3 (обычный документ)
  • соответственно во второй категории так же...
Вот теперь проблема в которую я уперся…
Дело в том, что как бы я не пытался динамически вызвать сниппет для построения меню, он выводит максимум только так:
[[pdoMenu?
&parents=`[[*parent]]`                   
&level=`1`
]]
Т.е. ровно до второго уровня как мне якобы и надо… НО! только если я нахожусь например здесь:
--Подкатегория 1.2 (Раздел с тикетами) (id — 6)
То да… однозначно он выводит меню того уровня который мне нужен! Далее… Проблемы продолжаются… Если я есесна перейду в один из созданных тикетов данного подраздела, то вся динами есесна пропадает!

В общем надеюсь, что задача ясна!

П.С.
Чтобы предотвратить наплыв комментов о том, почему бы не использовать жесткое назначение ID для родителя в вызове сниппета, отвечу… НЕ выход! Т.к. при этом теряется динамичность и придется создавать два разных типа шаблонов для одной категории и для другой или шаблоны или чанки городить, без разницы, костыли однозначно не выход!
Andrey
13 июня 2018, 16:24
modx.pro
1 816
+1

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

UDAV
13 июня 2018, 21:05
1
0
В parents указывай текущий id страницы.
    Andrey
    13 июня 2018, 21:43
    +1
    та емае! :D
    Я ж говорю не выход!
    Т.к. генерировать надо так:
    -Категория 1 (id — 2) — захожу сюда и генерируется меню так:
    --Подкатегория 1.1 (Раздел с тикетами) (id — 5)
    --Подкатегория 1.2 (Раздел с тикетами) (id — 6)
    --Подкатегория 1.3 (обычный документ) (id — 7)
    НО! Если я зайду например в дочерний документ подкатегории:
    --Подкатегории 1.2 (Раздел с тикетами) (id — 6)
    то меню начнет генерироваться с учетом её родителя, а именно вот как так:
    --Подкатегории 1.2 (Раздел с тикетами) (id — 6)
    И все, больше в меню по идее ничего не будет!
    + ко всему теряется динамичность, ведь мне надо чтобы меню само генерировалось для обоих категории со своими подкатегориями!
      Андрей
      14 июня 2018, 01:00
      +1
      Если всё правильно понял, то здесь поможет pdoField, а конкретно его возможность UltimateParent.
        Andrey
        14 июня 2018, 01:35
        0
        ууу, где ж вы раньше были :DDD
        Да, сам уже дошел до этого, сделал вот такой костыль:
        [[pdoMenu?
        &parents=`[[*id:pdofield=`{«topLevel»:2,«field»:«id»}`]]`
        ]]
        Таким образом, теперь все вызывается как надо!
        Но Вам тем не менее спасибо, за подтверждение! :D
    Баха Волков
    14 июня 2018, 03:35
    0
    Мне кажется или есть выход проще если уровень вложенности не изменится. По идее можно просто проверить parent текущего документа:

    [[pdoMenu?
    &parents=`[[*parent:is=`0`:then=`[[*id]]`:else=`[[*parent]]`]]`
    ]]

    т.е. если документ в корне значит скормить id иначе скормить parent
      Сергей
      15 июня 2018, 18:23
      0
      Если я правильно понял то вот ссылка. Если решит проблему хорошо, если нет то скину позже как оставить одинаковое меню на 3 уровнях вложенности на одном шаблоне. Просто с телефона.
      Этот вариант наверное костыль, т.к сделал его методом тыка)
        Сергей
        15 июня 2018, 18:25
        0
        {set $a = [$id]}
                        
                        {if $_modx->resource.parent in list $a}
             
                        {'!pdoMenu' | snippet : [
                            'parents' => $_modx->resource.id,
                            'level' => '1',
                            'tplOuter' => '@INLINE  <div style="padding: 15px; text-align: center!Important;">{$wrapper}</div>',
                            'tpl' => '@INLINE   <h2 style="padding: 15px; margin:0; display: inline-block; font-size:20px;" class="text_bold">
                                                    <a href="{$link}">{$menutitle}</a>
                                                </h2>{$wrapper}'
                        ]}
                        
                        
                        {elseif $_modx->resource.parent in list $a}
                        
                        {'!pdoMenu' | snippet : [
                            'parents' => $_modx->resource.parent,
                            'level' => '1',
                            'tplOuter' => '@INLINE  <div style="padding: 15px; text-align: center!Important;">{$wrapper}</div>',
                            'tpl' => '@INLINE   <h2 style="padding: 15px; margin:0; display: inline-block; font-size:20px;" class="text_bold">
                                                    <a href="{$link}">{$menutitle}</a>
                                                </h2>{$wrapper}'
                        ]}
                        
                        {elseif ($_modx->resource.parent | resource : "parent") in list $a}
                         {'!pdoMenu' | snippet : [
                            'parents' => $_modx->resource.parent,
                            'level' => '1',
                            'tplOuter' => '@INLINE  <div style="padding: 15px; text-align: center!Important;">{$wrapper}</div>',
                            'tpl' => '@INLINE   <h2 style="padding: 15px; margin:0; display: inline-block; font-size:20px;" class="text_bold">
                                                    <a href="{$link}">{$menutitle}</a>
                                                </h2>{$wrapper}'
                        ]}
                        {else}
                        {'!pdoMenu' | snippet : [
                            'parents' => ($_modx->resource.parent | resource : "parent"),
                            'level' => '1',
                            'tplOuter' => '@INLINE  <div style="padding: 15px; text-align: center!Important;">{$wrapper}</div>',
                            'tpl' => '@INLINE   <h2 style="padding: 15px; margin:0; display: inline-block; font-size:20px;" class="text_bold">
                                                    <a href="{$link}">{$menutitle}</a>
                                                </h2>{$wrapper}'
                        ]}
                        {/if}
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8