diff --git a/CHANGELOG.md b/CHANGELOG.md
index 381669d..dc4a354 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,22 +1,35 @@
# (MODX)EvolutionCMS.snippets.ddGetMultipleField changelog
+## Version 3.10 (2024-09-06)
+
+* \+ Parameters → `rowTpl` → Available placeholders:
+ * \+ `[+allColumnValuesObjectJson+]`: The new placeholder. Contains values of all columns as a JSON object, where keys are original column keys, values are values.
+ * \+ `[+`_columnKey_`.`_nestedProperty_`+]`, `[+col`_columnNumber_`.`_nestedProperty_`+]`: The new placeholders. Contain values of nested properties, when a column value is an object.
+* \* `\ddTools::getTpl` is used instead of `$modx->getTpl` (means a bit less bugs).
+* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.62 is required.
+
+
## Version 3.9 (2023-01-11)
+
* \+ Parameters → `inputString`: Can also be set as a [HJSON](https://hjson.github.io/) or [Query formatted](https://en.wikipedia.org/wiki/Query_string) string.
* \* Parameters → `outerTpl`: Placeholders `[+rowY.colX+]` works fine even source object has custom string keys.
## Version 3.8.2 (2022-08-10)
+
* \* Parameters:
* \* `columns`: Wrong working with the `0` value has been fixed.
* \* `colTpl`: Wrong working with the empty value has been fixed.
## Version 3.8.1 (2022-06-09)
+
* \* Parameters → `colTpl`: Support of various column numbers in different rows has been improved.
## Version 3.8 (2022-06-04)
+
* \* Parameters:
* \+ `inputString`: Supports JSON with any nesting level.
* \+ `colTpl[$i]` → Placeholders:
@@ -30,11 +43,13 @@
## Version 3.7 (2021-10-05)
+
* \+ Parameters → `rowTpl`, `colTpl[i]`: The new placeholder `[+rowKey+]` has been added (see README).
* \+ Parameters → `colTpl[i]`: The new placeholders `[+total+]` and `[+resultTotal+]` have beed added (see README).
## Version 3.6 (2021-06-28)
+
* \* Attention! PHP >= 5.6 is required.
* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.50 is required.
* \* Attention! (MODX)EvolutionCMS.snippets.ddTypograph >= 2.5 is required.
@@ -54,10 +69,12 @@
## Version 3.5.1 (2020-06-22)
+
* \* Improved compatibility with new versions of (MODX)EvolutionCMS.libraries.ddTools.
## Version 3.5 (2020-05-25)
+
* \+ Parameters → `inputString`: Can also be a JSON object, not just an array.
* \* Parameters → `filter`:
* \* “Is equal” operator changed to `==` from `::` (with backward compatibility).
@@ -73,6 +90,7 @@
## Version 3.4 (2018-11-14)
+
* \+ Parameters → `placeholders`:
* \+ Added arrays support.
* \+ Added JSON format support.
@@ -83,6 +101,7 @@
## Version 3.3 (2016-06-06)
+
* \+ Parameters → `outerTpl`, `rowTpl`, `colTpl`: Added the ability to use inline templates in snippet call, using `'@CODE:'` prefix.
* \+ Parameters → `rowTpl`, `colTpl`: Additional data from the `placeholders` parameter are now also will be passed into row and column templates
* \* Parameters → `placeholders`: Additional data has to be passed through the parameter must be a Query string (the old format is still supported but deprecated).
@@ -94,6 +113,7 @@
## Version 3.2 (2015-06-23)
+
* \+ Parameters → `colTpl:` The `[+rowNumber+]` placeholder is now also available within column templates.
* \+ Parameters → `rowTpl`, `colTpl`: The new placeholder `[+rowNumber.zeroBased+]` (index of the current row, starts at 0) was added to row and column templates. It’s very useful sometimes.
* \* Refactoring:
@@ -104,10 +124,12 @@
## Version 3.1 (2014-07-03)
+
* \+ Parameters → `outputFormat`: The new output format type `htmlarray` has been added. It is a one-dimensional array, which elements are completely processed rows. As with `array`, it makes sense to use the parameter only with `resultToPlaceholder`.
## Version 3.0b (2014-03-02)
+
* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.11 is required.
* \* The `\ddTools:sort2dArray` method is used for sorting instead of the local function.
* \* The `\ddTools:getTemplateVarOutput` method is used for getting field value instead of (MODX)EvolutionCMS.snippets.ddGetDocumentField.
@@ -143,6 +165,7 @@
## Version 2.18 (2013-11-11)
+
* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.10 is required.
* \+ Parameters → `tplWrap`, `tplY`: The new placeholder `[+resultTotal+]` being used in the chunks holds the total number of **RETURNED** elements.
* \* Parameters → `tplWrap`:
@@ -153,18 +176,22 @@
## Version 2.17 (2013-09-18)
+
* \+ Parameters → `vals`: Filtration of all columns is now available.
## Version 2.16.2 (2013-07-11)
+
* \* Values contained in the integer type columns are being compared like integers while sorting.
## Version 2.16.1 (2013-06-13)
+
* \* Bugfix: Undeclared variables in PHP >= 5.3.
## Version 2.16 (2013-03-28)
+
* \* Attention! (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.4 is required.
* \+ Parameters → `tplWrap`: The `[+total+]` placeholder is now available.
* \+ Parameters → `splY`, `splX`: Can process regular expressions.
@@ -174,16 +201,19 @@
## Version 2.15 (2013-02-11)
+
* \+ Parameters → `totalPlaceholder`. The new parameter. The outputting of the total number of rows into an external placeholder has been added.
## Version 2.14 (2013-01-10)
+
* \+ Parameters → `tplY`: The placeholder `[+total+]` that is the number of all rows has been added into the chunk.
## Version 2.13 (2012-09-03)
+
* \+ Parameters → `sortDir`: The `'REVERSE'` value of the parameter has been added. Values would be returned in reverse order if the parameter equaled `'REVERSE'`.
-
+
\ No newline at end of file
diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md
index cd2d076..5504d94 100644
--- a/CHANGELOG_ru.md
+++ b/CHANGELOG_ru.md
@@ -1,22 +1,35 @@
# (MODX)EvolutionCMS.snippets.ddGetMultipleField changelog
+## Версия 3.10 (2024-09-06)
+
+* \+ Параметры → `rowTpl` → Доступные плейсхолдеры:
+ * \+ `[+allColumnValuesObjectJson+]`: Новый плейсхолдер. Содержит значения всех колонок в виде JSON-объекта, где ключи — исходные ключи колонок, значения — значения.
+ * \+ `[+`_columnKey_`.`_nestedProperty_`+]`, `[+col`_columnNumber_`.`_nestedProperty_`+]`: Новые плейсхолдеры. Содержат значения вложенных свойств, когда значение колонки является объектом.
+* \* `\ddTools::getTpl` используется вместо `$modx->getTpl` (стало чуть меньше багов).
+* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.62.
+
+
## Версия 3.9 (2023-01-11)
+
* \+ Параметры → `inputString`: Также может быть задан, как [HJSON](https://hjson.github.io/) или [Query formatted string](https://en.wikipedia.org/wiki/Query_string).
* \* Параметры → `outerTpl`: Плейсхолдеры `[+rowY.colX+]` работают нормально даже если исходный объект имеет произвольные строковые ключи.
## Версия 3.8.2 (2022-08-10)
+
* \* Параметры:
* \* `columns`: Исправлена некорректная работа со значением `0`.
* \* `colTpl`: Исправлена некорректная работа с пустым значением.
## Версия 3.8.1 (2022-06-09)
+
* \* Параметры → `colTpl`: Улучшена поддержка различного количества колонок в разных строках.
## Версия 3.8 (2022-06-04)
+
* \* Параметры:
* \+ `inputString`: Поддерживает JSON с любым уровнем вложенности.
* \+ `colTpl[$i]` → Плейсхолдеры:
@@ -30,11 +43,13 @@
## Версия 3.7 (2021-10-05)
+
* \+ Параметры → `rowTpl`, `colTpl[i]`: Добавлен новый плейсхолдер `[+rowKey+]` (см. README).
* \+ Параметры → `colTpl[i]`: Добавлены новые плейсхолдеры `[+total+]` и `[+resultTotal+]` (см. README).
## Версия 3.6 (2021-06-28)
+
* \* Внимание! Требуется PHP >= 5.6.
* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.50.
* \* Внимание! Требуется (MODX)EvolutionCMS.snippets.ddTypograph >= 2.5.
@@ -54,10 +69,12 @@
## Версия 3.5.1 (2020-06-22)
+
* \* Улучшена совместимость с новыми версиями (MODX)EvolutionCMS.libraries.ddTools.
## Версия 3.5 (2020-05-25)
+
* \+ Параметры → `inputString`: Также может быть и JSON объектом, не только массивом.
* \* Параметры → `filter`:
* \* Оператор «равно» изменён на `==` с `::` (с обратной совместимостью).
@@ -73,6 +90,7 @@
## Версия 3.4 (2018-11-14)
+
* \+ Параметры → `placeholders`:
* \+ Добавлена поддержка массивов
* \+ Добавлена поддержка формата JSON.
@@ -83,6 +101,7 @@
## Версия 3.3 (2016-06-06)
+
* \+ Параметры → `outerTpl`, `rowTpl`, `colTpl`: Добавлена возможность использовать встроенные шаблоны, используя префикс `'@CODE:'`.
* \+ Параметры → `rowTpl`, `colTpl`: Дополнительные данные из параметра `placeholders` теперь также будут переданы в шаблоны строк и колонок.
* \* Параметры → `placeholders`: Дополнительные данные, передаваемые в параметр `placeholders` должны быть в виде Query string (старый формат поддерживается, но не рекомендуется к использвоанию).
@@ -94,6 +113,7 @@
## Версия 3.2 (2015-06-23)
+
* \+ Параметры → `colTpl:` Плэйсхолдер `[+rowNumber+]` также доступен в шаблонах колонок.
* \+ Параметры → `rowTpl`, `colTpl`: Доступен довый плэйсхолдер `[+rowNumber.zeroBased+]` — номер строки, начинающийся с 0, это бывает удобно.
* \* Рефакторинг:
@@ -104,10 +124,12 @@
## Версия 3.1 (2014-07-03)
+
* \+ Параметры → `outputFormat`: Добавлен формат вывода `htmlarray` — одномерный массив, элементы которого — готовые полностью обработанные строки. Как и `array`, имеет смысл использовать вместе с параметром `resultToPlaceholder`.
## Версия 3.0b (2014-03-02)
+
* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.11.
* \* Вместо локальной функции для сортировки используется метод `\ddTools:sort2dArray`.
* \* Значение поля получается при помощи метода `\ddTools:getTemplateVarOutput`, (MODX)EvolutionCMS.snippets.ddGetDocumentField больше не используется.
@@ -143,6 +165,7 @@
## Версия 2.18 (2013-11-11)
+
* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.10.
* \+ Параметры → `tplWrap`, `tplY`: Добавлен плэйсхолдер `[+resultTotal+]`, содержащий количество **возвращаемых** элементов.
* \* Параметры → `tplWrap`:
@@ -153,18 +176,22 @@
## Версия 2.17 (2013-09-18)
+
* \+ Параметры → `vals`: Добавлена фильтрация по всем колонкам.
## Версия 2.16.2 (2013-07-11)
+
* \* При сортировке добавлена обработка числовых значений, теперь они сравниваются как числа, а не как строки.
## Версия 2.16.1 (2013-06-13)
+
* \* Исправлена ошибка с обращением к не объявленным переменным (PHP >= 5.3).
## Версия 2.16 (2013-03-28)
+
* \* Внимание! Требуется (MODX)EvolutionCMS.snippets.ddGetDocumentField >= 2.4.
* \+ Параметры → `tplWrap`: Плэйсхолдер `[+total+]` теперь выводится и здесь.
* \+ Параметры → `splY`, `splX`: Теперь могут принимать регулярные выражения.
@@ -174,16 +201,19 @@
## Версия 2.15 (2013-02-11)
+
* \+ Параметры → `totalPlaceholder`: Новый параметр. Добавлена возможность выводить общее количество строк во внешний плэйсхолдер.
## Версия 2.14 (2013-01-10)
+
* \+ Параметры → `tplY`: Добавлен плэйсхолдер `[+total+]`, содержащий общее количество строк.
## Версия 2.13 (2012-09-03)
+
* \+ Параметры → `sortDir`: Добавлено возможное значение `'REVERSE'`, при котором значения выводятся просто в обратном порядке.
-
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 7471ef7..8797a98 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# (MODX)EvolutionCMS.snippets.ddGetMultipleField
A snippet for processing, manipulations and custom output structured data (JSON or separated by delimiters strings).
-The fields formed by the [mm_ddMultipleFields](https://code.divandesign.biz/modx/mm_ddmultiplefields) widget values output gets more convinient with the snippet.
+The fields formed by the [mm_ddMultipleFields](https://code.divandesign.ru/modx/mm_ddmultiplefields) widget values output gets more convinient with the snippet.
Features:
* Field value getting of a required document (TV) by its ID. The `inputString_docField` and `inputString_docId` parameters.
@@ -21,43 +21,25 @@ Features:
* PHP >= 5.6
* [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1
-* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.50
-* [(MODX)EvolutionCMS.snippets.ddTypograph](https://code.divandesign.biz/modx/ddtypograph) >= 2.5 (if typography is required)
+* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.ru/modx/ddtools) >= 0.62
+* [(MODX)EvolutionCMS.snippets.ddTypograph](https://code.divandesign.ru/modx/ddtypograph) >= 2.5 (if typography is required)
## Installation
-### Manually
-
-
-#### 1. Elements → Snippets: Create a new snippet with the following data
-
-1. Snippet name: `ddGetMultipleField`.
-2. Description: `3.9 A snippet for processing, manipulations and custom output structured data (JSON or separated by delimiters strings).`.
-3. Category: `Core`.
-4. Parse DocBlock: `no`.
-5. Snippet code (php): Insert content of the `ddGetMultipleField_snippet.php` file from the archive.
-
-
-#### 2. Elements → Manage Files
-
-1. Create a new folder `assets/snippets/ddGetMultipleField/`.
-2. Extract the archive to the folder (except `ddGetMultipleField_snippet.php`).
-
-
### Using [(MODX)EvolutionCMS.libraries.ddInstaller](https://github.com/DivanDesign/EvolutionCMS.libraries.ddInstaller)
Just run the following PHP code in your sources or [Console](https://github.com/vanchelo/MODX-Evolution-Ajax-Console):
```php
-//Include (MODX)EvolutionCMS.libraries.ddInstaller
+// Include (MODX)EvolutionCMS.libraries.ddInstaller
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddInstaller/require.php'
);
-//Install (MODX)EvolutionCMS.snippets.ddGetMultipleField
+// Install (MODX)EvolutionCMS.snippets.ddGetMultipleField
\DDInstaller::install([
'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetMultipleField',
'type' => 'snippet'
@@ -68,13 +50,31 @@ require_once(
* If `ddGetMultipleField` is already exist on your site, `ddInstaller` will check it version and update it if needed.
+### Manually
+
+
+#### 1. Elements → Snippets: Create a new snippet with the following data
+
+1. Snippet name: `ddGetMultipleField`.
+2. Description: `3.10 A snippet for processing, manipulations and custom output structured data (JSON or separated by delimiters strings).`.
+3. Category: `Core`.
+4. Parse DocBlock: `no`.
+5. Snippet code (php): Insert content of the `ddGetMultipleField_snippet.php` file from the archive.
+
+
+#### 2. Elements → Manage Files
+
+1. Create a new folder `assets/snippets/ddGetMultipleField/`.
+2. Extract the archive to the folder (except `ddGetMultipleField_snippet.php`).
+
+
## Parameters description
From the pair of `inputString` / `inputString_docField` parameters one is required.
* `inputString`
- * Desctription: The input string containing values.
- Also supports JSON with any nesting level.
+ * Description: The input string containing values.
+ * Also supports JSON with any nesting level.
* Valid values:
* `stringJsonArray` — [JSON](https://en.wikipedia.org/wiki/JSON) array
* `stringJsonObject` — [JSON](https://en.wikipedia.org/wiki/JSON) object
@@ -85,44 +85,44 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* **Required**
* `inputString_docField`
- * Desctription: The name of the document field/TV which value is required to get.
- If the parameter is passed then the input string will be taken from the field / TV and `inputString` will be ignored.
+ * Description: The name of the document field/TV which value is required to get.
+ * If the parameter is passed then the input string will be taken from the field / TV and `inputString` will be ignored.
* Valid values: `string`
* Default value: —
* `inputString_docId`
- * Desctription: ID of the document which field/TV value is required to get.
+ * Description: ID of the document which field/TV value is required to get.
* Valid values: `integer`
* Default value: `$modx->documentIdentifier` (the current document ID)
* `inputString_rowDelimiter`
- * Desctription: The input string row delimiter (when `inputString` is not JSON).
+ * Description: The input string row delimiter (when `inputString` is not JSON).
* Valid values:
* `string`
* `regexp`
* Default value: `'||'`
* `inputString_colDelimiter`
- * Desctription: The input string column delimiter (when `inputString` is not JSON).
+ * Description: The input string column delimiter (when `inputString` is not JSON).
* Valid values:
* `string`
* `regexp`
* Default value: `'::'`
* `startRow`
- * Desctription: The index of the initial row (indexes start at `0`).
+ * Description: The index of the initial row (indexes start at `0`).
* Valid values: `integer`
* Default value: `0`
* `totalRows`
- * Desctription: The maximum number of rows to return.
+ * Description: The maximum number of rows to return.
* Valid values:
* `integer`
* `'all'` — all rows will be returned
* Default value: `'all'`
* `columns`
- * Desctription: The indexes of columns to return (indexes start at `0`).
+ * Description: The indexes of columns to return (indexes start at `0`).
* Valid values:
* `stringCommaSeparated`
* `array`
@@ -130,7 +130,7 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: `'all'`
* `filter`
- * Desctription: Filter clause for columns.
+ * Description: Filter clause for columns.
* Thus,
```
0 == 'a' ||
@@ -162,29 +162,29 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: —
* `removeEmptyRows`
- * Desctription: Is it required to remove empty rows?
+ * Description: Is it required to remove empty rows?
* Valid values:
* `0`
* `1`
* Default value: `1`
* `removeEmptyCols`
- * Desctription: Is it required to remove empty columns?
+ * Description: Is it required to remove empty columns?
* Valid values:
* `0`
* `1`
* Default value: `1`
* `sortBy`
- * Desctription: The index of the column to sort by (indexes start at `0`).
- The parameter also takes comma-separated values for multiple sort, e.g. `'0,1'`.
+ * Description: The index of the column to sort by (indexes start at `0`).
+ * The parameter also takes comma-separated values for multiple sort, e.g. `'0,1'`.
* Valid values:
* `stringCommaSeparated`
* `array`
* Default value: `'0'`
* `sortDir`
- * Desctription: Rows sorting direction (case insensitive).
+ * Description: Rows sorting direction (case insensitive).
* Valid values:
* `'ASC'` — the rows will be returned in ascending order
* `'DESC'` — the rows will be returned in descending order
@@ -194,15 +194,15 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: `''`
* `typography`
- * Desctription: The comma separated indexes of the columns which values have to be corrected (indexes start at `0`).
- If unset, there will be no correction.
+ * Description: The comma separated indexes of the columns which values have to be corrected (indexes start at `0`).
+ * If unset, there will be no correction.
* Valid values:
* `stringCommaSeparated`
* `array`
* Default value: —
* `outputFormat`
- * Desctription: Result output format (case insensitive).
+ * Description: Result output format (case insensitive).
* Valid values:
* `'html'`
* `'json'`
@@ -211,52 +211,54 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: `'html'`
* `rowGlue`
- * Desctription: The string that combines rows while rendering.
- It can be used along with `rowTpl`.
+ * Description: The string that combines rows while rendering.
+ * It can be used along with `rowTpl`.
* Valid values: `string`
* Default value: `''`
* `colGlue`
- * Desctription: The string that combines columns while rendering.
- It can be used along with `colTpl` and `rowTpl`.
+ * Description: The string that combines columns while rendering.
+ * It can be used along with `colTpl` and `rowTpl`.
* Valid values: `string`
* Default value: `''`
* `rowTpl`
- * Desctription: The template for row rendering (`outputFormat` has to be == `'html'`).
- Available placeholders:
- * `[+rowNumber+]` — index of current row, starts at `1`
- * `[+rowNumber.zeroBased+]` — index of current row, starts at `0`
- * `[+rowKey+]` — key of current row, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+rowNumber.zeroBased+]`
- * `[+total+]` — total number of rows
- * `[+resultTotal+]` — total number of returned rows
- * `[+col0+]`, `[+col1+]`, etc — column values
- * `[+`_columnKey_`+]` — column values, when _columnKey_ is original column key (see examples below)
- * `[+allColumnValues+]` — values of all columns combined by `colGlue`
+ * Description: The template for row rendering (`outputFormat` has to be == `'html'`).
+ * Available placeholders:
+ * `[+rowNumber+]` — index of current row, starts at `1`
+ * `[+rowNumber.zeroBased+]` — index of current row, starts at `0`
+ * `[+rowKey+]` — key of current row, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+rowNumber.zeroBased+]`
+ * `[+total+]` — total number of rows
+ * `[+resultTotal+]` — total number of returned rows
+ * `[+col`_columnNumber_`+]` (e. g. `[+col0+]`, `[+col1+]`, etc) — column values, when _columnNumber_ is zero-based column number
+ * `[+`_columnKey_`+]` — column values, when _columnKey_ is original column key (see examples below)
+ * `[+`_columnKey_`.`_nestedProperty_`+]`, `[+col`_columnNumber_`.`_nestedProperty_`+]` — values of a nested properties, if a column value is an object
+ * `[+allColumnValues+]` — values of all columns combined by `colGlue`
+ * `[+allColumnValuesObjectJson+]` — values of all columns as a JSON object, where keys are original column keys, values are values
* Valid values:
* `stringChunkName`
* `string` — use inline templates starting with `@CODE:`
* Default value: —
* `colTpl`
- * Desctription: The comma-separated list of templates for column rendering (`outputFormat` has to be == `'html'`).
- If the number of templates is lesser than the number of columns then the last passed template will be used to render the rest of the columns.
+ * Description: The comma-separated list of templates for column rendering (`outputFormat` has to be == `'html'`).
+ * If the number of templates is lesser than the number of columns then the last passed template will be used to render the rest of the columns.
* Valid values:
* `stringCommaSeparated`
* `array`
* Default value: —
* `colTpl[$i]`
- * Desctription: The template for column rendering.
- Available placeholders:
- * `[+val+]` — value of the column
- * `[+columnIndex+]` — index of the column, starts at `0`
- * `[+columnKey+]` — key of the column, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+columnIndex+]`
- * `[+rowNumber+]` — index of current row, starts at `1`
- * `[+rowNumber.zeroBased+]` — index of current row, starts at `0`
- * `[+rowKey+]` — key of current row, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+rowNumber.zeroBased+]`
- * `[+total+]` — total number of rows
- * `[+resultTotal+]` — total number of returned rows
+ * Description: The template for column rendering.
+ * Available placeholders:
+ * `[+val+]` — value of the column
+ * `[+columnIndex+]` — index of the column, starts at `0`
+ * `[+columnKey+]` — key of the column, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+columnIndex+]`
+ * `[+rowNumber+]` — index of current row, starts at `1`
+ * `[+rowNumber.zeroBased+]` — index of current row, starts at `0`
+ * `[+rowKey+]` — key of current row, it is usefull for objects or associative arrays in `inputString`, for indexed arrays the placeholder is equal to `[+rowNumber.zeroBased+]`
+ * `[+total+]` — total number of rows
+ * `[+resultTotal+]` — total number of returned rows
* Valid values:
* `stringChunkName`
* `string` — use inline templates starting with `@CODE:`
@@ -264,36 +266,35 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: `'null'`
* `outerTpl`
- * Desctription: Wrapper template (`outputFormat` has to be != `'array'`).
- Available placeholders:
- * `[+result+]` — snippet result
- * `[+total+]` — total number of rows
- * `[+resultTotal+]` — total number of returned rows
- * `[+rowY.colX+]` — value (`Y` — row number, `X` — column number)
- * `[+rowKey.colX+]` — value (`Key` — row key, `X` — column number)
+ * Description: Wrapper template (`outputFormat` has to be != `'array'`).
+ * Available placeholders:
+ * `[+result+]` — snippet result
+ * `[+total+]` — total number of rows
+ * `[+resultTotal+]` — total number of returned rows
+ * `[+rowY.colX+]` — value (`Y` — row number, `X` — column number)
+ * `[+rowKey.colX+]` — value (`Key` — row key, `X` — column number)
* Valid values:
* `stringChunkName`
* `string` — use inline templates starting with `@CODE:`
* Default value: —
* `placeholders`
- * Desctription:
- Additional data has to be passed into the `outerTpl`, `rowTpl` and `colTpl` templates.
- 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+]`.
+ * Description: Additional data has to be passed into the `outerTpl`, `rowTpl` and `colTpl` templates.
+ * 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+]`.
* Valid values:
* `stringJsonObject` — as [JSON](https://en.wikipedia.org/wiki/JSON)
* `stringHjsonObject` — as [HJSON](https://hjson.github.io/)
- * `stringQueryFormated` — as [Query string](https://en.wikipedia.org/wiki/Query_string)
+ * `stringQueryFormatted` — as [Query string](https://en.wikipedia.org/wiki/Query_string)
* It can also be set as a native PHP object or array (e. g. for calls through `$modx->runSnippet`):
* `arrayAssociative`
* `object`
* Default value: —
* `urlencode`
- * Desctription: Is it required to URL encode the result?
+ * Description: Is it required to URL encode the result?
* `outputFormat` has to be != `'array'`.
* URL encoding is used according to RFC 3986.
* Valid values:
@@ -302,14 +303,14 @@ From the pair of `inputString` / `inputString_docField` parameters one is requir
* Default value: `0`
* `totalRowsToPlaceholder`
- * Desctription: The name of the global (MODX)Evolution placeholder that holds the total number of rows.
- The placeholder won't be set if `totalRowsToPlaceholder` is empty.
+ * Description: The name of the global (MODX)Evolution placeholder that holds the total number of rows.
+ * The placeholder won't be set if `totalRowsToPlaceholder` is empty.
* Valid values: `string`
* Default value: —
* `resultToPlaceholder`
- * Desctription: The name of the global (MODX)Evolution placeholder that holds the snippet result.
- The result will be returned in a regular manner if the parameter is empty.
+ * Description: The name of the global (MODX)Evolution placeholder that holds the snippet result.
+ * The result will be returned in a regular manner if the parameter is empty.
* Valid values: `string`
* Default value: —
@@ -478,7 +479,7 @@ Returns:
### Return document tags separated by commas using a regular expression in `inputString_rowDelimiter`
-[(MODX)EvolutionCMS.plugins.ManagerManager.mm_widget_tags](https://code.divandesign.biz/modx/mm_widget_tags) is applied to `tags` TV where document tags are stored in `tags`.
+[(MODX)EvolutionCMS.plugins.ManagerManager.mm_widget_tags](https://code.divandesign.ru/modx/mm_widget_tags) is applied to `tags` TV where document tags are stored in `tags`.
User fills in the tags separated by commas, while the field may be filled both with spaces on the sides and without them.
`tags` TV value:
@@ -699,13 +700,13 @@ Returns:
### Run the snippet through `\DDTools\Snippet::runSnippet` without DB and eval
```php
-//Include (MODX)EvolutionCMS.libraries.ddTools
+// Include (MODX)EvolutionCMS.libraries.ddTools
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddTools/modx.ddtools.class.php'
);
-//Run (MODX)EvolutionCMS.snippets.ddGetMultipleField
+// Run (MODX)EvolutionCMS.snippets.ddGetMultipleField
\DDTools\Snippet::runSnippet([
'name' => 'ddGetMultipleField',
'params' => [
@@ -719,8 +720,8 @@ require_once(
"Example image 2"
]
]',
- 'rowTpl' => '@CODE:'
- ]
+ 'rowTpl' => '@CODE:',
+ ],
]);
```
@@ -730,9 +731,10 @@ _It is hard to write here all possible examples so if here is something that you
## Links
-* [Home page](https://code.divandesign.biz/modx/ddgetmultiplefield)
+* [Home page](https://code.divandesign.ru/modx/ddgetmultiplefield)
* [Telegram chat](https://t.me/dd_code)
* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddgetmultiplefield)
+* [GitHub](https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetMultipleField)
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/README_ru.md b/README_ru.md
index 0f8ac73..f79e89d 100644
--- a/README_ru.md
+++ b/README_ru.md
@@ -1,7 +1,7 @@
# (MODX)EvolutionCMS.snippets.ddGetMultipleField
Сниппет для обработки, изменения и произвольного вывода структурированных данных (JSON или разделённых через определённые разделители).
-Удобно использовать для вывода значений полей документов, сформированных виджетом [mm_ddMultipleFields](https://code.divandesign.biz/modx/mm_ddmultiplefields).
+Удобно использовать для вывода значений полей документов, сформированных виджетом [mm_ddMultipleFields](https://code.divandesign.ru/modx/mm_ddmultiplefields).
Возможности:
* Получение необходимого поля документа / TV по его ID. Параметры `inputString_docField` и `inputString_docId`.
@@ -21,43 +21,25 @@
* PHP >= 5.6
* [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1
-* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.50
-* [(MODX)EvolutionCMS.snippets.ddTypograph](https://code.divandesign.biz/modx/ddtypograph) >= 2.5 (if typography is required)
+* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.ru/modx/ddtools) >= 0.62
+* [(MODX)EvolutionCMS.snippets.ddTypograph](https://code.divandesign.ru/modx/ddtypograph) >= 2.5 (if typography is required)
## Установка
-### Вручную
-
-
-#### 1. Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами
-
-1. Название сниппета: `ddGetMultipleField`.
-2. Описание: `3.9 Сниппет для обработки, изменения и произвольного вывода структурированных данных (JSON или разделённых через определённые разделители).`.
-3. Категория: `Core`.
-4. Анализировать DocBlock: `no`.
-5. Код сниппета (php): Вставьте содержимое файла `ddGetMultipleField_snippet.php` из архива.
-
-
-#### 2. Элементы → Управление файлами
-
-1. Создайте новую папку `assets/snippets/ddGetMultipleField/`.
-2. Извлеките содержимое архива в неё (кроме файла `ddGetMultipleField_snippet.php`).
-
-
### Используя [(MODX)EvolutionCMS.libraries.ddInstaller](https://github.com/DivanDesign/EvolutionCMS.libraries.ddInstaller)
Просто вызовите следующий код в своих исходинках или модуле [Console](https://github.com/vanchelo/MODX-Evolution-Ajax-Console):
```php
-//Подключение (MODX)EvolutionCMS.libraries.ddInstaller
+// Подключение (MODX)EvolutionCMS.libraries.ddInstaller
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddInstaller/require.php'
);
-//Установка (MODX)EvolutionCMS.snippets.ddGetMultipleField
+// Установка (MODX)EvolutionCMS.snippets.ddGetMultipleField
\DDInstaller::install([
'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetMultipleField',
'type' => 'snippet'
@@ -68,13 +50,31 @@ require_once(
* Если `ddGetMultipleField` уже есть на вашем сайте, `ddInstaller` проверит его версию и обновит, если нужно.
+### Вручную
+
+
+#### 1. Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами
+
+1. Название сниппета: `ddGetMultipleField`.
+2. Описание: `3.10 Сниппет для обработки, изменения и произвольного вывода структурированных данных (JSON или разделённых через определённые разделители).`.
+3. Категория: `Core`.
+4. Анализировать DocBlock: `no`.
+5. Код сниппета (php): Вставьте содержимое файла `ddGetMultipleField_snippet.php` из архива.
+
+
+#### 2. Элементы → Управление файлами
+
+1. Создайте новую папку `assets/snippets/ddGetMultipleField/`.
+2. Извлеките содержимое архива в неё (кроме файла `ddGetMultipleField_snippet.php`).
+
+
## Описание параметров
Из пары параметров `inputString` / `inputString_docField` необходимо передавать лишь один.
* `inputString`
- * Описание: Исходная строка, содержащая значение.
- Также поддерживает JSON с любым уровнем вложенности.
+ * Описание: Исходная строка, содержащая значение.
+ * Также поддерживает JSON с любым уровнем вложенности.
* Допустимые значения:
* `stringJsonArray` — [JSON](https://ru.wikipedia.org/wiki/JSON) массив
* `stringJsonObject` — [JSON](https://ru.wikipedia.org/wiki/JSON) объект
@@ -85,8 +85,8 @@ require_once(
* **Обязателен**
* `inputString_docField`
- * Описание: Имя поля документа / TV, содержащего значение.
- В этом случае параметр `inputString` игнорируется, значение получается из поля документа.
+ * Описание: Имя поля документа / TV, содержащего значение.
+ * В этом случае параметр `inputString` игнорируется, значение получается из поля документа.
* Допустимые значения: `string`
* Значение по умолчанию: —
@@ -176,8 +176,8 @@ require_once(
* Значение по умолчанию: `1`
* `sortBy`
- * Описание: Номер колонки, по которой необходимо сортировать (нумеруются с `0`).
- Для множественной сортировки параметры указываются через запятую (например: `'0,1'`).
+ * Описание: Номер колонки, по которой необходимо сортировать (нумеруются с `0`).
+ * Для множественной сортировки параметры указываются через запятую (например: `'0,1'`).
* Допустимые значения:
* `stringCommaSeparated`
* `array`
@@ -194,8 +194,8 @@ require_once(
* Значение по умолчанию: `''`
* `typography`
- * Описание: Номера колонок через запятую, значения которых нужно типографировать (колонки нумеруются с `0`).
- Если не задано, ничего не типографируется.
+ * Описание: Номера колонок через запятую, значения которых нужно типографировать (колонки нумеруются с `0`).
+ * Если не задано, ничего не типографируется.
* Допустимые значения:
* `stringCommaSeparated`
* `array`
@@ -211,50 +211,52 @@ require_once(
* Значение по умолчанию: `'html'`
* `rowGlue`
- * Описание: Разделитель (объединитель) между строками при выводе.
- Может использоваться совместно с шаблоном `rowTpl`.
+ * Описание: Разделитель (объединитель) между строками при выводе.
+ * Может использоваться совместно с шаблоном `rowTpl`.
* Допустимые значения: `string`
* Значение по умолчанию: `''`
* `colGlue`
- * Описание: Разделитель (объединитель) между колонками при выводе.
- Может использоваться совместно с шаблоном `colTpl` и `rowTpl`.
+ * Описание: Разделитель (объединитель) между колонками при выводе.
+ * Может использоваться совместно с шаблоном `colTpl` и `rowTpl`.
* Допустимые значения: `string`
* Значение по умолчанию: `''`
* `rowTpl`
- * Описание: Шаблон для вывода строк (при `outputFormat` == `'html'`).
- Доступные плейсхолдеры:
- * `[+rowNumber+]` — номер текущей строки, начинающийся с `1`
- * `[+rowNumber.zeroBased+]` — номер текущей строки, начинающийся с `0`
- * `[+rowKey+]` — ключ текущей строки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+rowNumber.zeroBased+]`
- * `[+total+]` — бщее количество строк
- * `[+resultTotal+]` — количество возвращаемых строк
- * `[+col0+]`, `[+col1+]` и т. п. — значения соответствующих колонок
- * `[+`_columnKey_`+]` — значения колонок, где _columnKey_ — оригинальный ключ колонки (см. примеры ниже)
- * `[+allColumnValues+]` — значения всех колонок, объединённые через `colGlue`
+ * Описание: Шаблон для вывода строк (при `outputFormat` == `'html'`).
+ * Доступные плейсхолдеры:
+ * `[+rowNumber+]` — номер текущей строки, начинающийся с `1`
+ * `[+rowNumber.zeroBased+]` — номер текущей строки, начинающийся с `0`
+ * `[+rowKey+]` — ключ текущей строки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+rowNumber.zeroBased+]`
+ * `[+total+]` — бщее количество строк
+ * `[+resultTotal+]` — количество возвращаемых строк
+ * `[+col`_columnNumber_`+]` (например, `[+col0+]`, `[+col1+]` и т. п.) — значения соответствующих колонок, где _columnNumber_ — номер колонки, начинающийся с `0`
+ * `[+`_columnKey_`+]` — значения колонок, где _columnKey_ — оригинальный ключ колонки (см. примеры ниже)
+ * `[+`_columnKey_`.`_nestedProperty_`+]`, `[+col`_columnNumber_`.`_nestedProperty_`+]` — значения вложенных свойств, когда значение колонки является объектом
+ * `[+allColumnValues+]` — значения всех колонок, объединённые через `colGlue`
+ * `[+allColumnValuesObjectJson+]` — значения всех колонок в виде JSON-объекта, где ключи — исходные ключи колонок, значения — значения
* Допустимые значения:
* `stringChunkName`
* `string` — передавать код напрямую без чанка можно начиная значение с `@CODE:`
* Значение по умолчанию: —
* `colTpl`
- * Описание: Список шаблонов для вывода колонок, через запятую (при `outputFormat` == `'html'`).
- Если шаблонов меньше, чем колонок, для всех недостающих выставляется последний указанный шаблон.
+ * Описание: Список шаблонов для вывода колонок, через запятую (при `outputFormat` == `'html'`).
+ * Если шаблонов меньше, чем колонок, для всех недостающих выставляется последний указанный шаблон.
* Допустимые значения:
* `stringCommaSeparated`
* `array`
* Значение по умолчанию: —
* `colTpl[$i]`
- * Описание: Шаблон для вывода колонки.
- Доступные плейсхолдеры:
- * `[+val+]` — значение колонки
- * `[+columnIndex+]` — номер колонки, начинающийся с `0`
- * `[+columnKey+]` — ключ колонки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+columnIndex+]`
- * `[+rowNumber+]` — номер строки, начинающийся с `1`
- * `[+rowNumber.zeroBased+]` — номер строки, начинающийся с `0`
- * `[+rowKey+]` — ключ текущей строки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+rowNumber.zeroBased+]`
+ * Описание: Шаблон для вывода колонки.
+ * Доступные плейсхолдеры:
+ * `[+val+]` — значение колонки
+ * `[+columnIndex+]` — номер колонки, начинающийся с `0`
+ * `[+columnKey+]` — ключ колонки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+columnIndex+]`
+ * `[+rowNumber+]` — номер строки, начинающийся с `1`
+ * `[+rowNumber.zeroBased+]` — номер строки, начинающийся с `0`
+ * `[+rowKey+]` — ключ текущей строки, полезно для объектов или ассоциативных массивов в `inputString`, для индексировнных массивов плейсхолдер эквивалентен `[+rowNumber.zeroBased+]`
* Допустимые значения:
* `stringChunkName`
* `string` — передавать код напрямую без чанка можно начиная значение с `@CODE:`
@@ -262,35 +264,34 @@ require_once(
* Значение по умолчанию: —
* `outerTpl`
- * Описание: Шаблон внешней обёртки (при `outputFormat` != `'array'`).
- Доступные плейсхолдеры:
- * `[+result+]` — результат сниппета
- * `[+total+]` — общее количество строк
- * `[+resultTotal+]` — количество возвращаемых строк
- * `[+rowY.colX+]` — значение (где `Y` — номер строки, `X` — номер колонки)
+ * Описание: Шаблон внешней обёртки (при `outputFormat` != `'array'`).
+ * Доступные плейсхолдеры:
+ * `[+result+]` — результат сниппета
+ * `[+total+]` — общее количество строк
+ * `[+resultTotal+]` — количество возвращаемых строк
+ * `[+rowY.colX+]` — значение (где `Y` — номер строки, `X` — номер колонки)
* Допустимые значения:
* `stringChunkName`
* `string` — передавать код напрямую без чанка можно начиная значение с `@CODE:`
* Значение по умолчанию: —
* `placeholders`
- * Описание:
- Дополнительные данные, которые будут переданы в шаблоны `outerTpl`, `rowTpl` и `colTpl`.
- Вложенные объекты и массивы также поддерживаются:
- * `{"someOne": "1", "someTwo": "test" }` => `[+someOne+], [+someTwo+]`.
- * `{"some": {"a": "one", "b": "two"} }` => `[+some.a+]`, `[+some.b+]`.
- * `{"some": ["one", "two"] }` => `[+some.0+]`, `[+some.1+]`.
+ * Описание: Дополнительные данные, которые будут переданы в шаблоны `outerTpl`, `rowTpl` и `colTpl`.
+ * Вложенные объекты и массивы также поддерживаются:
+ * `{"someOne": "1", "someTwo": "test" }` => `[+someOne+], [+someTwo+]`.
+ * `{"some": {"a": "one", "b": "two"} }` => `[+some.a+]`, `[+some.b+]`.
+ * `{"some": ["one", "two"] }` => `[+some.0+]`, `[+some.1+]`.
* Допустимые значения:
* `stringJsonObject` — в виде [JSON](https://ru.wikipedia.org/wiki/JSON)
* `stringHjsonObject` — в виде [HJSON](https://hjson.github.io/)
- * `stringQueryFormated` — в виде [Query string](https://en.wikipedia.org/wiki/Query_string)
+ * `stringQueryFormatted` — в виде [Query string](https://en.wikipedia.org/wiki/Query_string)
* Также может быть задан, как нативный PHP объект или массив (например, для вызовов через `$modx->runSnippet`).
* `arrayAssociative`
* `object`
* Значение по умолчанию: —
* `urlencode`
- * Описание: Надо URL-кодировать результирующую строку?
+ * Описание: Надо URL-кодировать результирующую строку?
* При `outputFormat` != `'array'`.
* Строка кодируется согласно RFC 3986.
* Допустимые значения:
@@ -299,14 +300,14 @@ require_once(
* Значение по умолчанию: `0`
* `totalRowsToPlaceholder`
- * Описание: Имя внешнего плэйсхолдера (MODX)Evolution, в который нужно вывести общее количество строк.
- Если параметр не задан — не выводится.
+ * Описание: Имя внешнего плэйсхолдера (MODX)Evolution, в который нужно вывести общее количество строк.
+ * Если параметр не задан — не выводится.
* Допустимые значения: `string`
* Значение по умолчанию: —
* `resultToPlaceholder`
- * Описание: Имя внешнего плэйсхолдера (MODX)Evolution, в который нужно сохранить результат работы сниппета вместо обычного вывода.
- Если параметр не задан — сниппет просто возвращает реузльтат.
+ * Описание: Имя внешнего плэйсхолдера (MODX)Evolution, в который нужно сохранить результат работы сниппета вместо обычного вывода.
+ * Если параметр не задан — сниппет просто возвращает реузльтат.
* Допустимые значения: `string`
* Значение по умолчанию: —
@@ -475,7 +476,7 @@ assets/images/some_img1.jpg::Изображение 1||assets/images/some_img2.j
### Вывод тегов документа через запятую с использованием регулярного выражения в `inputString_rowDelimiter`
-Пусть теги документа у нас хранятся в TV `tags` и к этой TV у нас применён виджет [(MODX)EvolutionCMS.plugins.ManagerManager.mm_widget_tags](https://code.divandesign.biz/modx/mm_widget_tags).
+Пусть теги документа у нас хранятся в TV `tags` и к этой TV у нас применён виджет [(MODX)EvolutionCMS.plugins.ManagerManager.mm_widget_tags](https://code.divandesign.ru/modx/mm_widget_tags).
Пользователь заполняет теги через запятую, при этом, может заполняться как с пробелами по краям, так и без них.
Значение TV `tags`:
@@ -696,13 +697,13 @@ Returns:
### Запустить сниппет через `\DDTools\Snippet::runSnippet` без DB и eval
```php
-//Подключение (MODX)EvolutionCMS.libraries.ddTools
+// Подключение (MODX)EvolutionCMS.libraries.ddTools
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddTools/modx.ddtools.class.php'
);
-//Запуск (MODX)EvolutionCMS.snippets.ddGetMultipleField
+// Запуск (MODX)EvolutionCMS.snippets.ddGetMultipleField
\DDTools\Snippet::runSnippet([
'name' => 'ddGetMultipleField',
'params' => [
@@ -716,8 +717,8 @@ require_once(
"Пример изображения 2"
]
]',
- 'rowTpl' => '@CODE:'
- ]
+ 'rowTpl' => '@CODE:',
+ ],
]);
```
@@ -730,6 +731,7 @@ _Примеров здесь можно напридумывать велико
* [Home page](https://code.divandesign.ru/modx/ddgetmultiplefield)
* [Telegram chat](https://t.me/dd_code)
* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddgetmultiplefield)
+* [GitHub](https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetMultipleField)
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/composer.json b/composer.json
index d80dcc9..57e9ae0 100644
--- a/composer.json
+++ b/composer.json
@@ -1,7 +1,7 @@
{
"name": "dd/evolutioncms-snippets-ddgetmultiplefield",
"type": "modxevo-snippet",
- "version": "3.9.0",
+ "version": "3.10.0",
"description": "A snippet for processing, manipulations and custom output structured data (JSON or separated by delimiters strings).",
"keywords": [
"modx",
@@ -20,22 +20,16 @@
"get multiple field",
"sort json"
],
- "homepage": "https://code.divandesign.biz/modx/ddgetmultiplefield",
+ "homepage": "https://code.divandesign.ru/modx/ddgetmultiplefield",
"support": {
"chat": "https://t.me/dd_code"
},
"authors": [
- {
- "name": "DD Group",
- "email": "code@DivanDesign.biz",
- "homepage": "https://code.divandesign.biz",
- "role": "Owner"
- },
{
"name": "Ilyas Ronef",
"email": "ilyas@DivanDesign.ru",
"homepage": "https://ronef.ru",
- "role": "Developer"
+ "role": "Owner"
},
{
"name": "Alexey Davydov",
@@ -56,7 +50,12 @@
],
"require": {
"php": ">=5.6.0",
- "dd/evolutioncms-libraries-ddtools": ">=0.50.0",
+ "dd/evolutioncms-libraries-ddtools": ">=0.62.0",
"dd/evolutioncms-snippets-ddtypograph": ">=2.5.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "ddGetMultipleField\\": "src/"
+ }
}
}
\ No newline at end of file
diff --git a/ddGetMultipleField_snippet.php b/ddGetMultipleField_snippet.php
index 9cc0cd5..a62a5f6 100644
--- a/ddGetMultipleField_snippet.php
+++ b/ddGetMultipleField_snippet.php
@@ -1,23 +1,23 @@
getConfig('base_path') .
- 'assets/libs/ddTools/modx.ddtools.class.php'
+ $modx->getConfig('base_path')
+ . 'assets/libs/ddTools/modx.ddtools.class.php'
);
return \DDTools\Snippet::runSnippet([
'name' => 'ddGetMultipleField',
- 'params' => $params
+ 'params' => $params,
]);
?>
\ No newline at end of file
diff --git a/require.php b/require.php
index 68aea4c..5ac08ae 100644
--- a/require.php
+++ b/require.php
@@ -1,12 +1,12 @@
'',
'inputString_docField' => null,
'inputString_docId' => null,
@@ -30,7 +30,7 @@ class Snippet extends \DDTools\Snippet {
'placeholders' => [],
'urlencode' => false,
'totalRowsToPlaceholder' => null,
- 'resultToPlaceholder' => null
+ 'resultToPlaceholder' => null,
],
$paramsTypes = [
@@ -38,7 +38,7 @@ class Snippet extends \DDTools\Snippet {
'removeEmptyCols' => 'boolean',
'urlencode' => 'boolean',
'startRow' => 'integer',
- 'placeholders' => 'objectArray'
+ 'placeholders' => 'objectArray',
],
$renamedParamsCompliance = [
@@ -46,38 +46,38 @@ class Snippet extends \DDTools\Snippet {
'inputString_docField' => 'docField',
'inputString_docId' => 'docId',
'inputString_rowDelimiter' => 'rowDelimiter',
- 'inputString_colDelimiter' => 'colDelimiter'
+ 'inputString_colDelimiter' => 'colDelimiter',
]
;
/**
* prepareParams
- * @version 1.1.2 (2022-08-10)
+ * @version 1.1.5 (2024-09-06)
*
* @param $params {stdClass|arrayAssociative|stringJsonObject|stringHjsonObject|stringQueryFormatted}
*
* @return {void}
*/
protected function prepareParams($params = []){
- //Call base method
+ // Call base method
parent::prepareParams($params);
- //Comma separated string
+ // Comma separated string
foreach (
[
'sortBy',
'typography',
'colTpl'
- ] as
- $paramName
+ ]
+ as $paramName
){
if (
- //Only strings can be exploded
- !is_array($this->params->{$paramName}) &&
- (
- //Zero indexes for `sortBy` and `typography` must be used
- $this->params->{$paramName} === '0' ||
- !empty($this->params->{$paramName})
+ // Only strings can be exploded
+ !is_array($this->params->{$paramName})
+ && (
+ // Zero indexes for `sortBy` and `typography` must be used
+ $this->params->{$paramName} === '0'
+ || !empty($this->params->{$paramName})
)
){
$this->params->{$paramName} = explode(
@@ -92,8 +92,8 @@ protected function prepareParams($params = []){
}
if (
- $this->params->columns !== 'all' &&
- !is_array($this->params->columns)
+ $this->params->columns !== 'all'
+ && !is_array($this->params->columns)
){
$this->params->columns = explode(
',',
@@ -101,7 +101,7 @@ protected function prepareParams($params = []){
);
}
- //Хитро-мудро для array_intersect_key
+ // Хитро-мудро для array_intersect_key
if (is_array($this->params->columns)){
$this->params->columns = array_combine(
$this->params->columns,
@@ -115,30 +115,30 @@ protected function prepareParams($params = []){
$this->params->outputFormat = strtolower($this->params->outputFormat);
- //Prepare templates
+ // Prepare templates
foreach (
[
'rowTpl',
'outerTpl'
- ] as
- $paramName
+ ]
+ as $paramName
){
- //Chunk content or inline template
- $this->params->{$paramName} = \ddTools::$modx->getTpl($this->params->{$paramName});
+ // Chunk content or inline template
+ $this->params->{$paramName} = \ddTools::getTpl($this->params->{$paramName});
}
if (empty($this->params->colTpl)){
- //Without templates by default
+ // Without templates by default
$this->params->colTpl = [''];
}else{
- //Получим содержимое шаблонов
+ // Получим содержимое шаблонов
foreach (
- $this->params->colTpl as
- $colTpl_itemNumber =>
- $colTpl_itemValue
+ $this->params->colTpl
+ as $colTpl_itemNumber
+ => $colTpl_itemValue
){
- //Chunk content or inline template
- $this->params->colTpl[$colTpl_itemNumber] = \ddTools::$modx->getTpl($this->params->colTpl[$colTpl_itemNumber]);
+ // Chunk content or inline template
+ $this->params->colTpl[$colTpl_itemNumber] = \ddTools::getTpl($this->params->colTpl[$colTpl_itemNumber]);
}
$this->params->colTpl = str_replace(
@@ -148,10 +148,10 @@ protected function prepareParams($params = []){
);
}
- //Unfold for arrays support (e. g. `{"somePlaceholder1": "test", "somePlaceholder2": {"a": "one", "b": "two"} }` => `[+somePlaceholder1+]`, `[+somePlaceholder2.a+]`, `[+somePlaceholder2.b+]`; `{"somePlaceholder1": "test", "somePlaceholder2": ["one", "two"] }` => `[+somePlaceholder1+]`, `[+somePlaceholder2.0+]`, `[somePlaceholder2.1]`)
+ // Unfold for arrays support (e. g. `{"somePlaceholder1": "test", "somePlaceholder2": {"a": "one", "b": "two"} }` => `[+somePlaceholder1+]`, `[+somePlaceholder2.a+]`, `[+somePlaceholder2.b+]`; `{"somePlaceholder1": "test", "somePlaceholder2": ["one", "two"] }` => `[+somePlaceholder1+]`, `[+somePlaceholder2.0+]`, `[somePlaceholder2.1]`)
$this->params->placeholders = \ddTools::unfoldArray($this->params->placeholders);
- //Если задано имя поля, которое необходимо получить
+ // Если задано имя поля, которое необходимо получить
if (!empty($this->params->inputString_docField)){
$this->params->inputString = \ddTools::getTemplateVarOutput(
[$this->params->inputString_docField],
@@ -161,75 +161,76 @@ protected function prepareParams($params = []){
$this->params->inputString = $this->params->inputString[$this->params->inputString_docField];
}
- //Если заданы условия фильтрации
+ // Если заданы условия фильтрации
if (!empty($this->params->filter)){
- //Backward compatibility
+ // Backward compatibility
$this->params->filter = str_replace(
[
'::',
- '<>'
+ '<>',
],
[
'==',
- '!='
+ '!=',
],
$this->params->filter
);
- //Разбиваем по условию «или»
+ // Разбиваем по условию «или»
$filterSource = explode(
'||',
$this->params->filter
);
- //Clear
+ // Clear
$this->params->filter = [];
- //Перебираем по условию «или»
+ // Перебираем по условию «или»
foreach (
- $filterSource as
- $orIndex =>
- $orCondition
+ $filterSource
+ as $orIndex
+ => $orCondition
){
$this->params->filter[$orIndex] = [];
- //Перебираем по условию «и»
+ // Перебираем по условию «и»
foreach (
- //Разбиваем по условию «и»
+ // Разбиваем по условию «и»
explode(
'&&',
$orCondition
- ) as
- $andIndex =>
- $andCondition
+ )
+ as $andIndex
+ => $andCondition
){
- //Добавляем вид сравнения для колонки
+ // Добавляем вид сравнения для колонки
$this->params->filter[$orIndex][$andIndex] = [
'isEqual' =>
strpos(
$andCondition,
'=='
- ) !== false
+ )
+ !== false
,
'columnKey' => '',
- 'columnValue' => ''
+ 'columnValue' => '',
];
- //Разбиваем по колонке/значению
+ // Разбиваем по колонке/значению
$andCondition = explode(
(
- $this->params->filter[$orIndex][$andIndex]['isEqual'] ?
- '==' :
- '!='
+ $this->params->filter[$orIndex][$andIndex]['isEqual']
+ ? '=='
+ : '!='
),
$andCondition
);
- //Добавляем правило для соответствующей колонки
+ // Добавляем правило для соответствующей колонки
$this->params->filter[$orIndex][$andIndex]['columnKey'] = trim($andCondition[0]);
$this->params->filter[$orIndex][$andIndex]['columnValue'] = trim(
$andCondition[1],
- //Trim whitespaces and quotes
+ // Trim whitespaces and quotes
" \t\n\r\0\x0B\"'"
);
}
@@ -239,17 +240,17 @@ protected function prepareParams($params = []){
/**
* run
- * @version 1.7.1 (2023-01-11)
+ * @version 1.9.1 (2024-09-06)
*
* @return {string}
*/
public function run(){
- //The snippet must return an empty string even if result is absent
+ // The snippet must return an empty string even if result is absent
$result = '';
- //Если задано значение поля
+ // Если задано значение поля
if (strlen($this->params->inputString) > 0){
- //Являются ли разделители регулярками
+ // Являются ли разделители регулярками
$inputString_rowDelimiterIsRegexp =
(
filter_var(
@@ -257,13 +258,14 @@ public function run(){
FILTER_VALIDATE_REGEXP,
[
'options' => [
- 'regexp' => '/^\/.*\/[a-z]*$/'
- ]
+ 'regexp' => '/^\/.*\/[a-z]*$/',
+ ],
]
- ) !== false
- ) ?
- true :
- false
+ )
+ !== false
+ )
+ ? true
+ : false
;
$inputString_colDelimiterIsRegexp =
@@ -273,16 +275,17 @@ public function run(){
FILTER_VALIDATE_REGEXP,
[
'options' => [
- 'regexp' => '/^\/.*\/[a-z]*$/'
- ]
+ 'regexp' => '/^\/.*\/[a-z]*$/',
+ ],
]
- ) !== false
- ) ?
- true :
- false
+ )
+ !== false
+ )
+ ? true
+ : false
;
- //JSON (first letter is “{” or “[”)
+ // JSON (first letter is “{” or “[”)
if (
in_array(
substr(
@@ -292,137 +295,139 @@ public function run(){
),
[
'{',
- '['
+ '[',
]
)
){
$data = \DDTools\ObjectTools::convertType([
'object' => $this->params->inputString,
- 'type' => 'objectArray'
+ 'type' => 'objectArray',
]);
}
- //Not JSON
+ // Not JSON
if (empty($data)){
- //Разбиваем на строки
+ // Разбиваем на строки
$data =
- $inputString_rowDelimiterIsRegexp ?
- preg_split(
+ $inputString_rowDelimiterIsRegexp
+ ? preg_split(
$this->params->inputString_rowDelimiter,
$this->params->inputString
- ) :
- explode(
+ )
+ : explode(
$this->params->inputString_rowDelimiter,
$this->params->inputString
)
;
}
- //Convert data to array for code simplification
+ // Convert data to array for code simplification
$data = (array) $data;
- //Общее количество строк
+ // Общее количество строк
$total = count($data);
- //Перебираем строки, разбиваем на колонки
+ // Перебираем строки, разбиваем на колонки
foreach (
- $data as
- $rowKey =>
- $rowValue
+ $data
+ as $rowKey
+ => $rowValue
){
if (!is_array($rowValue)){
$data[$rowKey] =
- $inputString_colDelimiterIsRegexp ?
- preg_split(
+ $inputString_colDelimiterIsRegexp
+ ? preg_split(
$this->params->inputString_colDelimiter,
$rowValue
- ) :
- explode(
+ )
+ : explode(
$this->params->inputString_colDelimiter,
$rowValue
)
;
}
- //Если необходимо получить какие-то конкретные значения
+ // Если необходимо получить какие-то конкретные значения
if (!empty($this->params->filter)){
- //Перебираем условия `or`
+ // Перебираем условия `or`
foreach (
- $this->params->filter as
- $orIndex =>
- $orCondition
+ $this->params->filter
+ as $orIndex
+ => $orCondition
){
- //Считаем, что вариант проходит, если не доказано обратное
+ // Считаем, что вариант проходит, если не доказано обратное
$isFound = true;
- //Перебираем условия `and`
+ // Перебираем условия `and`
foreach (
- $orCondition as
- $andIndex =>
- $andCondition
+ $orCondition
+ as $andIndex
+ => $andCondition
){
- //В зависимости от того, должно или нет значение в колонке быть равно фильтру, присваиваем флагу результат
+ // В зависимости от того, должно или нет значение в колонке быть равно фильтру, присваиваем флагу результат
if ($andCondition['isEqual']){
- //Если должно быть равно
+ // Если должно быть равно
$isFound = $data[$rowKey][$andCondition['columnKey']] == $andCondition['columnValue'];
}else{
- //Если не должно быть равно
+ // Если не должно быть равно
$isFound = $data[$rowKey][$andCondition['columnKey']] != $andCondition['columnValue'];
}
- //Если условие сменилось на ложь, значит переходим к следующему условию `or`
+ // Если условие сменилось на ложь, значит переходим к следующему условию `or`
if (!$isFound){
break;
}
}
- //Если все условия `and` прошли проверку, выходим из цикла `or`
+ // Если все условия `and` прошли проверку, выходим из цикла `or`
if ($isFound){
break;
}
}
- //Если на выходе из цикла мы видим, что ни одно из условий не выполнено, сносим строку нафиг
+ // Если на выходе из цикла мы видим, что ни одно из условий не выполнено, сносим строку нафиг
if (!$isFound){
unset($data[$rowKey]);
}
}
- //Если нужно получить какую-то конкретную колонку
+ // Если нужно получить какую-то конкретную колонку
if (
- $this->params->columns != 'all' &&
- //Также проверяем на то, что строка вообще существует, т.к. она могла быть уже удалена ранее
- isset($data[$rowKey])
+ $this->params->columns != 'all'
+ // Также проверяем на то, что строка вообще существует, т.к. она могла быть уже удалена ранее
+ && isset($data[$rowKey])
){
- //Выбираем только необходимые колонки + Сбрасываем ключи массива
+ // Выбираем только необходимые колонки + Сбрасываем ключи массива
$data[$rowKey] = array_values(array_intersect_key(
$data[$rowKey],
$this->params->columns
));
}
- //Если нужно удалять пустые строки
+ // Если нужно удалять пустые строки
if (
- $this->params->removeEmptyRows &&
- //Также проверяем на то, что строка вообще существует, т.к. она могла быть уже удалена ранее
- isset($data[$rowKey]) &&
- //Если строка пустая
- strlen(implode(
- '',
- $data[$rowKey]
- )) == 0
+ $this->params->removeEmptyRows
+ // Также проверяем на то, что строка вообще существует, т.к. она могла быть уже удалена ранее
+ && isset($data[$rowKey])
+ // Если строка пустая
+ && strlen(
+ implode(
+ '',
+ $data[$rowKey]
+ )
+ ) == 0
){
unset($data[$rowKey]);
}
}
- //Если что-то есть (могло ничего не остаться после удаления пустых и/или получения по значениям)
+ // Если что-то есть (могло ничего не остаться после удаления пустых и/или получения по значениям)
if (count($data) > 0){
- //Если надо сортировать
+ // Если надо сортировать
if (!empty($this->params->sortDir)){
- //Если надо в случайном порядке - шафлим
+ // Если надо в случайном порядке - шафлим
if ($this->params->sortDir == 'RAND'){
- //Shuffle array preserve keys
+ // Shuffle array preserve keys
uksort(
$data,
function(){
@@ -432,35 +437,35 @@ function(){
);
}
);
- //Если надо просто в обратном порядке
+ // Если надо просто в обратном порядке
}elseif ($this->params->sortDir == 'REVERSE'){
$data = array_reverse($data);
}else{
- //Сортируем результаты
+ // Сортируем результаты
$data = \ddTools::sort2dArray(
$data,
$this->params->sortBy,
(
- $this->params->sortDir == 'ASC' ?
- 1 :
- -1
+ $this->params->sortDir == 'ASC'
+ ? 1
+ : -1
)
);
}
}
- //Обрабатываем слишком большой индекс
+ // Обрабатываем слишком большой индекс
if ($this->params->startRow > count($data) - 1){
$this->params->startRow = count($data) - 1;
}
- //Если нужны все элементы
+ // Если нужны все элементы
if ($this->params->totalRows == 'all'){
$data = array_slice(
$data,
$this->params->startRow,
null,
- //preserve keys
+ // preserve keys
true
);
}else{
@@ -468,15 +473,15 @@ function(){
$data,
$this->params->startRow,
$this->params->totalRows,
- //preserve keys
+ // preserve keys
true
);
}
- //Общее количество возвращаемых строк
+ // Общее количество возвращаемых строк
$resultTotal = count($data);
- //Плэйсхолдер с общим количеством
+ // Плэйсхолдер с общим количеством
if (!empty($this->params->totalRowsToPlaceholder)){
\ddTools::$modx->setPlaceholder(
$this->params->totalRowsToPlaceholder,
@@ -484,33 +489,33 @@ function(){
);
}
- //Если нужно типографировать
+ // Если нужно типографировать
if (!empty($this->params->typography)){
- //Придётся ещё раз перебрать результат
+ // Придётся ещё раз перебрать результат
foreach (
- $data as
- $rowKey =>
- $rowValue
+ $data
+ as $rowKey
+ => $rowValue
){
- //Перебираем колонки, заданные для типографирования
+ // Перебираем колонки, заданные для типографирования
foreach (
- $this->params->typography as
- $columnKey
+ $this->params->typography
+ as $columnKey
){
- //Если такая колонка существует, типографируем
+ // Если такая колонка существует, типографируем
if (isset($data[$rowKey][$columnKey])){
$data[$rowKey][$columnKey] = \DDTools\Snippet::runSnippet([
'name' => 'ddTypograph',
'params' => [
- 'text' => $data[$rowKey][$columnKey]
- ]
+ 'text' => $data[$rowKey][$columnKey],
+ ],
]);
}
}
}
}
- //Если вывод в массив
+ // Если вывод в массив
if ($this->params->outputFormat == 'array'){
$result = $data;
}else{
@@ -519,73 +524,67 @@ function(){
$placeholdersGeneral = \DDTools\ObjectTools::extend([
'objects' => [
[
- //Количество элементов
+ // Количество элементов
'total' => $total,
- 'resultTotal' => $resultTotal
+ 'resultTotal' => $resultTotal,
],
- //User's placeholders can overwrite original data if needed, so they must be placed at the end
- $this->params->placeholders
- ]
+ // User's placeholders can overwrite original data if needed, so they must be placed at the end
+ $this->params->placeholders,
+ ],
]);
- //Если вывод просто в формате html
+ // Если вывод просто в формате html
if (
- $this->params->outputFormat == 'html' ||
- $this->params->outputFormat == 'htmlarray'
+ $this->params->outputFormat == 'html'
+ || $this->params->outputFormat == 'htmlarray'
){
$rowIndex = 0;
- //Перебираем строки
+ // Перебираем строки
foreach (
- $data as
- $rowKey =>
- $rowValue
+ $data
+ as $rowKey
+ => $rowValue
){
$rowPlaceholders = \DDTools\ObjectTools::extend([
'objects' => [
- //Row placeholders
+ // Row placeholders
[
- //Запишем номер строки
+ // Запишем номер строки
'rowNumber.zeroBased' => $rowIndex,
'rowNumber' => $rowIndex + 1,
- 'rowKey' => $rowKey
+ 'rowKey' => $rowKey,
],
- //User's placeholders can overwrite original data if needed, so they must be placed at the end
- $placeholdersGeneral
- ]
+ // User's placeholders can overwrite original data if needed, so they must be placed at the end
+ $placeholdersGeneral,
+ ],
]);
$rowData = (object) [
- 'allColumnValues' => []
+ 'allColumnValues' => [],
+ 'allColumnValuesObjectJson' => new \stdClass(),
];
$columnIndex = 0;
- //Перебираем колонки
+ // Перебираем колонки
foreach (
- $rowValue as
- $columnKey =>
- $columnValue
+ $rowValue
+ as $columnKey
+ => $columnValue
){
- //If the column is used
+ // If the column is used
if (
- !empty($columnValue) ||
- !$this->params->removeEmptyCols
+ !empty($columnValue)
+ || !$this->params->removeEmptyCols
){
- if (is_array($columnValue)){
- $columnValue = \DDTools\ObjectTools::convertType([
- 'object' => $columnValue,
- 'type' => 'stringJsonAuto'
- ]);
- }
-
- //If template for this column is not set
+ // If template for this column is not set
if (!isset($this->params->colTpl[$columnIndex])){
- //Use previous
+ // Use previous
$this->params->colTpl[$columnIndex] = $this->params->colTpl[$columnIndex - 1];
}
- //If template for the column is needed
+ // If template for the column is needed
if (!empty($this->params->colTpl[$columnIndex])){
$columnValue = \ddTools::parseText([
'text' => $this->params->colTpl[$columnIndex],
@@ -594,24 +593,33 @@ function(){
[
'val' => $columnValue,
'columnIndex' => $columnIndex,
- 'columnKey' => $columnKey
+ 'columnKey' => $columnKey,
],
- //User's placeholders can overwrite original data if needed, so they must be placed at the end
- $rowPlaceholders
- ]
+ // User's placeholders can overwrite original data if needed, so they must be placed at the end
+ $rowPlaceholders,
+ ],
]),
- 'mergeAll' => false
+ 'isCompletelyParsingEnabled' => false,
]);
}
- //Save for implode later by $this->params->colGlue
- $rowData->allColumnValues[] = $columnValue;
+ // Save for implode later by $this->params->colGlue
+ $rowData->allColumnValues[] =
+ ! is_array($columnValue)
+ ? $columnValue
+ : \DDTools\ObjectTools::convertType([
+ 'object' => $columnValue,
+ 'type' => 'stringJsonAuto',
+ ])
+ ;
}
- //Save column value by index
+ // Save column value by index
$rowData->{'col' . $columnIndex} = $columnValue;
- //And by original column key
+ // And by original column key
$rowData->{$columnKey} = $columnValue;
+ // Row JSON
+ $rowData->allColumnValuesObjectJson->{$columnKey} = $columnValue;
$columnIndex++;
}
@@ -627,10 +635,10 @@ function(){
'data' => \DDTools\ObjectTools::extend([
'objects' => [
$rowData,
- //User's placeholders can overwrite original data if needed, so they must be placed at the end
- $rowPlaceholders
- ]
- ])
+ // User's placeholders can overwrite original data if needed, so they must be placed at the end
+ $rowPlaceholders,
+ ],
+ ]),
]);
}else{
$resTemp[$rowKey] = $rowData->allColumnValues;
@@ -647,14 +655,14 @@ function(){
}else{
$result = $resTemp;
}
- //Если вывод в формате JSON
+ // Если вывод в формате JSON
}elseif ($this->params->outputFormat == 'json'){
$resTemp = $data;
- //Если нужно выводить только одну колонку
+ // Если нужно выводить только одну колонку
if (
- $this->params->columns != 'all' &&
- count($this->params->columns) == 1
+ $this->params->columns != 'all'
+ && count($this->params->columns) == 1
){
$resTemp = array_map(
'implode',
@@ -662,40 +670,40 @@ function(){
);
}
- //Если нужно получить какой-то конкретный элемент, а не все
+ // Если нужно получить какой-то конкретный элемент, а не все
if ($this->params->totalRows == '1'){
$result = json_encode($resTemp[$this->params->startRow]);
}else{
$result = json_encode($resTemp);
}
- //Это чтобы MODX не воспринимал как вызов сниппета
+ // Это чтобы MODX не воспринимал как вызов сниппета
$result = strtr(
$result,
[
'[[' => '[ [',
- ']]' => '] ]'
+ ']]' => '] ]',
]
);
}
- //Если оборачивающий шаблон задан (и вывод не в массив), парсим его
+ // Если оборачивающий шаблон задан (и вывод не в массив), парсим его
if (!empty($this->params->outerTpl)){
$resTemp = [];
- //Элемент массива 'result' должен находиться самым первым, иначе дополнительные переданные плэйсхолдеры в тексте не найдутся!
+ // Элемент массива 'result' должен находиться самым первым, иначе дополнительные переданные плэйсхолдеры в тексте не найдутся!
$resTemp['result'] = $result;
- //Преобразуем результат в одномерный массив
+ // Преобразуем результат в одномерный массив
$data = \ddTools::unfoldArray($data);
$rowIndex = 0;
- //Добавляем 'row' и 'val' к ключам
+ // Добавляем 'row' и 'val' к ключам
foreach (
- $data as
- $rowKey =>
- $rowValue
+ $data
+ as $rowKey
+ => $rowValue
){
$rowKeyNew = preg_replace(
'/(.+?)\.(.+?)/',
@@ -720,18 +728,18 @@ function(){
$resTemp = \DDTools\ObjectTools::extend([
'objects' => [
$resTemp,
- //User's placeholders can overwrite original data if needed, so they must be placed at the end
- $placeholdersGeneral
- ]
+ // User's placeholders can overwrite original data if needed, so they must be placed at the end
+ $placeholdersGeneral,
+ ],
]);
$result = \ddTools::parseText([
'text' => $this->params->outerTpl,
- 'data' => $resTemp
+ 'data' => $resTemp,
]);
}
- //Если нужно URL-кодировать строку
+ // Если нужно URL-кодировать строку
if ($this->params->urlencode){
$result = rawurlencode($result);
}
@@ -739,7 +747,7 @@ function(){
}
}
- //Если надо, выводим в плэйсхолдер
+ // Если надо, выводим в плэйсхолдер
if (!empty($this->params->resultToPlaceholder)){
\ddTools::$modx->setPlaceholder(
$this->params->resultToPlaceholder,