Отличия 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, где вы можете получить в абсолютное пользование свежий сайт, на сутки. Бесплатно и без смс =)

← Предыдущая заметка
Почему мы не ставим "Powered by..." по умолчанию
Следующая заметка →
Игра престолов
Комментарии (5)
inetloverАлександр Наумов
17.09.2012 02:30

Василий, вы пишите: «у Revo — можно, и не на один уровень.… Можно жуткую пирамиду насобирать — и это будет работать.»

Моя пирамида, которая не хочет работать:

Я пишу в чанк (teml_content) конструкцию [[getResourceField? &id=\[\[\*parent\]\]]] и вызываю эго через шаблон [[$teml_content]] — все работает, заголовок родителя выводится.

Но если я этот чанк вазываю через getResource ([[!getResources? &parents=2 &limit=10 &tpl=teml\_content ]]) то в том месте где должен быть заголовок родителя — пустое место.

Подскажите, пожалуйста, в чем моя ошибка?

vancheloИван Брежнев
17.09.2012 03:08

А что у вас в чанке teml_content? Напишите весь текст

vancheloИван Брежнев
17.09.2012 03:13

[[getResourceField? &id=\[\[+parent\]\]]]

В шаблоне для GetResources нужно через +

inetloverАлександр Наумов
17.09.2012 03:29

Спасибо, большое! Заработало.

vancheloИван Брежнев
17.09.2012 04:50

ага) пожалуйста

born2slip
pishnaa istntome
22.11.2022 14:06
огромное спасибо! )
inetlover
Александр Наумов
14.11.2022 10:19
посмотри документацию. Спасибо, что-то она мне не нагуглилась. Это просто функции объединения для о...
bezumkin
Василий Наумкин
10.11.2022 05:46
Спасибо за поздравления!
inetlover
Александр Наумов
09.11.2022 17:08
Посмотрел в ДевТулсе свойство overscroll-behavior: none; присутствует, проверил в Chrome и Chromium ...
bezumkin
Василий Наумкин
03.11.2022 20:57
Поискать в исходниках ссылки на её адрес и поменять - скорее всего только nuxt.config.js. А зачем эт...
ni.kolokol@mail.ru
Николай Каленников
03.11.2022 19:43
Спасибо. Попробую тоже с нуля переставить
inetlover
Александр Наумов
03.11.2022 19:24
Спасибо!!! Все заработало!
bezumkin
Василий Наумкин
28.10.2022 05:23
В тексте есть подсказка // Контроллер требует новое разрешение protected $scope = 'ord...
bezumkin
Василий Наумкин
27.10.2022 13:25
Понял, спасибо!
inetlover
Александр Наумов
23.10.2022 13:33
Понял, спасибо!