Наверх

Summary 1.0.3

В разделе «Репосты» расположены чужие статьи, которые мне понравились или показались полезными.

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 Длина текста для вывода
Возможные значения
целое число
Значение по умолчанию
200
Примечание
Округляется до ближайшей точки/слова в пределах 100 символов. Если этот же параметр был указан через параметр options, то значение будет переопределено.
text Обрабатываемый текст. В MODX Revolution этот параметр имеет псевдоним input для того, чтобы сниппет можно было вызывать как модификатор.
Возможные значения
строка с текстом
Значение по умолчанию
пусто
Примечание
Если строка пустая, то снипет так же вернет пустую строку и отправит в лог замечание типа modX::LOG_LEVEL_DEBUG
tags Идентификатор обработки HTML тегов - оставлять/вырезать
Возможные значения
0 - вырезать, 1 - оставлять
Значение по умолчанию
0
Примечание
Если этот же параметр был указан через параметр options, то значение будет переопределено.
noparser Идентификатор обработки MODX тегов - оставлять/вырезать
Возможные значения
0 - вырезать, 1 - оставлять
Значение по умолчанию
1
Примечание
Если этот же параметр был указан через параметр options, то значение будет переопределено.
dotted Схема добавления точек в конец текста
Возможные значения
0 - никогда не добавлять, 1 - добавлять только если сокращенный текст не совпал с оригинальным, 2 - добавлять точку если текст был обрезан по разделителю cut или троеточие, если текст был сокращен по числу символов в тексте.
Значение по умолчанию
0
Примечание
Если этот же параметр был указан через параметр options, то значение будет переопределено.
cut Разделитель вступительного текста в основном основного
Возможные значения
любая последовательность символов
Значение по умолчанию
Примечание
Если этот же параметр был указан через параметр options, то значение будет переопределено.
options Дополнительные параметры сниппета передаваемые во время вызова при помощи модификаторов MODX Revolution
Возможные значения
Строка с параметрами tags, len, noparser разделенные символом &
Значение по умолчанию
пусто
Примечание
Этот параметр доступен только в 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


7 комментариев

  1. Владимир 04 марта 2016, 04:41 # 0
    Хорошо, что доки тут сохранены, а то у Евгения Борисова все отключено по старым ссылкам. Конечно, параметров не много, и все «и так понятно», но надеялся, что есть еще какие-то параметры типа регулярки и пр. фильтров, ан`нет, не предусмотрено. Будем юзать феном плюсом к Summary.
    Спасибо, Илья, что сохраняешь в своем блоге разное\полезное.
    1. Илья Уткин 04 марта 2016, 08:33 # 0
      Да, кстати, я сам эти доки из кеша гугла доставал. Евгений, я так понял, охладел к MODX вообще)
      1. Владимир 04 марта 2016, 08:36 # 0
        Очень хорошая идея дублировать доки! Блог Евгения не только о MODX и он в данное время полностью отсутствует, может переделывает, но факт — доки исчезли.
    2. Олег 14 декабря 2017, 06:25(Комментарий был изменён) # 0
      У него есть возможность запрещать обрабатывать определенные теги? К примеру
      <blockquote>
      1. Илья Уткин 14 декабря 2017, 07:55 # 0
        Насколько я знаю, нет. Вообще, Summary не «обрабатывает» теги. Он их либо вырезает, либо оставляет. Что значит «запрещать обрабатывать определенные теги»?
        1. Олег 14 декабря 2017, 08:02 # 0
          Вывожу последние комментарии. Если коммент длинный, мне нужно его обрезать. blockquote прячу в стилях, что бы цетируемый текс не показывался, только сам коммент. При обрезке коммента, может обрезать текст в blockquote и завершить выполнение. А мне нужно что бы он пропускал текст в blockquote.
          Пока решение не нашел, пока так
          [[+text:strip_tags=`<img>,<video>`:escape:ellipsis=`75`]]
      2. Александр 13 февраля 2020, 18:20 # 0
        У меня dotted не работает, работает dot. Но вопрос: вывожу с помощью сниппета начало описания товара в аннотацию вот так: [[summary? &text=`[+content+]` &len=`90` &dot=`2`]]
        Если описание есть, все ОК, если же в данном товаре его пока нет, в аннотации появляется на пустом месте точка. Если поставить &dot=`0` точка исчезает, но вместе с ней и троеточие к аннотациям. Как избавиться от точки на пустом месте, не отключая троеточие?

        Авторизация

        через сервис Loginza:


        Шаблоны MODX

        1 2 Дальше »

        Объектная
        модель
        MODX