Не секрет, что официальное сообщество MODX практически полностью отказалась от старой ветки MODX Evolution (1.0). Некоторые энтузиасты продолжают развивать и решили взять новое имя: Evolution CMS.
Логично, произошел ребрендинг, сообщество решило отказаться от старого наследия, переработать админку и еще куча всего.
Evolution CMS
Под «капотом» движка все та же старый добрый MODX Evolution. Но некоторые расширения были признаны устаревшими. Так списали со счетов модуль EvoGallery как написанную с ошибками и дырами в безопасности, убрали плагины MultiPhotos и другие.
Лично я не очень следил за всеми этими изменениями, поскольку отошел от интернета довольно далеко — в реальной жизни было много работы, которая оплачивалась гораздо лучше онлайновой.
И из всех сайтов, которые у меня есть, остался только один сайт, который работал на MODX Evolution.
Я довольно редко обновлял его, с 2014 года статей почти не публиковал. Сайт сезонный (под летние отпуска), так что внимание в году он требовал не много.
Но этим летом опять взломали и нужно было что-то делать. Про борьбу с вирусами я писал здесь.
Попытка обновиться
В общем, после лечения заразы, я обновился на новую тогда версию 1.3.0. И у меня все отвалилось!
Перестали выводиться новости, а что выводились, то выводились по странным датам. Картинки часть пропали. Но самое страшное — в админке стало очень сложно работать.
Нет, к дизайн новой админки я приноровился быстро, хотя она стала теперь странной — ожидаешь одно, а получаешь другое. Попытки скопировать фишки из MODX Revolution выглядят именно неуклюже. Думаю, что если движок дальше будет развиваться, то эти детские болезни быстро исправят.
Я же говорю о схлопывании и пропаже визуального редактора в первую очередь.
В общем, повозившись пару часов, я плюнул и вернул из бекапа хостера старую добрую версию 1.2.9. И все заработало.
Попытка номер два
Все равно оставалась неудовлетворенность. Выходят новые версии, а проблемы не решаются. Буквально в пятницу неделю назад, под выход новой версии 1.4RC я снова решил обновится.
Система стала более логичной в админке, но во фронтнде все опять слетело. На сайте общества я задал вопрос (каюсь, в провокационном стиле) и получил советы, куча грязи на себя и так далее. И все-таки за пару дней обновил сайт. Вот об этом я и хочу рассказать.
Ditto в топку!
В ходе дискуссии выяснилось, что некоторые разработчики несколько раз релизили код, который не совместим со старыми наработками. И поломали сортировку по датам публикации.
Теперь нужно делать сортировку по датам создания. Поскольку по датам публикации в любой момент может опять сломаться.
Вместо Ditto нужно использовать сниппеты DocLister.
Документация по DocLister
Увы, документация очень фрагментарная, очень многие моменты описаны плохо. Вот для уточнения некоторых тонких моментов я опишу подробнее подводные камни.
Практическая работа
Я строил сайт на примерно таких вызовах
[[Ditto?
&tpl=`@FILE:assets/templates/rest/chanks/ditto-card.chank.tpl.html`
&summarize=`7`
&depth=`3`
&hideFolders=`1`
&paginate=`1`
&dateSource = `pub_date`
&sortBy=`pub_date`
&sortDir=`ASC`
&dateFormat=`%d.%m.%y в %H:%M`
]]
<div class="pagination">[+previous+] [+pages+] [+next+]</div>
А для вывода использовался чанк что-то наподобие того
<div style="border-bottom: 1px dotted #CCC;">
<p class="title"><a href="[+url+]" title="[+longtitle+]">[+longtitle+]</a></p>
<a href="[+url+]" title="[+longtitle+]">
<img src="[[phpthumb? &input=`[+image-post+]` &options=`w_120,h=90,zc=1`]]" class="imgl" alt="[[+pagetitle]]" />
</a>
<div>
<p style="text-indent: 0;">
<strong>Адрес:</strong> [+tv-adres+]</br>
<strong>Телефон:</strong> [+tv-tel+]</br>
<strong>Сайт:</strong> <a href="[+tv-site+]" rel="nonidex,nofollow" title="Сайт [+longtitle+]">[+tv-site+]</a>
</p>
<p class="readmore-list">
<a href="[+url+]" title="[+longtitle+]">Подробнее...</a></p></div>
<br class="clear" />
</div>
То есть я прошу сделать вывод ленты новостей по 7 блоков по шаблону и отсортировать их по убыванию по дате публикации. Заодно дату формирую по заданному шаблону.
Сайт рушился из-за вызовы форматирования даты aDate, который наглухо вешал все.
Как видите, ничего сложного нет.
Однако, переписать просто вызов сниппета на DocLister невозможно. И другие параметры, и другая идеология.
Дополнительные
В вызове сниппета нужно обязательно указывать дополнительные поля, которые используются при выводе. Иначе их сниппет не подтягивает и не выводит.
Чтобы не мучиться с префиксами полей, нужно сделать убрать его. Примерно так
&tvPrefix=``
&tvList=`image-post`
image-post — это имя моего дополнительного поля, правьте под себя и записывайте все через запятую.
Разница между шаблоном в чанке и во встроенном в вызов
Так же есть разница как вызвать шаблон: через чанк или встроить через @CODE:
В первом случае отработают вызовы сниппетов в чанке, а потом его использует DocLister как шаблон. Во втором случае сразу используется как шаблон, а вызов сниппета не происходит.
Так что если вы режете картинки, то используйте только чанк. Если хотите просто задать шаблон пагинации или чего-нибудь такого, то можно и в вызове.
Пагинация в DocLister
Пагинация работает совершенно по другому. Если раньше после вызова задавались плейсхолдеры для пагинации, то теперь они перенесены в чанки.
Мои вызовы DocLister
[[DocLister?
&id=`list`
&display=`7`
&depth=`2`
&hideFolders=`1`
&tvPrefix=``
&tvList=`image-post`
&orderBy=`createdon DESC`
&dateFormat=`%d.%m.%Y`
&tpl=`ditto-news.chank.tpl`
&paginate=`pages`
&pageAdjacents=`2`
&TplNextP=`@CODE:<a href="[+link+]">></a>`
&TplPrevP=`@CODE:<a href="[+link+]"><</a>`
&TplPage=`@CODE: <a href="[+link+]">[+num+]</a>`
&TplCurrentPage=`@CODE: <span class="ditto_currentpage" style="background: #FFDF80;">[+num+]</span>`
&TplWrapPaginate=`@CODE: <div class="pagination">[+wrap+]</div>`
]]
[+list.pages+]
Пример рабочий, так что можно его брать и изучать. Выводится 7 блоков, глубина до 2 уровней от текущей страницы, используется tv-поле image-post, папки скрываются, сортируются по дате создания по уменьшению, используется чанк, пагинация вперед-назад и
цифры.
<div class="articlePost">
<p class="title"><a href="[+url+]" title="[+pagetitle+]">[+pagetitle+]</a></p>
<a href="[+url+]" title="[+pagetitle+]">
<img class="imgl" src="[[phpthumb? &input=`[+image-post+]` &options=`w=100,h=75,zc=1`]]" width="100" height="75" alt="[+pagetitle+]" title="[+pagetitle+]"/>
</a>
<p style="text-indent:0;">Дата: <strong>[[MyDate? &date=`[+date+]`]]</strong></p>
<p>[+introtext+]</p>
<div class="clear"></div>
</div><br />
Тут тоже все похоже. Только теперь пути формируются в плейсхолдере [+url+]
.
aDate
Камень преткновения был в этом сниппете. Отключал — работало. Включал — ошибка.
В конце концов мне это надоело и я переписал сниппет почти слово-в-слово. Но удалил лишнее и с 10-ой попытки заработало.
Но мне стало интересно и я отрыл сниппет aDate на github у другого человека, который взял идею Дмитрия, доделал её и создал целый комбайн! Вот здесь можно скачать этот полезный сниппет.
Опции:
&date
— обязательный параметр, дата — любой плейсхолдер: [+createdon+], [+pub_date+]
и так далее
&alterDate
— дата как и date, только будет использоваться если &date содержит пустое значение.
&tpl
— чанк или @CODE; По умолчанию — '@CODE:[+day+].[+month+].[+year+] [+hour+].[+minute+].[+second+]'
Доступны плейсхолдеры: [+day+] [+month+] [+year+] [+hour+] [+minute+] [+second+]
&lang
— язык, для форматирования названий месяцев года. Доступно: ru, en, ua. По умолчанию: ru.
&Uppercase
— формат вывода месяцев года:
- 0 — по умолчанию, выводит все в нижнем регистре
- 1 — выводит с первой буквой в верхнем регистре
- 2 — все буквы в верхнем регистре
&monthFormat
— формат месяца:
- 1 — числовое значение месяца (01 — 12)
- 2 — название месяца (январь)
- 3 — короткое название месяца (янв)
Заключение
В Evolution CMS произошло очень много изменений. Пляски с бубном над моим сайтом не прошли даром — я обновился, кое-что узнал нового.
С другой стороны, мне грустно видеть, что система ушла в пике и непонятно, сможет ли из него выйти. Точно такие же признаки были у SantaFox CMS, с которой я пришел в мир MODX.
Так что я думаю и прикидываю что мне делать с сайтом:
- доделать его и ждать когда со следующим обновлением опять что-то отвалится
- перенести его на MODX Revolution
- вообще перенести его на движок WordPress
Каждое решение имеет свои плюсы и минусы. Если у кого есть интересные мысли — милости прошу в комментарии, обязательно обсудим.