Tools for modifying strings.
- PHP >= 5.6
- (MODX)EvolutionCMS >= 1.1
- (MODX)EvolutionCMS.libraries.ddTools >= 0.60
- (MODX)EvolutionCMS.snippets.ddtypograph >= 2.6 (if the
tools->typographer
parameter is used) - PHP.libraries.Parsedown >= 1.8.0-beta-7 (contains in archive)
Just run the following PHP code in your sources or Console:
// Include (MODX)EvolutionCMS.libraries.ddInstaller
require_once(
$modx->getConfig('base_path')
. 'assets/libs/ddInstaller/require.php'
);
// Install (MODX)EvolutionCMS.snippets.ddStringTools
\DDInstaller::install([
'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddStringTools',
]);
- If
ddStringTools
is not exist on your site,ddInstaller
will just install it. - If
ddStringTools
is already exist on your site,ddInstaller
will check it version and update it if needed.
- Snippet name:
ddStringTools
. - Description:
<b>2.2</b> Tools for modifying strings.
. - Category:
Core
. - Parse DocBlock:
no
. - Snippet code (php): Insert content of the
ddStringTools_snippet.php
file from the archive.
- Create a new folder
assets/snippets/ddStringTools/
. - Extract the archive to the folder (except
ddStringTools_snippet.php
).
-
inputString
- Description: The input string.
- Valid values:
string
- The input string can also be set as a PHP object or array (e. g. for calls through
$modx->runSnippet
). In this case, it will be converted to JSON first.object
array
- Default value:
''
-
tools
- Description: List of string tools to be applied to
inputString
. Tools are called in accordance with the specified order. - Valid values:
stirngJsonObject
— as JSONstringHjsonObject
— as HJSONstringQueryFormatted
— as Query string- It can also be set as a PHP object or array (e. g. for calls through
$modx->runSnippet
).arrayAssociative
object
- Default value:
'{}'
- Description: List of string tools to be applied to
-
tools->{$toolName}
- Description: A tool, when the key is the tool name and the value is the tool parameters.
- Tool names are case insensitive (the following names are equal:
caseConverter
,Caseconverter
,caseconverter
, etc).
- Tool names are case insensitive (the following names are equal:
- Valid values:
object
— an object with tool parameters (see below)boolean
— for simple tools without parameters or if you need to use default parameters (if possible), just passtrue
- Default value: —.
- Description: A tool, when the key is the tool name and the value is the tool parameters.
-
tools->caseConverter
- Description: Perform case folding on a string. Unicode is supported.
- Valid values:
object
- Default value: —.
-
tools->caseConverter->toLower
- Description: Make a string lowercase.
- Valid values:
boolean
- Default value:
false
-
tools->caseConverter->toUpper
- Description: Make a string uppercase.
- Valid values:
boolean
- Default value:
false
-
tools->markdownParser
- Description: Parse Markdown using Parsedown library.
- Valid values:
boolean
— if you need to parse with default params, just passtrue
object
— or an object with parameters (see below)
- Default value:
false
-
tools->markdownParser->parseInline
- Description: Parse only inline elements.
- Valid values:
boolean
- Default value:
false
-
tools->typographer
- Description: Typography text using EvolutionCMS.snippets.ddTypograph.
- Parameters have to be passed to EvolutionCMS.snippets.ddTypograph.
- More info in its documentation.
- Valid values:
boolean
— if you need to typography with default params, just passtrue
object
— or an object with parameters (see below)
- Default value:
false
- Description: Typography text using EvolutionCMS.snippets.ddTypograph.
-
tools->typographer->optAlign
- Description: Optical alignment (hanging punctuation).
- Valid values:
boolean
- Default value:
false
-
tools->typographer->optAlign_useClasses
- Description: Use CSS classes instead of inline styles for optical alignment (
<span class="oa_comma_b">
instead of<span style="margin-right:-0.2em;">
).- If the parameter is enabled, don't forget to specify the following CSS rules on your site:
.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;}
- If the parameter is enabled, don't forget to specify the following CSS rules on your site:
- Valid values:
0
1
- Default value:
0
- Description: Use CSS classes instead of inline styles for optical alignment (
-
tools->typographer->text_paragraphs
- Description: Section signs and line breaks insertion.
- Valid values:
boolean
- Default value:
false
-
tools->typographer->text_autoLinks
- Description: Marking links (including email ones).
- Valid values:
boolean
- Default value:
false
-
tools->typographer->etc_unicodeConvert
- Description: Convert HTML entities into Unicode (
—
instead of—
, etc). - Valid values:
boolean
- Default value:
true
- Description: Convert HTML entities into Unicode (
-
tools->typographer->noTags
- Description: Whether HTML element insertion is allowed or not.
- There are cases when using tags causes the text to be invalid, for example, using the snippet inside of an HTML attribute.
- Valid values:
boolean
- Default value:
false
- Description: Whether HTML element insertion is allowed or not.
-
tools->typographer->excludeTags
- Description: HTML tags which content will be ignored by snippet.
- Valid values:
stringCommaSeparated
- Default value:
'notg,code'
-
tools->tagRemover
- Description: Strip HTML and PHP tags from a string.
- Valid values:
boolean
— if you need to remove all tags, just passtrue
object
— or an object with parameters (see below)
- Default value:
false
-
tools->tagRemover->allowed
- Description: Use the parameter to specify tags which should not be stripped (e. g.
<p><div>
). - Valid values:
string
- Default value:
''
- Description: Use the parameter to specify tags which should not be stripped (e. g.
tools->specialCharConverter
- Description: Convert special characters to HTML entities.
- Valid values:
boolean
- Default value:
false
-
tools->charEscaper
- Description: Escape special characters for JS.
- Valid values:
boolean
— if you need to escape with default params, just passtrue
object
— or an object with parameters (see below)
- Default value:
false
-
tools->charEscaper->backslashes
- Description: Escape backslashes (
'\\'
will be replaced to'\\\\'
). - Valid values:
boolean
- Default value:
true
- Description: Escape backslashes (
-
tools->charEscaper->lineBreaks
- Description: Escape line breaks (
"\r\n"
,"\r"
,"\n"
will be replaced to'\r\n'
). - Valid values:
boolean
- Default value:
true
- Description: Escape line breaks (
-
tools->charEscaper->tabs
- Description: Escape tabs (
' '
(tab) will be replaced to' '
(space)). - Valid values:
boolean
- Default value:
true
- Description: Escape tabs (
-
tools->charEscaper->modxPlaceholders
- Description: Escape (MODX)EvolutionCMS placeholders (
'[+'
and'+]'
will be replaced to'\[\+'
and'\+\]'
). - Valid values:
boolean
- Default value:
true
- Description: Escape (MODX)EvolutionCMS placeholders (
-
tools->charEscaper->quotes
- Description: Escape quotes (
"'"
and'"'
will be replaced to"\'"
and'\"'
). - Valid values:
boolean
- Default value:
true
- Description: Escape quotes (
tools->urlEncoder
- Description: URL-encode according to RFC 3986.
- Valid values:
boolean
- Default value:
false
tools->placeholderRemover
- Description: Remove placeholders like
[+placeholder+]
. - Valid values:
boolean
- Default value:
false
- Description: Remove placeholders like
-
tools->pregReplacer
- Description: Perform a regular expression search and replace.
- Valid values:
object
- Default value: —
-
tools->pregReplacer->pattern
- Description: The pattern to search for.
- You can omit
/
, the default will be/
+/u
.
- You can omit
- Valid values:
string
- Required
- Description: The pattern to search for.
-
tools->pregReplacer->replacement
- Description: The string to replace.
- Valid values:
string
- Default value:
''
-
tools->tplParser
- Description: Gets the chunk contents by its name and parse it.
- If
inputString
is empty, the chunk content will not be returned, just an empty string.
- If
- Valid values:
object
- Default value: —
- Description: Gets the chunk contents by its name and parse it.
-
tools->tplParser->tpl
- Description: Chunk name or code via
@CODE:
prefix.- Available placeholders:
[+snippetResult+]
— theinputString
modified by previous tools
- Available placeholders:
- Valid values:
stringChunkName
string
— use inline templates starting with@CODE:
- Required
- Description: Chunk name or code via
-
tools->tplParser->placeholders
- Description: Additional data has to be passed into the
tools->tplParser->tpl
.- Nested objects and arrays are supported too:
{"someOne": "1", "someTwo": "test" }
=>[+someOne+], [+someTwo+]
.{"some": {"a": "one", "b": "two"} }
=>[+some.a+]
,[+some.b+]
.{"some": ["one", "two"] }
=>[+some.0+]
,[+some.1+]
.
- Nested objects and arrays are supported too:
- Valid values:
object
- Default value: —
- Description: Additional data has to be passed into the
[[ddStringTools?
&inputString=`Some STRING with DiFFerEnt case`
&tools=`{
"caseConverter": {
"toLower": true
}
}`
]]
Returns:
some string with different case
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Some</b> <a href="#">sample</a> <i>text</i>.</p>`
&tools=`{
"tagRemover": true
}`
]]
Returns:
Some sample text.
If you want to preserve some tags, pass an object with property allowed
instead of true
.
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Some</b> <a href="#">sample</a> <i>text</i>.</p>`
&tools=`{
"tagRemover": {
"allowed": "<p><a>"
}
}`
]]
Returns:
<p>Some <a href="#">sample</a> text.</p>
[[ddStringTools?
&inputString=`<p>Some <a href="#">sample</a> text.</p>`
&tools=`{
"specialCharConverter": true
}`
]]
Returns:
<p>Some <a href="#">sample</a> text.</p>
[[ddStringTools?
&inputString=`tags[]=Maps&tags[]=URLs`
&tools=`{
"urlEncoder": true
}`
]]
Returns:
tags%5B%5D%3DMaps%26tags%5B%5D%3DURLs
<script>
$('body').append('[[ddStringTools?
&inputString=`
<p class="test">Some <a href="#">sample</a> text.</p>
<p>New line.</p>
`
&tools=`{
"charEscaper": true
}`
]]');
<script>
Returns:
<script>
$('body').append('\r\n <p class=\"test\">Some <a href=\"#\">sample</a> text.</p>\r\n <p>New line.</p>\r\n ');
<script>
[[ddStringTools?
&inputString=`
# Markdown example
Some text in _Markdown_.
`
&tools=`{
"markdownParser": true
}`
]]
Returns:
<h1>Markdown example</h1>
<p>Some text in <em>Markdown</em>.</p>
[[ddStringTools?
&inputString=`Some text in _Markdown_.`
&tools=`{
"markdownParser": {
"parseInline": true
}
}`
]]
Returns:
Some text in <em>Markdown</em>.
[[ddStringTools?
&inputString=`<p>Some text containing "quoted" text.</p>`
&tools=`{
"typographer": {
"optAlign": true
}
}`
]]
Returns:
<p>Some text containing<span style="margin-right:0.44em;"> </span><span style="margin-left:-0.44em;">“</span>quoted” text.</p>
[[ddStringTools?
&inputString=`Some text for typography.`
&tools=`{
"typographer": true
}`
]]
[[ddStringTools?
&inputString=`Some [+thing+] with [+placeholder1+] and [+placeholder2+].`
&tools=`{
"placeholderRemover": true
}`
]]
Returns:
Some with and .
[[ddStringTools?
&inputString=`assets/images/someImage.png`
&tools=`{
"pregReplacer": {
"pattern": "(.*)(\.\D*)",
"replacement": "$1_50x50$2"
}
}`
]]
Returns:
assets/images/someImage_50x50.png
[[ddStringTools?
&inputString=`Some input string text.`
&tools=`{
"tplParser": {
"tpl": "@CODE:[+before+]<p>[+snippetResult+]</p>[+after+]",
"placeholders": {
"before": "<p>Some start text.</p>",
"after": "<p>Some end text.</p>"
}
}
}`
]]
Returns:
<p>Some start text.</p><p>Some input string text.</p><p>Some end text.</p>
[[ddStringTools?
&inputString=`<div class="someTrash"></div><p><b>Some</b> <a href="#">sample</a> <i>text</i>. [+somePlaceholder+]</p>.`
&tools=`{
"placeholderRemover": true,
"typographer": true,
"tagRemover": {
"allowed": "<p><a>"
},
"caseConverter": {
"toLower": true
},
"charEscaper": true
}`
]]
Tools are called in accordance with the specified order:
- First placeholders like
[+somePlaceholder+]
will removed, then - Text will typographied,
- All HTML tags except
<p>
and<a>
will removed, - Text will converted to lowercase,
- And escaped for JS.
The input string can also be set as a PHP object or array (e. g. for calls through $modx->runSnippet
).
In this case, it will be converted to JSON first.
$modx->runSnippet(
'ddStringTools',
[
// This is an array, not string
'inputString' => [
'someObjectField' => '[+somePlaceholder+] need to be removed.',
// And this is an array too
'otherObjectField' => [
'deepField' => '[+placeholders+] will be removed in any depth.',
],
],
'tools' => [
'placeholderRemover' => true,
],
]
);
Returns:
{
"someObjectField": " need to be removed.",
"otherObjectField": {
"deepField": " will be removed in any depth."
}
}
// Include (MODX)EvolutionCMS.libraries.ddTools
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddTools/modx.ddtools.class.php'
);
// Run (MODX)EvolutionCMS.snippets.ddStringTools
\DDTools\Snippet::runSnippet([
'name' => 'ddStringTools',
'params' => [
'inputString' => '<div class="someTrash"></div><p><b>Some</b> <a href="#">sample</a> <i>text</i>. [+somePlaceholder+]</p>.',
// `tools` in this case can be set as a native PHP array or object
'tools' => [
'placeholderRemover' => true,
'typographer' => true,
'tagRemover' => [
'allowed' => '<p><a>',
],
'caseConverter' => [
'toLower' => true,
],
'charEscaper' => true,
],
],
]);