Делаем репозитарий для Evo на Ditto. Modx evo ditto параметры
Делаем репозитарий для Evo на Ditto / Хабр
Я уже рассказывал о сниппете FileDownload, который вполне приемлем для выполнения некоторых задач, но и то, для людей разбирающихся. Как показала практика, даже плагин, который я делал под FileDownload, не спасает людей не посвященных и у них возникают серьезные трудности. Что ж, поразмыслив, я подумал, что легче всего организовать файловый архив так, как реализуется практически все на MODx — через дерево ресурсов.
Для этого было решено использовать Ditto.
Итак, версия MODx Evo 1.0.4, Ditto стандартный, из дистрибутива.
Задача:
Дать возможность простому персоналу легко и не принужденно добавлять файлы, писать к ним описания, делать папки.
Идя:
В том, что бы использовать Ditto примерно так же, как, например, с выводом новостей, только вместо страниц — файлы.
Реализация:
Вообщем-то, я думаю, нужно пропустить размышления и тупиковые попытки и перейти сразу к окончательному варианту.
Структура файлового архива:
--Начальная страница архива |---Папка 1 | |------Файл 1 | |------Файл 2 |---Файл 1 |---Файл 2 |---Файл 3
Т.е. примерно так:
Итак, для того, что бы отличать документы-файлы от документов-папок было решено сделать два дополнительных шаблона: один — для файлов, другой — для папок.
Шаблон файла — пустой (не удивляйтесь, Вы потом поймете для чего он нужен) Шаблон для папки — содержит вызов Ditto.
В начальную страницу, Файловый архив, добавим вызов Ditto:<h3>Файловый архив:</h3> [!Ditto? &id=`archiv` &parents=`[*id*]` &noResults=` ` &filter=`template,15,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !] [!Ditto? &id=`archiv` &parents=`[*id*]` &filter=`template,16,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !] </div> <div> [+archiv_previous+] - Стр.: [+archiv_pages+] - [+archiv_next+] </div>
Пояснения: 1. Почему два вызова? Два вызова тут потому, что с помощью одного вызова не получится сортировать раздельно папки и файлы (а ведь мы хотим, что бы папки были всегда первыми в списке). 2. Почему &id=`archiv`? Это сделано на всякий случай, ведь на странице могут быть и другие вызовы Diito, например, Новости. 3. Зачем &noResults=` `? А это для того, что бы вместо сообщения «Записей не найдено.» ничего не выводилось. Почему в одном вызове? Просто мы не хотим, что бы на странице не было этой надписи, если нет папок в поддиректории, а вот если не будет файлов — это надпись вполне уместна. 4. &filter=`template,15,8` и &filter=`template,16,8` Вот тут выводим только то, что нужно: в первом файле выводим только те документы, которые с шаблоном id=15 (Шаблон папок), во втором только с шаблоном id=16 (Шаблон файлов).
Все остальное, я думаю, понятно.
Теперь те самые шаблоны: как я уже говорил, шаблон файлов может быть полностью пустым, а вот шаблон папок должен содержать вызов Ditto: <h3>Файловый архив:</h3> <div> <img src="assets/images/filetype/arrow_up.png"><a href="javascript:history.back()">Назад</a><hr> [!Ditto? &id=`archiv` &parents=`[*id*]` &noResults=` ` &filter=`template,15,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !] [!Ditto? &id=`archiv` &parents=`[*id*]` &filter=`template,16,8` &tpl=`repository` &sortBy=`createdon` &summarize=`30` &dateFormat=`%d.%m.%Y` &paginate=1 !] </div> <div> [+archiv_previous+] - Стр.: [+archiv_pages+] - [+archiv_next+] </div>
Как Вы могли заметить, отличие только в том, что мы добавили ссылку Назад. И еще: к шаблону для Папок необходимо сделать TV параметр, я его назвал tvfile, а тип ввода сделал File.
Далее, что у нас содержит чанк &tpl=`repository`:[[repome? &docId=`[+id+]` ]]
Т.е. в чанке у нас только вызов простого рукописного сниппета repome. Что делает сниппет: 1. Ассоциирует различные расширения файлов с их иконками 2. Происходит подсчет размера файла, выделение имени файла 3. Распознавание шаблонов и формирование вывода
Сниппет RepoMe Поясню основные параметры:$idTemplateFolder - ID шаблона для Папки $folderTitle - Какое поле использовать в качестве заголовка для папки $folderDescription - Какое поле использовать для описания папки $idTemplateFile - ID шаблона для Файла $fileTitle - Какое поле использовать в качестве заголовка для файла $fileDescription - Какое поле использовать для описания файла $fileFile - Какое поле использовать для ссылки на файл $fileDate - Какое поле использовать для показа время загрузки файла $imgset - Ассоциация типов файлов с иконками $imgPath - Путь к иконкам
Сам код сниппета я приводить не буду, я постарался его максимально прокомментировать и положил его в архив в конце статьи.
И, наконец, по стилям: те, кто используют FileDowload, наверное, заметили, что я использовал здесь его стили из примера — было лень переделывать (в архиве я приложил их).
Что должно получится:
И если войти в папку Вихревые генераторы:
О, и чуть не забыл: можно же ведь использовать ManagerManager. Убрав лишние поля (напомню, это делается через добавление иструкции mm_hideFields('список_полей_через_запятую', 'id_роли_пользователя', 'id_шаблона') в чанк mm_rules, если Вы держите правила там либо же в одноименный файл в директории managermanager).
Тогда, для менеджера, вид административной части будет такой:
Оцениваем:
+ Колоссальная простота использования, можно один раз объяснить принцип добавления новостей — а потом его же использовать при объяснении работы с файловым архивом + Реализуется на Ditto, а значит, теоретически, можно прикручивать всякие ditto примочки, например рейтинг + Реализуется в виде документов — а значит можно, имея фантазию, наделать кучу наворотов + Независимость названий файлов и папок от их имен + Независимость от физического расположения файлов + Поддержка иконок + В принципе, универсальность + Простой код: возможность допиливать как угодно
— Неудобная настройка вывода (отсутствие шаблонов и плейсхолдеров для них) — Для максимальной адаптации для Вашего ресурса, возможно, придется много допиливать — Все-таки до профессионального инструмента далековато
На что нужно обратить внимание: Не забываем про
<base href='[(site_url)]'> Не забываем разрешать менеджерам пользоваться FCKeditor'ом и загружать различные типы файловСкачать:Архив со сниппетом и всем необходимым
На этом все. Возможно, если данная версия будет в ходу, будем ее улучшать, добавив шаблоны и прочие полезности.
habr.com
| Сниппет Ditto | Уроки MODx Evo
Cниппетом Ditto выводит ресурсы с использованием шаблонов.
Кэшируемый вызов сниппета Ditto.
[[Ditto]]
Некэшируемый вызов сниппета Ditto.
[!Ditto!]
Параметры сниппета Ditto можно посмотреть по ссылкам:
http://wiki.modxcms.com/index.php/Ditto
http://i--gu.ru/ditto
Пример вызова сниппета Ditto
[!Ditto? &parents=`12` &tpl=`albom-gallery` &dateSource=`pub_date` &sortBy=`pub_date`!]
[!Ditto? &parents=`12` &tpl=`albom-gallery` &orderBy=`pagetitle ASC`!]
[!Ditto? &tpl=`otziv` &dateSource=`pub_date` &sortBy=`pub_date` &dateFormat=`%d.%m.%Y` &paginate=`1` &display=`2`!]
Обратите внимание, что когда вы используете TV параметр в шаблоне Ditto, то вызов осуществляется с помощью конструкции вида: [+name+], если же выводите на странице ресурса, то конструкция вывода TV параметра будет иметь вид: [*name*]. Это касается и всех стандартных полей, таких как [*pagetitle*], [*longtitle*], [*introtext*] и других полей.
Пример шаблона для Ditto
<li>[+img-news+]<div> <h3>[+longtitle+]</h3> <p>[+introtext+]</p> <p><a href="[~[+id+]~]" title="Читать подробнее об этой услуге">Подробнее »</a></p> </div></li>
где [~[+id+]~] — конструкция, отвечающая за вывод URL ресурса.
Часто используемые параметры Ditto
&parents=`12` – список id документов, откуда будут браться документы для вывода Ditto (список ID через запятую). Документы берутся до глубины &depth.
&tpl=`albom-gallery` – шаблон вывода.
&dateSource=`pub_date` &sortBy=`pub_date`– при сортировке новостей (документов) по дате необходимо прописывать эти две конструкции.
&orderBy=`pagetitle ASC` – порядок и направление, используемые для сортировки результатов (ASC|DESC).
&dateFormat=`%d.%m.%Y` – формат даты публикации документа (tv параметр [+date+])
web-grafika.pro
Создание поддержка продвижение сайта на Modx
Автор: Марк Каплан
Ditto - сниппет для организации информации из множества документов в необходимом виде. С его помощью можно реализовать:
- блог - список статей, новостей, ссылок - архив новостей - каталог товаров, сайтов, файлов и т.д. - RSS, XML, JSON, ATOM данные - много других форматов вывода, благодаря полной поддержке шаблонов
Параметры
Шаблоны
Параметры пагинации
Параметры summary
Параметры dateFilter
Параметры tagging
Параметры request
Параметры glossaryFilter
Параметры search
Параметры tvFilter
Плейсхолдеры
Создавая шаблон Дитто, вы указываете плэйсхолдеры там, где вы хотите увидеть свои данные. У Дитто есть свои собственные пдэйсхолдеры, плюс он поддерживает переменные (поля) используемые в каждом документе. (Примечание: если вы хотите использовать переменные (поля) документа непосредственно на странице с обычным шаблоном, вы должны использовать формат [*alias*])
Плейсхолдеры документа
[~[+id+]~] – Создает полный URL, основанный на ID, но не создает саму ссылку.
Например:
<h4><a href="[~[+id+]~]">[+title+]</a></h4>
Псевдоним страницы, используется для создания ЧПУ |
Возвращает 1 (true) or 0 (false) если этот документ должен быть кэширован. По умолчанию установлено в false для нормального функционирования динамических сниппетов |
Содержимое документа |
Возвращает строчный параметр типа содержимого из выпадающего меню Content Type в панели администратора |
Строка внедрения или прикрепления. Внедренные документы показываются в веб-браузерах. Прикрепленные документ могут быть загружены на локальную машину через диалоговое окно загрузки файла веб-браузера |
Возвращает идентификатор пользователя, создавшего документ |
Дата (в секундах с 1 января 1970 г.), когда документ был создан |
Возвращает 1 (true) or 0 (false). Когда true, этот документ находится в корзине до ее очистки. После этого запись стирается полностью из базы данных (удаляется ПО-НАСТОЯЩЕМУ) |
Возвращает идентификатор пользователя, удалившего этот документ |
Возвращает дату удаления документа (в секундах с 1 января 1970 г.) |
Описание документа |
True (1) or False (0) показывает установлен или нет счетчик посещений страницы |
Возвращает идентификатор пользователя, который последний редактировал документ |
Возвращает дату последнего редактирования (в секундах с 1 января 1970 г.) |
True (1) or False (0) показывает установлены или нет ключевые слова для данного документа |
True (1) or False (0) показывает установлены или нет метатэги для данного документа |
Возвращает 1 (true) или 0 (false) – соответственно если этот документ показывается в меню или нет |
Целое число обозначающее или показывающее идентификатор документа |
Аннотация документа |
Целое число: true (1) если документ является контейнером или false (0) если нет. |
Расширенный заголовок документа |
Целое число показывающее позицию в меню |
Название документа в меню |
Заголовок документа |
идентификатор родительского документа |
True (1) or False (0) показывает установлены ли разрешения на просмотр этого документа для менеджеров |
True (1) or False (0) показывает установлены ли разрешения на просмотр этого документа для веб-пользователей |
Дата с которой документ опубликуется (в секундах с 1 января 1970 г.). Примечание: если этот параметр указан, published автоматически устанавливается в true (1) |
Целое число показывающее статус публикования (0 = нет, 1 = да) |
true (1) или false (0), устанавливается, если в администраторской панели должен использоваться rich text editor |
Возвращает 1 (true) или 0 (false), что означает что этот документ доступен или не доступен для поиска |
идентификатор шаблона, используемого для этого документа |
Возвращает строчный параметр document для страниц или "reference" для ссылок |
Дата окончания публикации документа (в секундах с 1 января 1970 г.). Примечание: установка этого параметра НЕ имеет эффекта на изменение статуса установок published |
Плейсхолдеры Дитто
Имя автора. Сначала createdby->fullname, createdby->username, admin |
Дата в установленном формате. По умолчанию используется createdon (editedon и pub_date как варианты) |
Порядковый номер полученного документа в пределах текущей страницы |
Порядковый номер полученного документа в пределах полного набора документов |
Содержимое поля заголовка |
Ссылка на документ |
С версии 2.1.1. Используется в шаблоне &outerTpl. Место вывода результата работы сниппета |
С версии 2.1.1. Выводит классы even/odd, first/last и current |
Плейсхолдеры пагинации
Кнопка «Следующее» |
Кнопка «Предыдущее» |
Разделитель если всегда показывается 0 |
Номер первой показываемой страницы |
Номер текущей страницы, как показано в адресной строке (?start=) |
Номер последней показываемой страницы |
Общее количество страниц |
Список страниц |
Номер показываемой текущей страницы |
Отображаемых элементов на странице (равно display) |
Общее количество страниц |
1 если paginate включено |
Сформированный вывод индивидуального документа |
Плейсхолдеры summary
Поле аннотация (введение) полностью, если указано, или начальная часть содержимого страницы |
Ссылка на полный текст. Текст ссылки установливается параметром &trunctText. По умолчанию из файла языка Ditto |
Плейсхолдеры tagging
Список тэгов, связанных с документом, разделенных &tagDelimiter |
На странице, содержащей результат: теги, используемые для фильтрации отображаемых документов |
Плейсхолдеры dateFilter
Год для фильтра. Двух или четырех значное значение |
Месяц для фильтра |
День для фильтра |
Численное значение месяца |
modx-profi.ru
&ditto_base | [(base_path)]assets/snippets/ditto/ | Папка со слэшем на конце | Расположение фалов Ditto |
&id | пусто | Строка (чувствительна к регистру) | Унакальный ID сессии Ditto |
&language | english | Название языкового файла | язык Ditton |
&format | html | html | json | xml | atom | rss | Используемый формат для вывода |
&config | default | Имя конфигурационного файла | Загрузка выборочной конфигурации |
&debug | 0 - выкл | 0 | 1 | Включить / выключить режим отладки |
&phx | 1 | 0 | 1 | Использование PHx форматирования |
&extenders | пусто | Расширения через запятую | Имена расширений |
&parents | [*id*] | Список ID через запятую | Идентификаторы контейнеров |
&startID | [*id*] | ID документа-контеинера | Папка, откуда берутся документы |
&documents | пусто | Числа через запятую | Список ID документов для результата |
&depth | 1 | число | Глубина поиска документов |
&paginate | 0 - выкл | 0 | 1 | Включает / выключает разбиение по страницам |
&paginateAlwaysShowLinks | 0 | 0 | 1 | Показывать ли [+next+] и [+previous+] всегда |
&tplPaginateNext | LANG | чанк | код | файл | Шаблон оформления ссылки Next. |
&tplPaginatePrevious | LANG | чанк | код | файл | Шаблон оформления ссылки Previous. |
&dateSource | createdon | Поле с датой | Источник определяющий значение [+date+] |
&dateFormat | LANG | Формат времени для PHP | Формат времени для |
&display | 3 | число | all | Число отображаемых документов |
&total | all | число | all | Число возвращаемых документов |
&trunc | 1 | 0 | 1 | Включить обрезание для [+summary+] |
&truncAt | Любой уникальный текст | Текст, служащий разделителем для [+summary+] | |
&truncLen | 300 | число | Ограничение длины в [+summary+]. |
&truncOffset | 30 | число | Количество "блуждающих" символов от truncLen |
&truncText | Read more... | текст | html-код | Текст ссылки в [+link+] |
&tplTrunc | truncText | чанк | код | файл | Шаблон для [+link+] |
&showPublishedOnly | 1 | 0 | 1 | Показывать только опубликованные документы |
&showInMenuOnly | 0 | 0 | 1 | Показывать только документы видимые в меню |
&hideFolders | 0 | 0 | 1 | Скрывать документы-контейнеры |
&seeThruUnpub | 0 | 0 | 1 | Смотреть сквозь неопубликованные документы |
&queryLimit | 0 | число | 0 | Лимит на запрос в базе |
&where | NULL | MySQL WHERE | Специальное условие для запроса |
&noResults | LANG | текст | чанк | Текст выводимый если нет результата |
&removeChunk | NULL | список чанков | Названия вырезаемых чанков |
&hiddenFields | NULL | список полей | Возвращать необработанные поля |
&sortDir | DESC | ASC | DESC | Сортировка документов |
&sortBy |
createdon - по дате создания |
параметр:id | menutitle | pagetitle | introtext | menuindex | pub_date | published | hidemenu | parent | isfolder | description | alias | longtitle | type | template Также: Любое поле документа или TV-параметр |
параметр используемый для сортировки |
&start | 0 | число | Пропуск начальных документов |
&globalFilterDelimiter | | | символ | Разделитель правил фильтра |
&localFilterDelimiter | , | символ | Разделитель параметров фильтра |
&filter | NULL | список фильтров | Фильтр для отсеивания документов |
&keywords | 0 | 0 | 1 | Использование выборки ключевых слов |
&save | 0 | 0 | 1 | 2 | 3 | Сохранить результат в плэйсхолдер |
&tpl | LANG | чанк | код | файл | шаблон для записи |
&tplFirst | &tpl | чанк | код | файл | Шаблон для первого документа |
&tplLast | &tpl | чанк | код | файл | Шаблон для последнего документа |
&tplAlt | &tpl | чанк | код | файл | Шаблон для четных документов |
&tplCurrentDocument | &tpl | чанк | код | файл | Шаблон текущего документа |
www.imho.74pro.ru
[Modx Evo] Новости Ditto Modx от Василисы Белозеровой
- Создаем новый ресурс, называем его «Новости», переходим на вкладку Настройки страницы и снимаем галочку около "Кэшируемый" (это необходимо, что бы работал переключатель страниц)
- Все дочерние документы этого ресурса будут нашими новостями. В поле Заголовок вводим заголовок новости, в поле Summary вводим сокращенную новость, в самое большое окно вводим полный текст новости. Обязательно включить галочку на Опубликовать. Для создания дочернего документа правой кнопкой нажимаем на документе «Новости» и выбираем «Дочерний док.» (“Create document here”)
- Создаем чанк , например ”tpl_news” который будет содержать html-шаблон вывода статьи.
<div><h3><a href="[~[+id+]~]" title="[+pagetitle+]">[+pagetitle+]</a></h3><div><span>[+date+]</span> [+introtext+] </div><div ><a href="[~[+id+]~]" title="Перейти к полному тексту новости">Читать дальше →</a></div></div>
- css прописываем
.news {padding:0; margin:0 0 15px 0;}.news h3 {padding:0px; margin:0px; border:none;}.news h5 {padding:0px; margin:0px; border:none; font-size: 13px; font-weight:bolder; color:#3359CC;}.news .introtext{padding:5px 0 0 0;}.news .introtext .date {font-style:italic;}.news .readmore {text-align:right;}
- Что бы создать страницу вывода всех новостей в самом большом окошке ресурса «Новости» (или создаем новый ресурс и выполняем пункт 1) вызываем КЕШИРИРУЕМЫЙ Ditto&summarize=`5` — задаем количество новостей на странице &paginate=1 — включаем режим разбивки на страницы, тем самым отключаем архив &tpl=` tpl_news ` - ссылаемся на ранее созданный нами шаблон вывода статей.
[[Ditto? &startID=`5` &summarize=`20` &tpl=`tpl_news` &paginate=`1`]] Показаны [+start+] - [+stop+] из [+total+] Новостей [+previous+] [+pages+] [+next+]
- Что бы создать блок нескольких последних новостей на главной странице, в нужном месте вызываем Ditto
[[Ditto? &id=`news` &startID=`11,15` &summarize=`3` &tpl=`ditto_news`&sortBy=`menuindex`&sortDir=`ASC`]]
Сортировка:
&sortBy=`menuindex` или date или любой TV
&sortDir=`ASC` или DESC
Дополнение:
[+createdon:date=`%d.%m.%Y`+] // дата создания документа[+editedon:date=`%d.%m.%Y`+] // дата последнего редактирования документа[+pub_date:date=`%d.%m.%Y`+] // дата публикации документа
Фото к новости
Создаем TV с именем foto и типом - картинка, применяем к шаблону вывода новостей, вписываем TV в шаблоны вывода новостей:
[+phx:if=`[*foto*]`:is=``:then=`<img alt="Нет фотографии" src="[*nofoto*]">`:else=`<img alt="[*pagetitle*]" src="[*foto*]">`+]
Создаем второй TV с именем nofoto и типом ввода Image, применяем к шаблону новостей, в значение по умолчанию прописываем путь к кртинке - заглушке.
yotadom.com
Вывод статей на страницу с помощью Ditto
Вероятно, одной из самых распространенных задач при конструировании сайта является вывод на страницу новостных, информационных статей, каталога продукции и т. д., одним словом вывод документов на страницу. Самым мощным инструментом MODx для этого можно считать сниппет Ditto, разработанный Марком Капланом (Mark Kaplan). Среди его основных функций - разбивка на страницы, вывод краткой версии статьи со ссылкой «далее», генерирование архива, сортировка по дате, заголовку и т. д.
Итак, рассмотрим пример вывода новостных статей на страницу сайта. Пусть нам нужно выводить по 5 статей на странице, без архива, в качестве краткой версии статьи использовать поле "Аннотация" (introtext) и как ссылку на полную версию статьи использовать «>>».
- Создаем документ и называем его «Новости»
- Создаем 2-3 новостных статьи как дочерние документы. Напомню, что для создания дочернего документа правой кнопкой нажимаем на документе «Новости» и выбираем «Дочерний док.» (“Create document here”).
- Скачиваем сниппет Ditto и устанавливаем его в нашу систему. Для этого в панели управления ресурсами создаем новый сниппет, называем его “Ditto” и в тело вставляем содержимое файла snippet.ditto.1.0.1.php. Также, в директории assets/snippets/ditto у нас должен находиться файл ditto.class.inc.php.
- Создаем чанк с именем, например ”ditto_news” который будет содержать html-шаблон вывода статьи. Пример шаблона (используется на этом сайте):<h3> <a href="[(base_url)][~[+id+]~]"> [+pagetitle+] </a> - <span>[+date+]</span> </h3> <div> <p>[+introtext+]</p> <div>[+link+]</div> </div> Стоит отметить, что вы можете также выводить в шаблоне дополнительный параметр документа (TV), для этого используйте подстановщик, добавив к его имени ‘tv”, например[+tvпараметр+]
- Начинаем редактировать документ «Новости», где у нас будут выводиться аннотации новостей. Как и любой другой некэшируемый сниппет Ditto вызывается следующим образом[!Ditto!]
Далее задаем параметры, чтобы получить нужный нам вывод статей (имейте ввиду, что при задании значения параметра нужно использовать «обратный апостроф», тот что на одной клавише с буквой «Ё»):
- &summarize=`5` — задаем количество новостей на странице
- &paginate=1 — включаем режим разбивки на страницы, тем самым отключаем архив
- &tpl=` ditto_news ` - ссылаемся на ранее созданный нами шаблон вывода статей.
- &dateFormat=`%d.%m.%Y` — задаем формат вывода даты
- &sortBy=`createdon` — сортируем статьи по дате создания
- &truncText=`>>` — задаем текст ссылки на полную версию статьи
- Итак, у нас должна получиться строка типа:[!Ditto? &tpl=`ditto_news` &sortBy=`createdon` &summarize=`4` &dateFormat=`%d.%m.%Y` &truncText=`>>` &paginate=1!]
- Ниже нам следует дописать html-код для вывода номеров страниц, что-то типа<div> Стр.: [+pages+] </div>
- Готово! Сохраняем документ «Новости» и смотрим, что у нас получилось на сайте.
Архив02.07.06 в 22:07
modx.ru