Рекурсия при вызове {$wa->site->page(4)} Принято

1

Если находимся на странице с id 4 и вызываем такую конструкцию:

{$wa->site->page(4)}

то уходим в бесконечную рекурсию так как в функции есть код:

$page['content'] = $this->wa->getView()->fetch('string:'.$page['content']);

было бы неплохо иметь второй параметр $execute_content=true чтобы иметь возможность отключать обработку поля content

8 комментариев

  • +1
    Eugen Nichikov Eugen Nichikov 2 августа 2017 20:54 #

    Может, достаточно кэшировать результат парсинга контента?

  • +1
    creativit.ru creativit.ru 2 августа 2017 20:59 #

    А зачем вы это делаете?

    • +1
      Александр Тарасенко Александр Тарасенко 2 августа 2017 21:04 #

      Возможны разные варианты получения данной ошибки, пример с которым мы столкнулись в доп. параметрах задавался id страницы акции, соответсвенно на странице нужно вывести параметры данной акции, и если данный блок в меню которое сквозное по всему сайту, возможна подобная ситуация, мы ее конечно обошли доп. проверкой. Но все равно хотелось бы более изящное решение.

    • +1
      Genasyst Genasyst 4 августа 2017 14:03 #

      Проблема заключается в едином объекте представления, так как фабрика создается один раз, эту проблему обсуждали и думаю скоро она будет решена!

    • +1
      Владислав Горлов Владислав Горлов Webasyst 4 августа 2017 14:23 #

      Рекурсия происходит потому, что вы используете рекурсию.

      А происходит это из-за некорректного использования функционала. Вам более подойдут блоки — их список, редактирование и создание доступно в приложении сайт (пункт Блоки в левом сайдбаре).

      • +1
        Александр Тарасенко Александр Тарасенко 5 августа 2017 11:00 #

        {$wa->site->page(4)} - Вызов функции не есть рекурсия.

        В чем заключается некорректность получения информации о странице? только тем что она вызывается на самой странице?

        Мы понимаем что это мелочь и обходится различными способами, и скорее всего никто ничего править не будет )

      • +1
        Владислав Горлов Владислав Горлов Webasyst 7 августа 2017 14:05 #

        рекурсия это не только

        f() {
            f();
        }
        
        f();

        но и

        f1() {
            f2();
        }
        f2() {
            f1();
        }
        
        f1();
        • +2
          Александр Тарасенко Александр Тарасенко 7 августа 2017 14:14 #

          Скажите прямо: мы не будем вносить никаких изменений в код фремеворка, зашита от случайного срабатывания рекурсивного вызова при использование данной функции ложится на плечи разработчиков.

          и не будет никаких дискуссий и непониманий.

          Вопрос зачем это нужно/как побороть/кто виноват/и т.д. не обсуждается, обсуждается будет ли это внесено в код фремеворка или нет.

          Добавить комментарий

          Чтобы добавить комментарий, зарегистрируйтесь или войдите