Инструменты модификации строк.
- PHP >= 5.6
- (MODX)EvolutionCMS >= 1.1
- (MODX)EvolutionCMS.libraries.ddTools >= 0.60
- (MODX)EvolutionCMS.snippets.ddtypograph >= 2.6 (если используется параметр
tools->typographer) - PHP.libraries.Parsedown >= 1.8.0-beta-7 (содержится в архиве)
Используя (MODX)EvolutionCMS.libraries.ddInstaller
Просто вызовите следующий код в своих исходинках или модуле Console:
// Подключение (MODX)EvolutionCMS.libraries.ddInstaller
require_once(
$modx->getConfig('base_path')
. 'assets/libs/ddInstaller/require.php'
);
// Установка (MODX)EvolutionCMS.snippets.ddStringTools
\DDInstaller::install([
'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddStringTools',
]);- Если
ddStringToolsотсутствует на вашем сайте,ddInstallerпросто установит его. - Если
ddStringToolsуже есть на вашем сайте,ddInstallerпроверит его версию и обновит, если нужно.
- Название сниппета:
ddStringTools. - Описание:
<b>2.3</b> Инструменты модификации строк.. - Категория:
Core. - Анализировать DocBlock:
no. - Код сниппета (php): Вставьте содержимое файла
ddStringTools_snippet.phpиз архива.
- Создайте новую папку
assets/snippets/ddStringTools/. - Извлеките содержимое архива в неё (кроме файла
ddStringTools_snippet.php).
-
inputString- Описание: Исходная строка.
- Допустимые значения:
string- Исходная строка также может быть задана, как нативный PHP объект или массив (например, для вызовов через
$modx->runSnippet). В этом случае она сначала будет преобразована в JSON.objectarray
- Значение по умолчанию:
''
-
tools- Описание: Список инструментов, которые будут применены к
inputString. Инструменты будут вызваны в соответствии с указанным порядком. - Допустимые значения:
stringJsonObject— в виде JSONstringHjsonObject— в виде HJSONstringQueryFormatted— в виде Query string- Также может быть задан, как нативный PHP объект или массив (например, для вызовов через
$modx->runSnippet).arrayAssociativeobject
- Значение по умолчанию:
'{}'
- Описание: Список инструментов, которые будут применены к
-
tools->{$toolName}- Описание: Инструмент, где ключ — имя инструмента, а значение — параметры инструмента.
- Имена инструментов регистронезависимы (следующие имена равны:
caseConverter,Caseconverter,caseconverterи т. п.).
- Имена инструментов регистронезависимы (следующие имена равны:
- Допустимые значения:
object— объект с параметрами инстумента (см. ниже)boolean— для простых инструментов без параметров или если вам подходят параметры по умолчанию (если это возможно), просто передайтеtrue
- Значение по умолчанию: —.
- Описание: Инструмент, где ключ — имя инструмента, а значение — параметры инструмента.
-
tools->caseConverter- Описание: Изменяет регистр символов в строке. Юникод поддерживается.
- Допустимые значения:
object - Значение по умолчанию: —.
-
tools->caseConverter->toLower- Описание: Преобразовать строку к нижнему регистру.
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->caseConverter->toUpper- Описание: Преобразовать строку к верхнему регистру.
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->markdownParser- Описание: Преобразует Markdown в HTML используя библиотеку Parsedown.
- Допустимые значения:
boolean— если нужно преобразование с параметрами по умолчанию, просто передайтеtrueobject— или объект с параметрами (см. ниже)
- Значение по умолчанию:
false
-
tools->markdownParser->parseInline- Описание: Парсить только встроенные элементы.
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->typographer- Описание: Типографирование текста при помощи EvolutionCMS.snippets.ddTypograph.
- Параметры передаются в EvolutionCMS.snippets.ddTypograph.
- Больше информации в его документации.
- Допустимые значения:
boolean— если нужно типографирование с параметрами по умолчанию, просто передайтеtrueobject— или объект с параметрами (см. ниже)
- Значение по умолчанию:
false
- Описание: Типографирование текста при помощи EvolutionCMS.snippets.ddTypograph.
-
tools->typographer->optAlign- Описание: Оптическое выравнивание (висячая пунктуация).
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->typographer->optAlign_useClasses- Описание: Использовать CSS-классы вместо inline-стилей для оптического выравнивания (
<span class="oa_comma_b">вместо<span style="margin-right:-0.2em;">).- Если параметр включен, не забудьте прописать на своём сайте следующие правила CSS:
.oa_obracket_sp_s {margin-right:0.3em;} .oa_obracket_sp_b {margin-left:-0.3em;} .oa_obracket_nl_b {margin-left:-0.3em;} .oa_comma_b {margin-right:-0.2em;} .oa_comma_e {margin-left:0.2em;} .oa_oquote_nl {margin-left:-0.44em;} .oa_oqoute_sp_s {margin-right:0.44em;} .oa_oqoute_sp_q {margin-left:-0.44em;}
- Если параметр включен, не забудьте прописать на своём сайте следующие правила CSS:
- Допустимые значения:
01
- Значение по умолчанию:
0
- Описание: Использовать CSS-классы вместо inline-стилей для оптического выравнивания (
-
tools->typographer->text_paragraphs- Описание: Простановка параграфов и переносов строк.
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->typographer->text_autoLinks- Описание: Выделение ссылок из текста (в том числе email).
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->typographer->etc_unicodeConvert- Описание: Преобразовывать HTML-сущности в юникод (
—вместо—и т. п.). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Преобразовывать HTML-сущности в юникод (
-
tools->typographer->noTags- Описание: Не добавлять HTML-теги.
- Бывают ситуации, когда использование HTML-тегов в тексте недопустимо (например, когда текст выводится в значение атрибута тега), для таких случаев и предназначен этот параметр.
- Допустимые значения:
boolean - Значение по умолчанию:
false
- Описание: Не добавлять HTML-теги.
-
tools->typographer->excludeTags- Описание: HTML-теги, содержимое которых не будет типографироваться.
- Допустимые значения:
stringCommaSeparated - Значение по умолчанию:
'notg,code'
-
tools->tagRemover- Описание: Удаляет HTML и PHP-теги из строки.
- Допустимые значения:
boolean— если нужно удалить все теги, просто передайтеtrueobject— или объект с параметрами (см. ниже)
- Значение по умолчанию:
false
-
tools->tagRemover->allowed- Описание: Теги, которые не нужно удалять (например,
<p><div>). - Допустимые значения:
string - Значение по умолчанию:
''
- Описание: Теги, которые не нужно удалять (например,
tools->specialCharConverter- Описание: Преобразовать специальные символы в HTML-сущности.
- Допустимые значения:
boolean - Значение по умолчанию:
false
-
tools->charEscaper- Описание: Экранировать специальные символы для JS.
- Допустимые значения:
boolean— если нужно экранировать с параметрами по умолчанию, просто передайтеtrueobject— или объект с параметрами (см. ниже)
- Значение по умолчанию:
false
-
tools->charEscaper->backslashes- Описание: Экранировать обратные слэши (
'\\'будут заменены на'\\\\'). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Экранировать обратные слэши (
-
tools->charEscaper->lineBreaks- Описание: Экранировать переносы строк (
"\r\n","\r","\n"будут заменены на'\r\n'). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Экранировать переносы строк (
-
tools->charEscaper->tabs- Описание: Экранировать табуляторы (
' '(табуляторы) будут заменены на' '(пробелы)). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Экранировать табуляторы (
-
tools->charEscaper->modxPlaceholders- Описание: Экранировать плейсхолдеры (MODX)EvolutionCMS (
'[+'и'+]'будут заменены на'\[\+'и'\+\]'). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Экранировать плейсхолдеры (MODX)EvolutionCMS (
-
tools->charEscaper->quotes- Описание: Экранировать кавычки (
"'"и'"'будут заменены на"\'"и'\"'). - Допустимые значения:
boolean - Значение по умолчанию:
true
- Описание: Экранировать кавычки (
tools->urlEncoder- Описание: URL-кодирование строки согласно RFC 3986.
- Допустимые значения:
boolean - Значение по умолчанию:
false
tools->placeholderRemover- Описание: Удаляет плейсхолдеры вида
[+placeholder+]. - Допустимые значения:
boolean - Значение по умолчанию:
false
- Описание: Удаляет плейсхолдеры вида
-
tools->pregReplacer- Описание: Выполняет поиск и замену по регулярному выражению.
- Допустимые значения:
object - Значение по умолчанию: —
-
tools->pregReplacer->pattern- Описание: Искомый шаблон.
- Допустимые значения:
string - Обязателен
-
tools->pregReplacer->replacement- Описание: Строка для замены
- Допустимые значения:
string - Значение по умолчанию:
''
-
tools->numberer- Описание: Преобразование и форматирование чисел.
- Допустимые значения:
object - Значение по умолчанию: —
-
tools->numberer->isFloatAllowed- Описание: Разрешено ли число с плавающей точкой.
- Допустимые значения:
boolean - Значение по умолчанию:
true
-
tools->numberer->decimalsNumber- Описание: Количество знаков после запятой.
- Допустимые значения:
integer0— any
- Значение по умолчанию:
0
-
tools->numberer->isDecimalsFixed- Описание: Позволяет форматировать число с использованием фиксированного количества знаков после запятой (например
10.00) в соответствии сtools->numberer->decimalsNumber. - Допустимые значения:
boolean - Значение по умолчанию:
false
- Описание: Позволяет форматировать число с использованием фиксированного количества знаков после запятой (например
-
tools->numberer->thousandsSeparator- Описание: Символ, используемый для разделения разрядов (например,
' 'для1 234 567или','для1,234,567). - Допустимые значения:
string - Значение по умолчанию:
''
- Описание: Символ, используемый для разделения разрядов (например,
-
tools->tplParser- Описание: Сниппет получает содержимое чанка по имени и парсит его.
- Если строка
inputStringпуста, вернётся не содержимое чанка, а просто пустая строка.
- Если строка
- Допустимые значения:
object - Значение по умолчанию: —
- Описание: Сниппет получает содержимое чанка по имени и парсит его.
-
tools->tplParser->tpl- Описание: Имя чанка, либо код напрямую, начиная с
@CODE:.- Доступные плейсхолдеры:
[+snippetResult+]— строкаinputString, изменённая предыдущими инструментами
- Доступные плейсхолдеры:
- Допустимые значения:
stringChunkNamestring— передавать код напрямую без чанка можно начиная значение с@CODE:
- Обязателен
- Описание: Имя чанка, либо код напрямую, начиная с
-
tools->tplParser->placeholders- Описание: Дополнительные данные, которые будут переданы в шаблон
tools->tplParser->tpl.- Вложенные объекты и массивы также поддерживаются:
{"someOne": "1", "someTwo": "test" }=>[+someOne+], [+someTwo+].{"some": {"a": "one", "b": "two"} }=>[+some.a+],[+some.b+].{"some": ["one", "two"] }=>[+some.0+],[+some.1+].
- Вложенные объекты и массивы также поддерживаются:
- Допустимые значения:
object - Значение по умолчанию: —
- Описание: Дополнительные данные, которые будут переданы в шаблон
Все примеры написаны с использованием HJSON, но вместо него можно также использвоать обычный JSON.
[[ddStringTools?
&inputString=`Какая-то СТРОКА в РаЗнОМ регистре`
&tools=`{
caseConverter: {
toLower: true
}
}`
]]
Вернёт:
какая-то строка в разном регистре
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Какой-то</b> <a href="#">там</a> <i>текст</i>.</p>`
&tools=`{
tagRemover: true
}`
]]Вернёт:
какой-то там текстЕсли вы хотите сохранить какие-то теги, передайте объект со свойством allowed вместо true.
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Какой-то</b> <a href="#">там</a> <i>текст</i>.</p>`
&tools=`{
tagRemover: {
allowed: "<p><a>"
}
}`
]]Вернёт:
<p>Какой-то <a href="#">там</a> текст.</p>[[ddStringTools?
&inputString=`<p>Какой-то <a href="#">там</a> текст.</p>`
&tools=`{
specialCharConverter: true
}`
]]Вернёт:
<p>Какой-то <a href="#">там</a> текст.</p>[[ddStringTools?
&inputString=`tags[]=Maps&tags[]=URLs`
&tools=`{
urlEncoder: true
}`
]]
Вернёт:
tags%5B%5D%3DMaps%26tags%5B%5D%3DURLs
<script>
$('body').append('[[ddStringTools?
&inputString=`
<p class="test">Какой-то <a href="#">там</a> текст.</p>
<p>Новая строка.</p>
`
&tools=`{
charEscaper: true
}`
]]');
<script>Вернёт:
<script>
$('body').append('\r\n <p class=\"test\">Какой-то <a href=\"#\">там</a> текст.</p>\r\n <p>Новая строка.</p>\r\n ');
<script>[[ddStringTools?
&inputString=`
# Пример Markdown
Какой-то текст в _Markdown_.
`
&tools=`{
markdownParser: true
}`
]]
Вернёт:
<h1>Пример Markdown</h1>
<p>Какой-то текст в <em>Markdown</em>.</p>[[ddStringTools?
&inputString=`Какой-то текст в _Markdown_.`
&tools=`{
"markdownParser": {
"parseInline": true
}
}`
]]
Вернёт:
Какой-то текст в <em>Markdown</em>.[[ddStringTools?
&inputString=`<p>Какой-то текст, содержащий "текст в кавычках".</p>`
&tools=`{
typographer: {
optAlign: true
}
}`
]]Вернёт:
<p>Какой-то текст, содержащий<span style="margin-right:0.44em;"> </span><span style="margin-left:-0.44em;">«</span>текст в кавычках».</p>[[ddStringTools?
&inputString=`Какой-то текст для типографирования.`
&tools=`{
typographer: true
}`
]][[ddStringTools?
&inputString=`Какой-то [+thing+] с [+placeholder1+] и [+placeholder2+].`
&tools=`{
placeholderRemover: true
}`
]]Вернёт:
Какой-то с и .[[ddStringTools?
&inputString=`assets/images/someImage.png`
&tools=`{
pregReplacer: {
pattern: (.*)(\.\D*)
replacement: $1_50x50$2
}
}`
]]
Вернёт:
assets/images/someImage_50x50.png
[[ddStringTools?
&inputString=`42.75`
&tools=`{
numberer: {
isFloatAllowed: false
}
}`
]]
Возвращает: 42
[[ddStringTools?
&inputString=`42.7589`
&tools=`{
numberer: {
decimalsNumber: 2
}
}`
]]
Возвращает: '42.76'
[[ddStringTools?
&inputString=`1999`
&tools=`{
numberer: {
decimalsNumber: 2
isDecimalsFixed: true
}
}`
]]
Возвращает: '1999.00'
[[ddStringTools?
&inputString=`1234567`
&tools=`{
numberer: {
thousandsSeparator: ' '
}
}`
]]
Возвращает: '1 234 567'
Форматирование цены с запятой в качестве разделителя разрядов и фиксированным количеством знаков после запятой
[[ddStringTools?
&inputString=`1234567.891`
&tools=`{
numberer: {
decimalsNumber: 2
isDecimalsFixed: true
thousandsSeparator: ','
}
}`
]]
Возвращает: '1,234,567.89'
[[ddStringTools?
&inputString=`$1 234 000.56 lorem ipsum`
&tools=`{
numberer: true
}`
]]
Возвращает: '1234000.56'
[[ddStringTools?
&inputString=`Какой-то исходный текст.`
&tools=`{
"tplParser": {
tpl:
'''
@CODE:[+before+]<p>[+snippetResult+]</p>[+after+]
'''
placeholders: {
before:
'''
<p>Какое-то вступление.</p>
'''
after:
'''
<p>Какая-то концовка.</p>
'''
}
}
}`
]]Вернёт:
<p>Какое-то вступление.</p><p>Какой-то исходный текст.</p><p>Какая-то концовка.</p>
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Какой-то</b> <a href="#">там</a> <i>текст</i>. [+somePlaceholder+]</p>.`
&tools=`{
placeholderRemover: true
typographer: true
tagRemover: {
allowed: "<p><a>"
}
caseConverter: {
toLower: true
}
charEscaper: true
}`
]]Инструменты будут вызваны в соответствии с указанным порядком:
- Сначала плейсхолдеры вида
[+somePlaceholder+]будут удалены, затем - Текст будет типографирован,
- Все HTML-теги за исключением
<p>и<a>будут удалены, - Текст будет преобразован к нижнему регистру,
- И экранирован для JS.
Исходная строка также может быть задана, как нативный PHP объект или массив (например, для вызовов через $modx->runSnippet).
В этом случае она сначала будет преобразована в JSON.
$modx->runSnippet(
'ddStringTools',
[
// Это массив, не строка
'inputString' => [
'someObjectField' => '[+somePlaceholder+], который должен быть удалён.',
// И это тоже массив
'otherObjectField' => [
'deepField' => '[+плейсхолдеры+] будут удалены на любой глубине.',
],
],
'tools' => [
'placeholderRemover' => true,
],
]
);Вернёт:
{
"someObjectField": ", который должен быть удалён.",
"otherObjectField": {
"deepField": " будут удалены на любой глубине."
}
}// Подключение (MODX)EvolutionCMS.libraries.ddTools
require_once(
$modx->getConfig('base_path')
. 'assets/libs/ddTools/modx.ddtools.class.php'
);
// Запуск (MODX)EvolutionCMS.snippets.ddStringTools
\DDTools\Snippet::runSnippet([
'name' => 'ddStringTools',
'params' => [
'inputString' => '<div class="someTrash"></div><p><b>Какой-то</b> <a href="#">там</a> <i>текст</i>. [+somePlaceholder+]</p>.',
// Параметр `tools` в этом случае может быть задан, как нативный PHP массив или объект
'tools' => [
'placeholderRemover' => true,
'typographer' => true,
'tagRemover' => [
'allowed' => '<p><a>',
],
'caseConverter' => [
'toLower' => true,
],
'charEscaper' => true,
],
],
]);