pdoMenu, fenom и вывод id

Привет. Странная штука.
В чанке для tplInner не выводится id обрабатываемого ресурса через fenom.
При чем с синтаксисом modx все работает — [[+id]] выводит правильный id. А {$id} не выводит ничего. Перепробовал, кажется, все:
{$_pls['id']}
{$_modx->getPlaceholder('id')}
{'id' | placeholder}
Во всех вариантах пустой вывод.

При чем в шаблоне вернего уровня {$id} работает.

Как можно решить эту проблему?
dopeless
06 августа 2019, 02:18
modx.pro
1 872
0

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

ElenaLelo
06 августа 2019, 09:16
0
tplInner это же обертка, разве она содержит какие либо плейсхолдеры кроме как [[+wrapper]], [[+classnames]]...?
    ElenaLelo
    06 августа 2019, 09:40
    0
    Если оставить tplInner пустым внутри, то выведет все плейсхолдеры, которые содержаться в чанке. Вызов:
    [[!pdoMenu?
        &parents=`0`
        &level=`2`
        &tplInner=`test`
        ]]
    Результат:
      dopeless
      06 августа 2019, 12:48
      0
      Хм… спасибо.
      Только непонятно, почему тогда [[+id]] работает…
        Максим Кузнецов
        06 августа 2019, 12:57
        0
        У вас, случайно, не inline-чанк?
        Возможно, в памяти системы уже выставлен плейсхолдер [[+id]] и родной парсер просто подхватывает его.
          dopeless
          06 августа 2019, 13:06
          0
          Нет. не инлайн. Отдельный чанк.

          При чем, если я пишу что-то вроде

          {var $rid = '[[+id]]'}, а потом вывожу, как {$rid} — он выводит правильное значение. Только в $rid он сохраняет всю конструкцию [[+id]], а уже потом ее обрабатывает
            ElenaLelo
            06 августа 2019, 13:10
            0
            Оберните подпункты в tplParentRow, а в tplInner оставьте только wrapper.
              dopeless
              06 августа 2019, 13:19
              0
              Мне надо подгрузить в меню «пункты», которые не являються ресурсами. Грубо говоря, на некоторых страницах есть внутреннее меню, которое скролит страницу на нужное место, но это все один ресурс. Поэтому, я во внутреннем меню проверяю, есть ли на этой странице TV, с таким «меню». И в дальнейшем мне надо сделать что-то типа

              {var $scrollMenu = json_decode($id | resource : 'scrollMenu', true)}
              <ul class="submenu {$classnames}">
                  {if $scrollMenu | len > 0}
                      {foreach $scrollMenu as $idx => $item}
                      {var $alias = $item.title | strip | lowercase | replace : " " : "-"}
                      <li>
                          <a href="{$id | url : ['scheme' => 'full'] : ['goto' => $alias]}">{$item.title}</a>
                      </li>
                      {/foreach}
                  {/if}
                 {$wrapper}
              </ul>
              И меню в дальнейшем должно выглядеть как-то так:

              — Услуги (ресурс 1)
              — — Покраска (ресурс 2, скрол на раздел покраска)
              — — Рихтовка (ресурс 2, скрол на раздел рихтовка)
              — — Полировка (ресурс 2, скрол на раздел полировка)
              — — Продажа инструментов (ресурс 3)

              Можно, конечно, подргружать дополнительные пункты яваскриптом, но хотелось обойтиись без дополнительного js
                ElenaLelo
                06 августа 2019, 13:25
                0
                Ну вот все это и поместите tplParentRow. Или я не поняла
                Вот пример. Было:
                &tplInner=`@CODE: <ul>[[+wrapper]]</ul>`
                &tplParentRow=`@CODE: <li>[[+menutitle]]</li>[[+wrapper]]`
                Стало:
                &tplInner=`@CODE: [[+wrapper]]`
                &tplParentRow=`@CODE: <li>[[+menutitle]]</li><ul>[[+wrapper]]</ul>`
                  dopeless
                  06 августа 2019, 13:28
                  0
                  Так мне перед [[+wrapper]] надо добавить пункты меню вручную, предварительно проверив, есть ли они в том ресурсе, коотрый обрабатывается в данный момент… или в tplParentRow есть плейсхолдер id?
                    ElenaLelo
                    06 августа 2019, 13:33
                    0
                    Да, содержит id.
                    <ul>                                               // tplOuter
                        <li>Первый пункт. Содержит подменю. Активный   // tplParentRowActive
                            <ul>                                       // tplInner
                                <li>Первый подпункт, текущий</li>      // tplInnerHere
                                <li>Второй подпункт</li>               // tplInnerRow
                            </ul>
                        </li>
                        <li>Второй пункт. Содержит подменю             // tplParentRow
                            <ul>                                       // tplInner
                                <li>Первый подпункт</li>               // tplInnerRow
                                <li>Второй подпункт</li>               // tplInnerRow
                            </ul>
                        </li>
                        <li>Третий пункт</li>                          // tpl
                    </ul>
                      dopeless
                      06 августа 2019, 13:34
                      0
                      Попробую, спасибо
                        dopeless
                        06 августа 2019, 14:38
                        0
                        Не, так не выйдет ничего. [[+wrapper]] строит полностью сабменю —
                        • … и так далее. А мне надо всередину пункты дополнительные натыкать ((
                        ElenaLelo
                        06 августа 2019, 15:04
                        0
                        В tplInner тоже не получится в середину. В MODX есть тип ресурса «ссылка», создаете и в поле «ссылка» указываете ссылку с якорем, куда нужно перебросить. Потом обычный вызов pdoMenu, документы сортируете и группируете как вам нужно.

                        dopeless
                        06 августа 2019, 15:07
                        0
                        Я сделал. В tplInner оставил только {$wrapper}, а в tpl

                        <ul class="mobile-nav__secondary">
                                {foreach $sections as $idx => $section}
                                {var $alias = $section.title | strip | lowercase | replace : " " : "-"}
                                <li>
                                    <a href="{$id | url : ['scheme' => 'full'] : ['goto' => $alias]}">{$section.title}</a>
                                </li>
                                {/foreach}
                                {$wrapper}
                            </ul>
    Дмитрий Мансуров
    13 декабря 2020, 16:03
    0
    Я предложил правку, а там посмотрим
    https://github.com/bezumkin/pdoTools/pull/306

    Кому интересно, но лень разбираться в гитхабе
    то вот изменения
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      15