Условие вызова pdoMenu

Добрый день
Подскажите а как правильно создать условие?
{'!pdoMenu' | snippet : [
    {if 'limit' > 5 && 'hereClass'}
        'parents' => '7',
        'level' => '1',
        'offset' => '1',
        'limit' => '5',
        'hereClass' => 'active',
        'tplOuter' => '@INLINE <ul class="topMenu_items_prod">{$wrapper}</ul>',
        'tpl' => '@INLINE <li><a {$classes} href="{$link}">{$menutitle}</a></li>'
    {else}
        'parents' => '7',
        'level' => '1',
        'limit' => '5',
        'hereClass' => 'active',
        'tplOuter' => '@INLINE <ul class="topMenu_items_prod">{$wrapper}</ul>',
        'tpl' => '@INLINE <li><a {$classes} href="{$link}">{$menutitle}</a></li>'
    {/if}
]}
Сергей
02 марта 2019, 22:11
modx.pro
1 529
0

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

Сергей
02 марта 2019, 23:03
0
Помогите с синтаксисом
{'!pdoMenu' | snippet : [
        'parents' => '7',
        'level' => '1',
        'limit' => '5',
        'offset' => '{if 'limit' > 5} offset = '1' {/if}', как тут правильно составить?
        'hereClass' => 'active',
        'tplOuter' => '@INLINE <ul class="topMenu_items_prod">{$wrapper}</ul>',
        'tpl' => '@INLINE <li><a {$classes} href="{$link}">{$menutitle}</a></li>'
]}
    Vlad Brise
    03 марта 2019, 00:20
    0
    Не совсем понятно, что вы хотите этим условием добиться
      Сергей
      03 марта 2019, 00:43
      0
      Не могу придумать адекватное условие к выборке, и еще правильно его записать.
      Есть меню, всего 5 элементов, больше нельзя во фронте, а всего в родителе может быть сколько угодно.
      Есть переключение по страницам туда и сюда (pdoNeighbors)
      Начальное условие:
      limit => 5
      1 2 3 4 5 (6, 7, 8,… эти пункты отключены к показу, тк лимит = 5)

      — если активный 6, тогда нужно 2 3 4 5 6,
      — если 7 тогда нужно 3 4 5 6 7

      и так далее.

      Есть какие нибудь предложения?))
      Максим
      03 марта 2019, 12:06
      0
      {var $limit = 5}
      {var $offset = $limit > 5 ? '1' : '0'} Если лимит больше 5, тогда вернуть 1, иначе 0
      {'!pdoMenu' | snippet : [
              'parents' => '7',
              'level' => '1',
              'limit' => $limit,
              'offset' => $offset,
              'hereClass' => 'active',
              'tplOuter' => '@INLINE <ul class="topMenu_items_prod">{$wrapper}</ul>',
              'tpl' => '@INLINE <li><a {$classes} href="{$link}">{$menutitle}</a></li>'
      ]}
        Сергей
        03 марта 2019, 15:37
        0
        Максим спасибо большое что ответили, но данная конструкция не работает.
        Я так думаю что по $limit фильтрация работать не будет, она получается всегда = 5.
        Если я меняю {var $limit = 6} тогда срабатывает условие!
          Сергей
          03 марта 2019, 15:48
          0
          Я думаю проще сделать на JS.
          Выводить все, считать количество списков и просто показывать нужные относительно активного, а не нужные display:none.
            Максим
            03 марта 2019, 16:00
            0
            Так вы значение лимита меняйте! Его же можно из GET ловить. Это достаточно гибкое решение и думаю что можно приспособить. Но не понимаю картины в целом — я ничего больше посоветовать не могу.((((
              Сергей
              03 марта 2019, 16:08
              0
              Ну в целом картина простая
              Есть категория например «товары» и в ней товар 1,2,3,4,5,6,7… и т.д.
              На странице вывода товара есть горизонтальное меню.
              Всего в это меню помещается 5 элементов, больше не влезает из за особенностей верстки.
              Вот не могу найти решение:
              Если например активный пункт 1,2,3,4,5, то все гуд, при условии Limit=5, они отображаются и какой то из них подсвечивается активный, а если например выбран «товары/товар6» то он в меню не отображается, по прежнему пункты 1,2,3,4,5.
              Вот нужно что бы:
              Если активный пункт 6, то выводить меню из 2,3,4,5,6
              Если активный пункт 7, то выводить меню из 3,4,5,6,7
              Если активный пункт 8 то выводить меню из 4,5,6,7,8
              И так далее.
              Понимаете?
                Сергей
                03 марта 2019, 16:20
                0
                Другое объяснение:
                Если активный какой то из 1,2,3,4,5, то
                {'!pdoMenu' | snippet : [
                                    'parents' => '7',
                                    'limit' => '5'
                ]}
                Если активный какой то из 6 то
                {'!pdoMenu' | snippet : [
                                    'parents' => '7',
                                    'limit' => '5',
                                    'offset' => '1'
                ]}
                Если активный какой то из 7 то
                {'!pdoMenu' | snippet : [
                                    'parents' => '7',
                                    'limit' => '5',
                                    'offset' => '2'
                ]}
                Если активный какой то из 8 то
                {'!pdoMenu' | snippet : [
                                    'parents' => '7',
                                    'limit' => '5',
                                    'offset' => '3'
                ]}
                И так далее…
                т.е значение offset = общее кол-во ($coutn) — $limit, но какое значение в pdoMenu несет в себе общее количество, countChildren? это не правильное мышление
          Александр Мельник
          03 марта 2019, 17:14
          0
          А каким образом посетитель перейдет на товар 6, если в меню видны изначально только 1,2,3,4,5?
            Сергей
            03 марта 2019, 17:15
            0
            Есть переключение по страницам туда и сюда (pdoNeighbors). На главной странице будут представлены все товары, может с главной туда попасть.
            Александр Мельник
            03 марта 2019, 17:23
            0
            Мне пришла в голову такая реализация.
            Поскольку мы на странице товара, то идентификатор активного товара нам известен -его можно получить и на феноме и в самописном сниппете.
            Нужно перед вызовом pdoMenu разместить вызов своего сниппета, который получит идентификатор текущего товара, получит идентификаторы двух товаров до него и двух после (я думаю логику можно будет подсмотреть в реализации pdoNeighbors) и вернет список из пяти айдишников — два айдишника до, айдишник текущего товара, два айдишника после.
            Это строку скормить pdoMenu в параметр resources. И будет красиво, ваш товар активный будет всегда по центру и по два товара побокам.
              Сергей
              03 марта 2019, 17:25
              0
              Круто! Да можно подумать в данном направлении)
              Спасибо, буду мучить)
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              13