Яндекс.Практикум

Как я перезжал с Ditto на DocLister

Не секрет, что официальное сообщество MODX практически полностью отказалась от старой ветки MODX Evolution (1.0). Некоторые энтузиасты продолжают развивать и решили взять новое имя: Evolution CMS. Логично, произошел...
Как я перезжал с Ditto на DocLister

Не секрет, что официальное сообщество MODX практически полностью отказалась от старой ветки MODX Evolution (1.0). Некоторые энтузиасты продолжают развивать и решили взять новое имя: Evolution CMS.

Логично, произошел ребрендинг, сообщество решило отказаться от старого наследия, переработать админку и еще куча всего.

Новая админка 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

  1. Документация на официальном сайте
  2. Документация на сайте https://modx-gu.ru/

Увы, документация очень фрагментарная, очень многие моменты описаны плохо. Вот для уточнения некоторых тонких моментов я опишу подробнее подводные камни.

Практическая работа

Я строил сайт на примерно таких вызовах

[[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 — формат вывода месяцев года:

  1. 0 — по умолчанию, выводит все в нижнем регистре
  2. 1 — выводит с первой буквой в верхнем регистре
  3. 2 — все буквы в верхнем регистре

&monthFormat — формат месяца:

  • 1 — числовое значение месяца (01 — 12)
  • 2 — название месяца (январь)
  • 3 — короткое название месяца (янв)

Заключение

В Evolution CMS произошло очень много изменений. Пляски с бубном над моим сайтом не прошли даром — я обновился, кое-что узнал нового.

С другой стороны, мне грустно видеть, что система ушла в пике и непонятно, сможет ли из него выйти. Точно такие же признаки были у SantaFox CMS, с которой я пришел в мир MODX.

Так что я думаю и прикидываю что мне делать с сайтом:

  1. доделать его и ждать когда со следующим обновлением опять что-то отвалится
  2. перенести его на MODX Revolution
  3. вообще перенести его на движок WordPress

Каждое решение имеет свои плюсы и минусы. Если у кого есть интересные мысли — милости прошу в комментарии, обязательно обсудим.

Понравилась статья? Поделиться с друзьями:
IPCalc Blog
Комментарии: 3
  1. Алишер

    Честно, не знаком с движками выше (кроме слухов), но вот например моя авангард тройка:
    1) https://www.getsymphony.com/download/
    2) https://www.typesettercms.com/
    3) https://zenar.io/about
    — первые два богаты на плагины, да и возраст/стабильность проектов — на уровне ?

    1. admin (автор)

      Вы не путайте жидкое и мягкое — это две разные вещи! Symphony — это фреймворк для написания сайта, а не движок. Аналоги — Laravel, CodeIgniter, Yii, Zend.

      А остальные CMS — вы где будете брать уроки, темы, помощь? Я вам могу кучу накидать CMS, которые тоже вроде есть и даже интересные. Но вот либо они загнулись, либо сидят в своих узких нишах без разработчиков и пользователей. По факту есть мейнстрим: WordPress, Joomla!, Drupal, MODX и несколько специализированных движков. Остальное — маргинальные движки, где вы не сможете найти почти никакой поддержки, тем, документации и расширений.

  2. Александр

    Очень полезная статья, здорово помогла, спасибо, сэкономил кучу времени.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: