Summary это по сути отдельный класс для формирования краткого описания на основании длинного текста. Данный класс вообще не зависит от MODX и поэтому на его базе были написаны сниппеты как для MODX Evolution, так и для MODX Revolution. В основе компонента лежит логика одноименного экстендера для сниппета Ditto из MODX Evolution.
Функционал summary частично схож с модификатором ellipsis в MODX Revolution, т.е. обрезание строки до заданного количества символов. Но в отличии от модификатора ellipsis, этот сниппет может удалять из строки HTML теги, преобразовывать MODX теги в entities сущности. Помимо этого, summary понимает тег cut (который можно переопределить при желании) и если он не обнаружен, то сокращаемый текст не обрывается на половине слова или середине предложения, а заканчивается на ближайшей точке. Если в обрабатываемом тексте встречаются HTML теги, то они могут быть оставлены. Но при этом, если требуемая длинна текста достигнута, то все не закрытые теги будут закрыты автоматически.
В отличии от многих других аналогичных сниппетов, summary не добавляет бездумно троеточие в конец текста, т.к. не всегда в этом есть необходимость. Поэтому если хочется всегда иметь троеточие, то указывайте его после вызова сниппета.
Стоит помнить, что Summary может добавить точку в конец сокращенного текста. Но произойдет это только в том случае, если текст был обрезан по строке указанной в параметре cut и параметре dotted имеет значение 2. Более подробно смотрите в описании самого параметра dotted.
В основе компонента лежит логика одноименного экстендера для сниппета Ditto из MODX Evolution.
Параметр | Описание | Значение |
---|---|---|
len | Длина текста для вывода |
|
text | Обрабатываемый текст. В MODX Revolution этот параметр имеет псевдоним input для того, чтобы сниппет можно было вызывать как модификатор. |
|
tags | Идентификатор обработки HTML тегов - оставлять/вырезать |
|
noparser | Идентификатор обработки MODX тегов - оставлять/вырезать |
|
dotted | Схема добавления точек в конец текста |
|
cut | Разделитель вступительного текста в основном основного | |
options | Дополнительные параметры сниппета передаваемые во время вызова при помощи модификаторов MODX Revolution |
|
Установка сниппета на MODX Revolution
Компонент доступен для скачивания в офф. репозитории MODX. В случае, если сайт окажется не доступен, то скачать пакет можно в разделе релизов на GitHub. Ну а если вы желаете доработать сниппет, то можете сделать форк проекта (опять таки на GitHub) и прислать PullRequest. Для желающих собрать пакет самостоятельно, в корне лежит папка _build.
Установка сниппета на MODX Evolution
Необходимо скачать исходники сниппета с GitHub и залить в корень вашего сайта. После чего создать сниппет с именем summary и содержимым:
return require MODX_BASE_PATH.'assets/snippets/summary/snippet.summary.php';
Пример 1
Удалить все теги из поля содержимое ресурса, а сам текст в содержимом ресурса сократить до длины 200 символов с плавающей длиной +/- 100 символов. Если в содержимом ресурса будет обнаружен тег cut, то сниппет должен вернуть отрезок текста до этого тега. Все HTML теги необходимо удалить, а MODX теги оставить:[[summary? &text=`[*content*]`]] //MODX Evolution [[summary? &text=`[[*content]]`]] //MODX Revolution [[*content:summary]] //MODX Revolution с вызовом при помощи модификаторов
Пример 2
В обрабатываемом тексте оставить HTML теги, а сам текст сократить до длины от 200 до 400 символов (300 +/- 100). Но если в тексте обнаружен тег cut, то сниппет должен вернуть отрезок текста до этого тега. Все MODX теги необходимо оставить:[[summary? &text=`[*content*]` &len=`300` &tags=`1`]] //MODX Evolution [[summary? &text=`[[*content]]` &len=`300` &tags=`1`]] //MODX Revolution [[*content:summary=`len=300&tags=1`]] //MODX Revolution с вызовом при помощи модификаторов
Пример 3
Обрабатываемый текст сократить до 50 символов. Если на первых 50 символах точка не будет обнаружена, то необходимо ее найти в пределах ближайших 100 символов (таким образом максимальная длина текста может быть 150 символов). Но если в тексте встретиться тег cut, то на выходе должен быть текст до этого тега. Все MODX теги преобразуются в HTML сущности, а HTML теги будут вырезаны.[[summary? &text=`[+content+]` &len=`50` &noparser=`0`]] //MODX Evolution [[summary? &text=`[[+content]]` &len=`50` &noparser=`0`]] //MODX Revolution [[+content:summary=`len=50&noparser=0`]] //MODX Revolution с вызовом при помощи модификаторов
Пример 4
Если в тексте будет обнаружен разделитель указанный параметре cut, то сниппет отдаст текст до этого разделителя (в конце будет установлена точка). Если же разделителя в тексте нет, то сниппет попробует сократить текст до 100 символов +/- 50. В случае успешного сокращения текста в конец будет добавлено троеточие. Если же текст короче 100 символов, то сниппет вернет этот же текст. На выходе во всех случаях будут удалены HTML теги, а MODX теги преобразуются в HTML сущности.[[summary? &text=`[+content+]` &len=`50` &dotted=`2` &cut=`////CUT////` &noparser=`0`]] //MODX Evolution [[summary? &text=`[[+content]]` &dotted=`2` &cut=`////CUT////` &len=`50` &noparser=`0`]] //MODX Revolution [[+content:summary=`len=50&noparser=0&dotted=2&cut=////CUT////`]] //MODX Revolution с вызовом при помощи модификаторов
Версия 1.0.3 от 31.07.2013
- Исправлен глюк с завершающим символом entities
Версия 1.0.2 от 31.07.2013
- Добавлен параметр dotted для задания схемы расстановки точек в конце текста
- Добавлен параметр cut для смены разделителя во вступительном тексте
- Исправлена проблема с сокращением текста по html-тегу
Версия 1.0.1 от 14.03.2013
- Исправлена обработка параметров noparser и tags
- Исправлен глюк с TinyMCE с оберткой тега cut в тег p
Источник: http://blog.agel-nash.ru/addon/summary.html
Спасибо, Илья, что сохраняешь в своем блоге разное\полезное.
Пока решение не нашел, пока так
Если описание есть, все ОК, если же в данном товаре его пока нет, в аннотации появляется на пустом месте точка. Если поставить &dot=`0` точка исчезает, но вместе с ней и троеточие к аннотациям. Как избавиться от точки на пустом месте, не отключая троеточие?