ZoomX 3.0. Полноценный шаблонизатор, файловые элементы и др.

Хорошая новость для тех, кто хочет использовать MODX и быть ближе к современной разработке. Данная версия позволяет полностью перейти на шаблонизатор Smarty как в режиме фреймворка (с использованием роутов и контроллеров), так и в обычном режиме. Т.е. теперь и в обычных шаблонах MODX можно использовать Smarty.

В общем, кто уже пользуется Fenom понимает всю перспективу, которую даёт данная возможность. Но в отличие от последнего, Smarty используется как настоящий PHP шаблонизатор — он изначально рассчитан на работу с файлами, полностью отвечает за парсинг (однократный!), за хранение и применение переменных. Кроме того, теперь его можно использовать в сниппетах pdoTools, в который заложен парсинг чанков только шаблонизатором Fenom или парсером MODX.

Плюс полноценная поддержка файловых элементов, собственный перехватчик исключений, который выводит красивую страницу ошибки.


Появилась возможность отключать автоматическую загрузку ресурса по URI для отдельных роутов — т.е. отдельные виртуальные страницы.
$router->get('users/{id}/profile',  function ($user) {
    // Отключаем автозагрузку ресурса
    zoomx()->autoloadResource(false);  // === $modx->setOption('zoomx_autoload_resource', false); 
    $user = $modx->getObject('modUser', ['id' => (int)$id])
    if (!user) {
        abortx(404, 'User not found');
    } 
    return viewx('profile.tpl', ['user' => $user]);
});
Для виртуальных страниц есть автоматический детектор типа контента, который по расширению в URI определяет Content-Type. В противном случае Content-Type будет «text/html». Это дефолтное значение — так как тип определяется ресурсом, а ресурса нет (загрузка отключена).
$router->get('sitemap.xml',  function () {
    // Отключаем автозагрузку ресурса
    zoomx()->autoloadResource(false);  // === $modx->setOption('zoomx_autoload_resource', false); 
    $resources = getAllResources(); // получаем список всех ресурсов
    return viewx('sitemap.xml', $resources);
});
Ну и ещё ряд доработок и фич. За техническими подробностями прошу сюда.
Сергей Шлоков
30 сентября 2021, 15:51
modx.pro
1 357
+25
Поблагодарить автора Отправить деньги

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

Алексей
01 октября 2021, 07:09
0
вот бы нативная поддержка fenom — чтобы была воможность не переписывать все сайты на smarty, а просто обновить пакет! сложно ли это?
    Сергей Шлоков
    01 октября 2021, 10:28
    0
    А зачем переписывать работающие сайты? Нервы пощекотать? Например, с выходом новой мажорной версии Laravel сайты в большинстве случаев не обновляют. Это для новых проектов.

    сложно ли это?
    Сделать можно всё. Но если честно, у меня нет никакой мотивации этим заниматься.
    Павел Голубев
    01 октября 2021, 11:05
    0
    А twig планируется для поддержки? Чтобы так плавненько перейти на Symfony.
      Сергей Шлоков
      01 октября 2021, 12:33
      +4
      Планирую. Только мысль о других шаблонизаторах не чтобы народ из MODX убегал на другую платформу, познакомившись с разработкой на фреймворках, а и обратное движение. Досталось челу из Symfony или Laravel стека MODX на поддержку, он без проблем с этим справится.
        Дмитрий
        02 октября 2021, 07:31
        -7
        чтобы народ из MODX убегал на другую платформу, познакомившись с разработкой на фреймворках, а и обратное движение
        А зачем, Сергей? Ценю и уважаю твой вклад, но кому и зачем в почти 2022 году нужен MODX? Система уже давно превратилась в легаси, безнадёжно устаревшее и бесперспективное. Привлекать кого-то молодого в MODX сейчас это даже просто как-то некрасиво и нечестно.
          Алексей Соин
          02 октября 2021, 14:18
          +4
          Назовите для примера хотябы одну систему, в которые вы бы пригласили молодого разработчика, как альтернативу modx.
            Дима Сайт old см. профиль
            02 октября 2021, 20:56
            +10
            Без обид, но мне вот это
            некрасиво и нечестно
            тоже глаза режет

            У каждого своё понятие о красоте и очень много разработчиков с других фреймворков (того же битрикс-а) считают решения modx очень даже красивыми.

            Про честность давайте лучше не начинать, это смотря что вы там наобещаете «кому-то молодому», может получиться что честнее приглашать в тильду, а может в jungo, а может и ресторан на свидание ;-)

            MODx надежен, неприхотлив и позволяет делать хорошие продукты. Приглашать в него молодых разработчиков, как и предлагать клиентам совершенно не стыдно. А нюансы есть в любых продуктах и инструментах.

            То что система не обновляется по 5 раз в месяц я считаю скорее плюсом и следствием стабильности. А компоненты живут отдельно и их экосистема кипит довольно активно. Готовых решений — бесконечное множество, и seo-студии MODx просто обожают, не представляете от какого количества костылей избавляет его использование в сравнении с другими системами.

            Печально что складываются мифы и легенды по поводу легаси и устаревания на фоне. Система существует не первый десяток лет и часть кода написана давно, некоторые тренды поменялись с тех пор, но код от этого работать не перестал. Однако поддержка всего современного серверного софта в актуальном modx имеется. Знаете ли, вообще-то и сам PHP уже 15 лет хоронят))

            Предлагаю не поддерживать упаднический настрой и выбирать инструмент под задачи. Я вот выбираю MODx под большинство новых сайтов и магазинов, лэндингов, quick start учетных и рекламных систем, серверной части для мессенджер-ботов и мобильных приложений и т.п. потому что удобно и выгодно.

            P.S. Спасибо @Сергей Шлоков что реализует свои крутые идеи, чем делает лучше и гибче наш старый добрый клёвый MODx!
              Евгений
              03 октября 2021, 00:47
              0
              нука расскажи куда приглашать надо? БРЕД!
              modx топчик почти для любых проектов
                Сергей Шлоков
                03 октября 2021, 07:37
                +7
                А чем MODX хуже Вордпресса, Джумлы, Битрикса и др.? CMS востребованы. У них своя ниша. И ниша немаленькая. А пилить сайты на фреймворках удовольствие сомнительное.
                Да, мы (те, кто занимаются поддержкой и развитием MODX), иногда бубним про устаревший код в ядре. Но разработчик сайта в первую очередь думает не над тем, как править ядро или админку, а над тем, как быстро и хорошо сделать сайт. И MODX позволяет делать это гораздо удобнее, чем многие другие CMS.

                В чём нечестность привлечения молодого разработчика? Я правильно понимаю, что этот начинающий веб разработчик должен пилить сайты на фреймворках с микросервисной архитектурой и деплоем с CI? Очень странное соображение. Новички вообще в ядро не лезут. В этом и смысл CMS. А тот, кто выбрал MODX для высоконагруженного сервиса, должен не на него плеваться, а на зеркало.

                П.С. Ко мне как-то за помощью обращался человек из студии, разрабатывающей сайт для одного министерства одной области. На ларавел. Так вот я вообще был в шоке — он практически ничего не знал о вэб разработке. Видимо какой-то студент или родственник министра. Но его заставили делать сложные задачи. Посоветовал ему заняться самообучением. Ибо весь смысл его обращения был — сделай как мне нужно. Представляю, какой сайт получился.
                  Fi1osof
                  05 октября 2021, 10:00
                  +1
                  А здесь по прежнему не приветствуется инакомыслие :)

                  Назовите для примера хотябы одну систему, в которые вы бы пригласили молодого разработчика, как альтернативу modx.
                  нука расскажи куда приглашать надо? БРЕД!
                  modx топчик почти для любых проектов
                  Вспоминается поговорка: «Пока ты стоишь лицом к своему прошлому, ты стоишь спиной к своему будущему!»

                  А действительно, какие есть альтернативы у MODX? Да конечно же никаких! Я в СберТехе в прошлом году работал, там тоже MODX использовали. Прикиньте?! А не, шучу же я :) Конечно там не используют MODX.

                  Очень радует аргумент каждого: «А кто, если не MODX? На чем нам еще сайты делать?». А вам шашечки или ехать? Вы для себя сайты делаете, или чтобы денег заработать? Открою тайну: если денег заработать, то поверьте, на MODX свет клином не сошелся. Компании платят сильно больше за другие технологии.

                  И про топчик и актуальность еще: Smarty в MODX? Не, никогда такого не было. Или было? Мой репозиторий с открытым кодом еще с 2015 г. болтается github.com/MODX-Club/modxSmarty и с его использованием не один сайт был сделан и до сих пор работают. 2021 г. Новинка! Smarty в MODX! И хотя видно, что Сергей не мало своего функционала накидал, все же это ходьба по кругу.

                  UPD: Аа, забыл сказать.
                  собственный перехватчик исключений, который выводит красивую страницу ошибки.
                  .
                  То еще адище… Попробуйте найти что именно за ошибка и где она возникает. В лучшем случае доберетесь до скомпилированного шаблона (там в середине списка смотрите), но это не исходный файл, это куча сгенеренного php-кода, в котором вы с трудом найдете взаимосвязь со своими исходными шаблонами. Ошибки в смарти — это всегда была головная боль.
                    Сергей Шлоков
                    05 октября 2021, 11:10
                    +8
                    А здесь по прежнему не приветствуется инакомыслие :)
                    Здоровая критика приветствуется. И мы частенько поливаем негодованием MODX. А наброс на вентилятор позитивного эффекта не вызывает. Обычный холивар.

                    Вспоминается поговорка: «Пока ты стоишь лицом к своему прошлому, ты стоишь спиной к своему будущему!»
                    Точно. Купил машину — велосипед на помойку. Он — прошлое. Ведь только люди без фантазии используют каждый инструмент по своему назначению. По парку можно и на машине прокатиться.

                    Вот ты же никакими CMS не пользуешься и даже свою не разрабатывал. Любой сайт с нуля. Ага. Ну для чего этот пафос? Течение IT технологий каждого выносит на разные берега. MODX позволяет стартовать, оттолкнуться. Фрилансеры сами решают каким инструментом им удобнее пользоваться. А наёмные используют стек компании. К чему эти споры?

                    И про топчик и актуальность еще: Smarty в MODX? Не, никогда такого не было. Или было?
                    Я первым делом смотрел твой репозиторий. Но там логика такая же как и в pdoTools — рулит всем шаблонизатор MODX. Я пошёл другой дорогой — разработка фронта полностью вынесена из MODX — роуты, контроллеры, полноценная однократная PHP шаблонизация без многоразовой компиляции страницы в PHP код на каждом этапе парсера MODX.
                    Твоё решение мне нравится. Для того времени очень даже. Но ты не смог сообществу разъяснить его достоинства. А я в том момент не смог его оценить по причине невысокого уровня знаний.

                    Вообще, когда читаешь наискосок есть минус — сути не ухватываешь. Smarty я использую только потому, что он уже есть в ядре. Вот и вся тайна. Есть планы и остальные шаблонизаторы добавить.
                    Та же проблема «наискосок» и с перехватчиком. Он перехватывает не ошибки Smarty, а все. Можно в роутах, в классах выкинуть исключение — и получить красивую страницу ошибки. А если это PHP ошибка, то и трассировку. Как это делает XDebug. Как это делают разработчики фреймворков.

                    И ещё, я на твоём месте не стал бы переживать насчёт топика. Кроме лайков ничего не будет. Много было разговоров о том, что нужно добавить в MODX что-то из современной разработки, нужен механизм REST API. Сделал. И никому это особо и не нужно. Ровно такая же тема с MODX3. Все соревнуются в остроумии по поводу его выхода. Но на самом деле, даже если он выйдет, никому он будет не нужен.

                    Закончу тоже народной мудростью «Все мечтают о бессмертии, но не знают чем себя занять в холодный дождливый вечер.»
                      Fi1osof
                      05 октября 2021, 11:30
                      +1
                      Вообще, когда читаешь наискосок есть минус — сути не ухватываешь.
                      Пойми меня правильно: я не говорю, что твое решение плохое. И я не только прочитал твой топик, но и на сайт твой сходил (хотя там не целиком прочитал), и в гит-репозиторий заглянул что там и как. И вот как раз от уведенного в гите мнение неоднозначное. То есть ты добавляешь роутер, контроллеры и т.п., в этом же роутере рулишь УРЛы и далее логику реализовываешь… А что дальше? Еще один шаг ведь, и это Ларка (а там все прелести с полноценной гит-версификацией и прочие радости). Вопрос: а зачем вот тут тогда MODX? Просто потому что API известно? Просто потому что знаешь куда что прописать? И вот потому что админка есть? Или потому что типа есть много компонентов на все случаи жизни? Ну серьезно. Можешь в двух словах объяснить весомую причину? Просто очевидно же, что ты еще чуть-чуть и сам перепрыгнешь дальше. Но цепляешься за якоря. Тут скорее всего дело не в том, что MODX лучший, а в том, что ты сам просто не хочешь идти дальше. То есть особо большего тебе и не надо, а здесь у тебя глубокие познания. Такое тоже имеет место быть и за такое осуждать никак нельзя. Но и нельзя использовать свои знания и авторитет для того, чтобы убеждать менее продвинутых в том, что альтернативы у них нет и что они нашли себе платформу на всю жизнь. Это все напоминает 2009-2010 года, когда Эволюционисты по всю убеждали новичков, что Рево — вообще нафиг не нужная штука. Я доказывал обратное, что место имеет место быть и одна и другая платформа, и расписывал плюсы-минусы и той и другой (в отличие от многих у меня были знания в обеих платформах, в то время, как Эволюционисты знали только одну и ненавидели другую). И что в итоге? В итоге Реву все таки оценили и появились свои последователи. А сейчас крики, что Рева — последний оплот технологий. Ну-ну.

                      Вот ты же никакими CMS не пользуешься и даже свою не разрабатывал. Любой сайт с нуля. Ага.
                      Еще раз: вам шашечки или ехать? Не всегда сайт надо делать с нуля. И да, не всегда для этого нужна готовая CMS. Сейчас часто берут просто некую заготовку (boilerplate) и поверх нее уже свой функционал накидывают. К слову, и у меня такая есть: github.com/prisma-cms/nextjs-nexus
                      Но моего кода там мало. В основном это компоновка готовых сторонних решений (next-js, prisma-2, graphql и т.п.). И сейчас это нормальная практика. Сейчас вообще самостоятельно мало что пишется от и до, используются сторонние популярные решения, собираемые во едино и допиливаемые.
                        Сергей Шлоков
                        05 октября 2021, 15:28
                        +4
                        И я не только прочитал твой топик, но и на сайт твой сходил
                        Как же ты читаешь, если после пишешь такое?
                        Но и нельзя использовать свои знания и авторитет для того, чтобы убеждать менее продвинутых в том, что альтернативы у них нет и что они нашли себе платформу на всю жизнь.
                        Ведь я как раз и пишу и делаю всё для того, чтобы можно было из MODX плавно перемещаться в стек фреймворков для решения более сложных задач без каких-либо накладных расходов на адаптацию. Чтобы пользователи MODX знакомились с техникой работы старших братьев.

                        Можешь в двух словах объяснить весомую причину?
                        В тысячный раз… Я занимаюсь программированием ради удовольствия. И мне нравится то, что я делаю. Я поучаствовал в паре проектов на Laravel, активно тусовался в их сообществе. Оттуда кстати и позвали в проекты. Но там другая атмосфера. В основном всё сводится к знаниям различных пакетов. Очень много рутинной работы и мало творчества. Да, там другие расценки. Но я на зарплате не сижу. И участвовал ради интереса.

                        А в нашем сообществе совершенно другая аура. Я к нему привык. И я прекрасно понимаю потолок MODX и нигде не говорил, что ему нет альтернативы. Но пока есть интерес его развивать — буду развивать. Что в этом плохого не понимаю.
                          Fi1osof
                          05 октября 2021, 17:22
                          +1
                          Да, справедливости ради я признаю, что ты не имеешь жесткой позиции. Если читать внимательно твои слова, то ты довольно прямо говоришь: для простых сайтов MODX сгодится, для чего посложнее ищите что-то другое. Но, как видно, это не до всех доходит. Многие, видимо, воспринимают это как без вариантов. И когда чел выразил свое мнение, что молодых привлекать как-то некрасиво, ему минусов насовали. А ведь он в своем смысле очень даже прав. Пусть цифры за себя говорят. Давайте посмотрим на hh количество вакансий по MODX (вообще по всему рунету и по всем сферам): hh.ru/search/vacancy?text=modx
                          174 вакансии на сегодня… Не густо.
                          Для сравнения React hh.ru/search/vacancy?text=React 7375
                          Наверняка ни для кого не секрет, что тех же лет 5 назад по реакту вакансий практически не было. Потому чел и говорит про почти 22 год. Это не маловажный момент.
                          Вот тебе для души, кому-то тоже, а какой-то молодой специалист карьеру себе планирует, учится. И вот кто-то ему говорит «Посмотри по сторонам, есть альтернативы», а ему минусов))) Короче, ничего не меняется.
                          Сергей Шлоков
                          05 октября 2021, 15:38
                          +4
                          Вопрос: а зачем вот тут тогда MODX?
                          Готовая архитектура.
                          Просто потому что API известно?
                          Да.
                          Просто потому что знаешь куда что прописать?
                          Да.
                          И вот потому что админка есть?
                          Да. Её не нужно самому писать.
                          Или потому что типа есть много компонентов на все случаи жизни?
                          Да. Готовые компоненты с UI в отличие от тех же пакетов Composer, которые используются в той же Ларе, где нужно в большинстве случаев писать интерфейсы, так как архитектура у всех сайтов разная.
                            Fi1osof
                            05 октября 2021, 17:23
                            0
                            Я предполагал эти ответы, потому их и задал. Не удивлен. Лишний раз ты подтвердил: ты занимаешься для себя, для души. Но не все пойдут этим путем, а значит и не всем одни и те же инструменты выбирать.
                Алексей Суслов
                02 октября 2021, 09:43
                +2
                А можете Сергей, пожалуйста, рассказать чуть подробнее, какие преимущества даст переход с Fenom на Smarty?
                Сейчас планирую делать новый проект, и вот задумался может попробовать использовать этот компонент.
                Я внимательно прочитал заметку и в общем понимаю какие плюсы, но интересно именно на практике какие доп. возможности это добавляет или может упрощает реализацию каких-то моментов? Может это значительно ускоряет работу сайта? Или может что-то можно сделать такое, что Fenom не позволяет?
                  Сергей Шлоков
                  02 октября 2021, 12:01
                  +1
                  Вот тут бегло пробежался по отличиям шаблонизаторов.
                  какие преимущества даст переход с Fenom на Smarty?
                  Цель ZoomX не шаблонизаторы менять, а подход к программированию. Smarty был выбран только потому, что он уже есть в ядре MODX. А вот кодить с ZoomX можно так, как это делают старшие браться из сообщества фреймворков со всеми вытекающими преимуществами современной разработки.
                  А по скорости вот тест, сделанный по инструкции в документации, для 800 ресурсов.


                  ---------------------------------------------------------------------------------



                  По скорости Smarty чуть быстрее, но памяти отнимает чуть больше.
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  18