pdoMenu – Как изменить название пункта Меню?

Доброе время суток уважаемое сообщество.

Самое обычное простое pdoMenu.
Размещается на сайте в Шапке и Сайдбаре.
Задача: Только в Сайдбаре – изменить название некоторых пунктов, menutitle. По id Ресурса.

Прописал в параметрах:
&tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[*parent:is=`2`:then=`Тест`:else=`[[+menutitle]]`]]</a>[[+wrapper]]</li>`
Код [[*parent:is=`2`:then=`Тест`:else=`[[+menutitle]]`]] не работает.
Только изучаю MODX, просьба помочь новичку.
Спасибо.

PS Поиском пользовался, ответ не найден.
Iskatel
14 мая 2018, 17:42
modx.pro
2 642
0

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

Николай Каленников
15 мая 2018, 01:42
0
Здравствуйте. В данном случае, в конструкции
[[*parent:is=`2`:then=`Тест`:else=`[[+menutitle]]`]]
необходимо использовать
+parent
Плейсхолдер со звездочкой выводит данные той страницы, на которой вызывается.
    Iskatel
    15 мая 2018, 02:36
    +1
    Доброе время суток, Николай.
    Не работает, привожу полный код:
    [[pdoMenu? &level=`1` &resources=`1,2,3,4` &parents=`0`  &scheme=`uri` &tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+parent:is=`2`:then=`Тест`:else=`[[+menutitle]]`]]</a>[[+wrapper]]</li>` &outerClass=`my-menu`]]
    Нужно, для ресурса с id=`2` изменить название пункта Меню с [[+menutitle]] — на Тест.
    А в остальных пунктах — оставить по умолчанию.
      Максим Кузнецов
      15 мая 2018, 07:37
      +3
      «В INLINE чанках нельзя указывать сниппеты, другие чанки или фильтры вывода через обычные теги, потому что так парсер MODX обработает их в первую очередь, и сниппет получит совсем не то, что вы хотели.»

      Документация.
        Iskatel
        15 мая 2018, 12:28
        0
        Доброе время суток, Максим.
        Благодарю за ваш совет. Почитал документацию:
        Поэтому для INLINE чанков предусмотрена замена [[+]] на {{+}} — такие теги MODX пропускает, а pdoTools при работе конвертирует их как нужно.
        Сделал так:
        [[pdoMenu?
         &level=`1`
         &resources=`1,2,3,4` 
         &parents=`0`
         &scheme=`uri`
         &tpl=`@INLINE <li[[+classes]]><a href="[[+link]]" [[+attributes]]>{{+id:is=`2`:then=`Тест`:else=`{{+menutitle}}`}}</a>[[+wrapper]]</li>`
         &outerClass=`my-menu`]]
        Работает.
        Как правильнее? Вставить код в INLINE чанк, как, собственно я и сделал, или написать отдельный чанк, как советует Николай, постом ниже?
          Максим Кузнецов
          15 мая 2018, 13:11
          +1
          Оба варианта правильные.
          Способ с Inline-чанком избавляет от лишнего запроса к БД, способ с обычным чанком более читаем и удобнее, когда один и тот же чанк используется в нескольких вызовах. Лично я стараюсь использовать файловые чанки.
        Николай Каленников
        15 мая 2018, 10:22
        +1
        Если вам нужно проверять на id, зачем в условие ставить parent? Сделайте чанк с кодом
        <li[[+classes]]><a href="[[+link]]" [[+attributes]]>[[+id:is=`2`:then=`Тест`:else=`[[+menutitle]]`</a>[[+wrapper]]</li>
        Вызов сниппета
        [[pdoMenu? &level=`1` &resources=`1,2,3,4` &parents=`0`  &scheme=`uri` &tpl=`имя.чанка` &outerClass=`my-menu`]]
          Iskatel
          15 мая 2018, 12:42
          0
          Доброе время суток, Николай.
          Если вам нужно проверять на id, зачем в условие ставить parent?
          Мне нужно выбрать конкретный ресурс. В документации и примерах — выбирают по parent, просто повторил.
          Сделайте чанк с кодом
          Не хотел чанки плодить, из-за единственной строки.
          Сделал так, описал постом выше.
          Выбор по +id — работает, по +parent — нет.
          Почему, это ведь выбор одного и того же ресурса разными способами.
          Спасибо
      Михаил
      15 мая 2018, 07:59
      0
      В админке же можете указать menutitle и все
        Iskatel
        15 мая 2018, 12:28
        0
        Размещается на сайте в Шапке и Сайдбаре.
        Задача: Только в Сайдбаре – изменить название некоторых пунктов, menutitle.
        Илья Уткин
        15 мая 2018, 17:24
        +1
        О, можно ещё так извратиться:

        &tpl=`@INLINE <li{$classes}>
          <a href="{$link}" {$attributes}>
            {switch $id}
              {case 2}
                Тест
              {case default}
                {$menutitle}
            {/switch}
          </a>
          {$wrapper}
        </li>`
          Iskatel
          16 мая 2018, 00:35
          1
          0
          Доброе время суток, Илья.
          Или так, короче получится:
          &tpl=`@INLINE <li{$classes}>
            <a href="{$link}" {$attributes}>
              {$id == '2' ? 'Тест' : $menutitle}
            </a>
            {$wrapper}
          </li>`
          В моем случае, написание кода на Fenom — даст каке-либо преимущество?
          Спасибо.
            Илья Уткин
            16 мая 2018, 06:41
            +1
            В моём варианте можно поменять не один пункт меню, а несколько, если это понадобится:
            <li{$classes}>
              <a href="{$link}" {$attributes}>
                {switch $id}
                  {case 2}
                    Тест
                  {case 7}
                    Контактная информация
                  {case 13}
                    Новости
                  {case default}
                    {$menutitle}
                {/switch}
              </a>
              {$wrapper}
            </li>
              Iskatel
              16 мая 2018, 19:26
              0
              Доброе время суток, Илья.
              Благодарю за подсказку. Как раз соображал, как у нескольких поменять.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          13