Fenom - редирект на первый дочерний ресурс?

Друзья, подскажите пожалуйста аналог решения сниппета FirstChildRedirect на FENOM?

Нужно сделать редирект на первый дочерний ресурс при заходе на родителя с помощью Fenom, как это сделать?
Роман
05 марта 2020, 01:49
modx.pro
1
774
0

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

Наумов Алексей
05 марта 2020, 09:30
0
Fenom это шаблонизатор, FirstChildRedirect сниппет. Что есть аналог то?)

{'FirstChildRedirect ' | snippet}
    Роман
    05 марта 2020, 12:58
    0
    :))) та нет, так я могу сделать, не совсем деревянный, я про то, может какие методы по умолчанию у FENOM есть свои для этого без сторонних сниппетов.

    Может как то в foreach получать id и как то на первую итерацию делать make url
    Сергей Шлоков
    05 марта 2020, 12:56
    0
    Делать это лучше в плагине.
      Роман
      05 марта 2020, 12:59
      0
      Не подойдет, слишком громоздко решение с плагином будет, это нужно всего для пару папок — родителей.
        Сергей Шлоков
        05 марта 2020, 13:17
        0
        Как раз в плагине будет проще. Ибо запрос заворачивается на входе. А феном уж тут совсем не пришей рукав. Логика пишется на php. Причем здесь феном???
        Просто в плагине написать ограничение только для этой пары папок. А если уже есть готовый каталог, то проще и быстрее сделать переадресацию на web сервере.
          Роман
          05 марта 2020, 14:04
          0
          та мне нужно вставить на страницу в поле контент сниппет, что бы с этой страницы был редирект на первого ребенка, вот и все. Без плагинов. И решение на FENOM, FirstChildRedirect не вариант.
            Михаил
            05 марта 2020, 14:14
            +1
            плагин используй, не выноси мозг, вот реально. Такие вещи делаются ПЛАГИНАМИ
              Роман
              05 марта 2020, 14:23
              0
              Откуда тогда есть FirstChildRedirect? Если такие вещи делаются плагином.
                Михаил
                05 марта 2020, 14:25
                0
                ну так используй этот сниппет, в чем проблема то?
                  Роман
                  05 марта 2020, 14:28
                  0
                  Проблема в том, что я не хочу устанавливать сниппет, а повторить его работу на FENOM. Вопрос поэтому такой и задал сюда. Мне не нужен плагин, и не нужен FirstChildRedirect. Мне нужно сниппет на fenom, который делает тоже самое что и FirstChildRedirect. Есть мысли какие какая логика должна быть?
                    Михаил
                    05 марта 2020, 14:31
                    0
                    используй готовое решение, либо используй плагин. На феном не напишешь. Или даже после этого ты будешь требовать решения на феном?
                      Роман
                      05 марта 2020, 14:37
                      -2
                      например, есть {$_modx->getChildIds(54, 1) | print} выводит массивом все дочерние доки id родителя с id 54, уровень вложенности 1.

                      Я так понимаю дальше пройду foreach и для первого ключа сделаю make redirect, так?
                      Вы Fenom знаете или нет?
                        Баха Волков
                        05 марта 2020, 14:39
                        +3
                        А ты языки программирования знаешь? Для того чтобы получить доступ к первому элементу массива разве нужно обязательно использовать цикл?
                        Роман
                        05 марта 2020, 14:43
                        -1
                        нет не знаю, так хорошо как вы, поэтому и спрашиваю тут, есди вы еще не поняли.
                        Михаил
                        05 марта 2020, 14:51
                        0
                        капец. Ты сначала отрендеришь всю страницу, а только потом сделаешь ей редирект. Серьезно? АНе проще в плагине, ДО рендера страницы отредиректить куда надо?
                        Роман
                        05 марта 2020, 14:54
                        0
                        какое ваше решение?
                        Баха Волков
                        05 марта 2020, 14:55
                        0
                        Ладно ладно @Михаил человек задал вопрос, попинали и хватит) Тем более 3 варианта решения подсказали, даже тот который его устраивает, а то в холиваре жертв будет много
                        Роман
                        05 марта 2020, 14:56
                        0
                        но FirstChildRedirect так же и работает, сначала рендерит страницу, потом делает редирект
                        Баха Волков
                        05 марта 2020, 14:59
                        0
                        Я выше написал, я тоже могу написать компонент getGryobaniyPerviyChild и в нем отрендерить js скрипт который через 5 нахождения на странице будет редиректить на мой сайт, но это не значит, что компонент хороший
                        Роман
                        05 марта 2020, 15:02
                        0
                        мне достаточно на уровне сниппета это решить, если уж для вас FirstChildRedirect не хороший, мне достаточно этого.
                    Баха Волков
                    05 марта 2020, 14:35
                    0
                    Сниппеты не делятся на MODX и на феном, у феном есть модификаторы, если речь об этом, то погугли модификаторы феном, прямо на этом форуме найдешь. А на счет сниппета FirstChildRedirect, то это компонент который создан человеком, а человек свойственен ошибаться, я не критикую Марка (автора компонента), но в реализации переадресации на этапе парсинга контента где и отрабатывает сниппета слишком поздно — это действительно нужно по-хорошему делать через плагин на какое нибудь раннее событие.

                    Вторая часть ответа: если хочется сделать силами феном, то нужно обратить внимание на класс micromodx где есть методы которые вызывают родные методы самого MODX. В твоём случае обрати свой взор на методы getChildIds и sendRedirect
                      Роман
                      05 марта 2020, 14:38
                      0
                      уже что то, спасибо, но уже сам нашел getChildIds, делаю дальше.
                        Баха Волков
                        05 марта 2020, 15:00
                        0
                        Подумал и пришел к выводу, что и getChildIds не нужен, делай как предлагает @Евгений Webinmd
                        Роман
                        05 марта 2020, 15:03
                        0
                        да, разбираюсь с этим, но непонимаю почему не работает parent если указать жестко номер id 'parent' => '54'
              Сергей Шлоков
              05 марта 2020, 15:07
              0
              Видимо, это какой-то квест. Другого объяснения нет. Человек задал вопрос, ему несколько человек ответили, а он — вы неправильно отвечаете. Мне нужен другой ответ.

              Все выдохнули. Пусть носит круглое и катает квадратное. Это его решение.
                Роман
                05 марта 2020, 15:11
                0
                нет никакого квеста, есть решение, но оно не работает, обьясните, помогите лучше, а не ерничайте

                есть структура

                -главная(1)
                -категория(2)
                -категория(3)
                -категория(54)
                — страница
                — страница
                — страница

                На странице с id 54 пишу

                {set $resource = $_modx->getResources(
                    ['published' => 1, 'deleted' => 0],
                    ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 1, 'parent' => 54]
                )}
                 {foreach $resource as $child}
                                        <div>
                                            {$child.id}
                                        </div>
                {/foreach}
                выводит в результате 1

                Что не так, где ошибся?
      Евгений Webinmd
      05 марта 2020, 14:39
      1
      0
      {set $resource = $_modx->getResources(
          ['published' => 1, 'deleted' => 0],
          ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 1, 'parent' => $_modx->resource.id]
      )}
      
      {if $resource}
        {$_modx->sendRedirect( $_modx->makeUrl($resource) )}
      {/if}
      Все примеры есть в документации.
      Играйся с 'sortdir' => 'ASC' мож надо заменить на DESC
        Роман
        05 марта 2020, 14:54
        0
        Спасибо, если указываю 'parent' => '54' не работает почему то
          Евгений Webinmd
          05 марта 2020, 17:35
          0
          parents вместо parent

          и в итоге
          {$resource.0.id}
            Роман
            05 марта 2020, 18:25
            0
            Спасибо, но нет, что то не то

            -главная(1)
            -категория(2)
            -категория(3)
            -категория(54)
            — страница(55)
            — страница(56)
            — страница(57)
            — страница(58)
            На странице с id 54 пишу

            {set $resource = $_modx->getResources(
                ['published' => 1, 'deleted' => 0],
                ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 1, 'parents' => 54]
            )}
            {if $resource}
              {$_modx->sendRedirect( $_modx->makeUrl($resource.0.id) )}
            {/if}
            редирект делает но почему то на страница(57), вместо первой страница(55)
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        30