Отличия 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..." по умолчанию


Комментарии ()

  1. Владимир Ребров 20 июня 2012, 17:01 # 0
    Про перетаскивание-настройку сниппетов не знал. Офигительно удобно.
    1. Василий Наумкин 20 июня 2012, 17:05 # 0
      Только для этого автор сниппета должен прикрутить к нему параметры — так что, эта фишка может быть не везде.

      Я, например, недавно начал делать, когда сам узнал =)
    2. Александр Наумов 16 сентября 2012, 22:30 # 0
      Василий, вы пишите: «у Revo — можно, и не на один уровень.… Можно жуткую пирамиду насобирать — и это будет работать.»

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

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

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

      Подскажите, пожалуйста, в чем моя ошибка?
      1. Иван Брежнев 16 сентября 2012, 23:08 # 0
        А что у вас в чанке teml_content? Напишите весь текст
        1. Иван Брежнев 16 сентября 2012, 23:13 # 0
          [[getResourceField? &id=`[[+parent]]`]]
          В шаблоне для GetResources нужно через +
          1. Александр Наумов 16 сентября 2012, 23:29 # 0
            Спасибо, большое! Заработало.
            1. Иван Брежнев 17 сентября 2012, 00:50 # 0
              ага) пожалуйста
      Добавление новых комментариев отключено.