Отличия Revo от Evo

Решил, наконец, написать эту статью. Обладая опытом работы на Etomite около полугода, на Evolution около двух лет и Revolution чуть больше года я могу немного раскрыть эту тему.
Статья не для холивара, просто факты и примеры. Обе версии я рассматриваю без хаков и допиливаний, то есть, речь о стандартных версиях от modx.com.
Скажу честно, на мой взгляд для использования Evolution остаалось только 2 причины: 1. Более быстрый парсер и админка. Большая легкость движка как такового. 2. Нежелание осваивать новое, обучаться.
Вторую причину раскрывать не нужно, а на первой остановимся подробнее.

Парсер

У Evolution действительно более быстрый парсер, оттого, что он гораздо более простой. Это позволяет использовать его на абсолютно никаких хостингах.
Он не понимает вложенные сниппеты друг в друга. Вернее, понимает, но только если вложить кэшированный, в некэширрованный, или наоборот и только 1 раз.
Делать вот так - нельзя:
[[!getResources?&resources=`[[!getIds?parents=`12,14`]]`]]
А у Revo - можно, и не на один уровень. И вызывать с кэшированием или без, и не важно что во что вкладывать. Можно жуткую пирамиду насобирать - и это будет работать. То есть парсер тут, воистину рекурсивный.
Парсер Revo работает без применения eval(). Все страницы рендерятся в *.php и выполняются уже как обычные php файлы. Что гораздо безопаснее, вот например. Еще много разного можно легко нагуглить.
Также у Revolution phx встроен изначально (только называется теперь фильтрами), соответственно можно использовать везде различные выражения. И тогда мы можем задать дефолтную фразу при отсутствии результатов работы сниппета:
[[!getResources:empty=`Ресурсов не найдено`?
    &resources=`[[!getIds?parents=`12,14`]]`
]]
Еще можно вспомнить проблему съедания плейсхолдеров в Evo. Она, конечно, решена, но не из коробки.
Значительно отличие еще в том, что парсер Revo работает через xPDO, который, при всех его достоинствах, конечно медленнее чем запросы в БД почти напрямую, как в Evo.
Также иначе парсятся чанки - они поддерживают переменные:
[[$Chunkname?foo=`bar`]]
То есть, вызывается как сниппет.
Еще у Revo Значительно больше события для плагинов, и гораздо более мощная система прав юзеров - это тоже учитывается при работе парсера.
Дальше. У Revolution есть сразу из коробки поддержка словарей и лексиконов, и если вы используете вот такие плейсхолдеры - [[%var]] - то надо и их обработать, то есть вставить текст из соответствующего словаря системы (они конечно кэшируются).
И при всем при этом парсер Revolution работает на уровне Evo, и по тестам особого отставания нет.

Словари и контексты

Чуть подробнее о словарях. У самого ядра есть, а у любого компонента могут быть разные словари. А в системных настройках - язык. И при переключении языка весь текст движка и компонентов молниеносно меняется на другой, на нужном языке.
Так как в MODx Revolution есть еще и контексты - мы можем создавать мультиязычные сайты без особых ухищрений, практически силами только одного движка.
Если кто не знает про контексты - поясняю. Это мультисайтовость Revo. В нем можно создать несколько сайтов в одной админке. Это довольно легко.
У каждого контекста свои настройки языка, стартовой страницы, страницы 404 и т.д. То есть, при переходе в другой контекст мы получаем другой язык.

Юзеры и группы

У Revo нет менеджеров и юзеров.
Все - юзеры, но с разыми правами. Они могут хотить в разные контексты, разделы админки, видеть разные директории на сайте(!), использовать только свои определенные ТВ и т.д.
То есть, настроить можно как угодно, вообще нет ограничений. Вплоть до того, что вы можете выводить в определенный ТВ для выбора файлов только определенную директорию и только определенным юзерам.
Подробнее - вот тут.

xPDO

Наконец, Эти известные 3 буквы.
Это сердце Revolution, все запросы работают через уровень абстракции, который защищает нас от SQL инъекций. Конечно, он не защищает от XSS - когда юзер сохранил данные в БД через комментарий (ну предположим!) и он вывелся на странице, украв ваши куки. Но от этого ничто кроме прямых рук не защитит.
Примеры вызова на xPDO и обсуждения можно посмотреть в этих темах: раз, два, три.
Тут можно много рассказывать, но я ограничусь 3мя тезисами: 1. Это очень удобно 2. Это очень безопасно 3. Это значительно медленнее, чем работа с БД у Evo. Но в моей статье есть примеры, как это обойти.
И да, все кэширование тоже часть xPDO. За возможность произвольно сохранять что угодно в кэш, произвольно чистить кэш отдельных элементов, контекстов и т.п. - тоже нужно благодарить xPDO, но это больше разработчикам интересно.

Репозиторий

Мое любимое.
Да друзья, все кто знаком с GNU/Linux хоть немного знают про необъятные репозитории с готовыми бесплатными приложениями, которые ставятся одной командой.
Здесь так же.
То есть, вы идете в раздел админки, тыцкаете "установить getResources", 15 секунд - и он установлен. А при обновлении предыдущая версия пакета бэкапится, и вы можете на нее откатиться там же, в админке.
Больше нет гемороя с установкой расширений! Вообще.
Отсюда еще одно отличие Revo, которое многих сначала пугает - система ставится абсолютно голой. Один ресурс, один шаблон.
Но это очень легко поправить, просто установите: 1. Wayfinder - вывод меню 2. getResources - вывод ресурсов 3. getPage - постраничная навигация 4. Theme.Bootsrap - если нужен пример оформления
Лично я всегда раньше при установке Evolution принципиально отключал установку лишних расширений. Но прикол в том - что они уже на HDD сервера. То есть, их не было в админке, но на сайте то они были! У Revo все как надо.
И кстати, можно ставить скриптами заранее заданный набор расширений. Да и вообще автоматизированно устанавливать Revolution на сервер.

Компоненты

Админка Revo, хоть ее многие и ругают, позволяет делать мощнейшие компоненты на все случаи жизни.
Компоненты - это как бы модули, только сильно более крутые за счет тотальной интеграции в админку. И конечно, они устанавливаются из репозитория за пару кликов.
Я не знаю, что нельзя сделать компонентом. Ну серьезно!
Конечно, для его создания нужно многое уметь, но ведь не все собираются разработывать компоненты? Зато пользоваться ими гораздо проще и приятнее.

Резюме

Вот, на мой взгляд, несколько серьезнейших отличий, которые никак нельзя игнорировать.
Работа в Revo удобнее, проще и быстрее (хотя это не сразу понятно). Про административную часть я могу петь часами, чего только стоит перетаскивание сниппета в контент, при котором вы видите все его параметры и можете легко изменить. А файловый браузер?
Единственное, что можно поставить в упрек Revolution - требования к хостингу. Тут да, не поспоришь. На хостинге за 100р в месяц он работать будет крайне неохотно. Зато на хостинге за 300р - уже летает. Один раз настроить для себя - и забыть обо всех проблемах, наслаждаясь скриптами установки\удаления\апгрейда сайтов. Да и опыт администрирования GNU/Linux никому еще не мешал.
А еще авторы MODx грозятся нас порадовать своим собственным облаком, понятно, только для Revo - сплю и вижу.
Поэтому, друзья, если кто еще не знакомился с Revo - я вам предлагаю это сделать. Если вы хотите топать в ногу со временем - пора, пора осваивать, потихоньку.
Кому не хочется ставить движок, но проснулось любопытство - в очередной раз приглашаю к себе на демо-сайт (логин и пароль в админку - test).
Также работает сервис тестовых сайтов - modx-test.com, где вы можете получить в абсолютное пользование свежий сайт, на сутки. Бесплатно и без смс =)

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

Александр Наумов
Василий, вы пишите: «у Revo — можно, и не на один уровень.… Можно жуткую пирамиду насобирать — и это будет работать.»
Моя пирамида, которая не хочет работать:
Я пишу в чанк (teml_content) конструкцию [[getResourceField? &id=[[\*parent]]]] и вызываю эго через шаблон [[$teml_content]] — все работает, заголовок родителя выводится.
Но если я этот чанк вазываю через getResource ([[!getResources? &parents=2 &limit=10 &tpl=teml\_content ]]) то в том месте где должен быть заголовок родителя — пустое место.
Подскажите, пожалуйста, в чем моя ошибка?
Иван Брежнев
А что у вас в чанке teml_content? Напишите весь текст
Иван Брежнев
[[getResourceField? &id=[[+parent]]]]
В шаблоне для GetResources нужно через +
Александр Наумов
Спасибо, большое! Заработало.
Иван Брежнев
ага) пожалуйста
bezumkin.ru
Личный сайт Василия Наумкина
Прямой эфир
Василий Наумкин
22.11.2024, 03:33:54
Спасибо!
inna
06.11.2024, 15:47:13
Да. Все работает. Спасибо.
Василий Наумкин
01.07.2024, 11:56:41
Да, верно, именно так. А в контроллере, скорее всего, ловить данные методом post.
Василий Наумкин
26.06.2024, 09:38:15
О, точно, вылезает если не залогинен. Спасибо, исправил!
Василий Наумкин
09.04.2024, 04:45:01
> Ошибка 500 Это не похоже на ошибку Nginx, это скорее всего ошибка PHP - надо смотреть его логи. ...
Василий Наумкин
20.03.2024, 21:21:52
Volledig!
Андрей
14.03.2024, 13:47:10
Василий! Как всегда очень круто! Моё почтение!
russel gal
09.03.2024, 20:17:18
> А этот стоило написать хотя бы затем, чтобы получить комментарий от юзера, который ничего не писал...
Александр Наумов
27.01.2024, 03:06:18
Василий, спасибо! Извини, тупанул.
Василий Наумкин
22.01.2024, 07:43:20
Давай-давай!