Сохраняйте данные в формате JSON или Query string, затем расширяйте по необходимости и используйте позже без запросов к базе данных.
- PHP >= 5.6
- (MODX)EvolutionCMS >= 1.1
- (MODX)EvolutionCMS.libraries.ddTools >= 0.49.1
- Название сниппета:
ddStash
. - Описание:
<b>1.3</b> Сохраняйте данные в формате JSON или QueryString, затем расширяйте по необходимости и используйте позже без запросов к базе данных.
. - Категория:
Core
. - Анализировать DocBlock:
no
. - Код сниппета (php): Вставьте содержимое файла
ddStash_snippet.php
из архива.
- Создайте новую папку
assets/snippets/ddStash/
. - Извлеките содержимое архива в неё (кроме файла
ddStash_snippet.php
).
Используя (MODX)EvolutionCMS.libraries.ddInstaller
Просто вызовите следующий код в своих исходинках или модуле Console:
//Подключение (MODX)EvolutionCMS.libraries.ddInstaller
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddInstaller/require.php'
);
//Установка (MODX)EvolutionCMS.snippets.ddStash
\DDInstaller::install([
'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddStash',
'type' => 'snippet'
]);
- Если
ddStash
отсутствует на вашем сайте,ddInstaller
просто установит его. - Если
ddStash
уже есть на вашем сайте,ddInstaller
проверит его версию и обновит, если нужно.
-
save
- Описание: Сохранить данные в хранилище для последующего использования. Вложенные объекты также поддерживаются, см. примеры ниже.
- Допустимые значения:
stringJsonObject
— в виде JSONstringHjsonObject
— в виде HJSONstringQueryFormated
— в виде Query string- Также может быть задан, как нативный PHP объект или массив (например, для вызовов через
$modx->runSnippet
).arrayAssociative
object
- Значение по умолчанию: —
-
save_extendExisting
- Описание: Расширить существующие объекты вместо их перезаписи.
- Допустимые значения:
0
1
- Значение по умолчанию:
0
-
save_extendExistingWithEmpty
- Описание: Перезаписыать поля пустыми значениями (см. примеры ниже).
Следующие значения трактуются, как пустые:""
— an empty string[]
— an empty array{}
— an empty objectnull
- Допустимые значения:
0
1
- Значение по умолчанию:
1
- Описание: Перезаписыать поля пустыми значениями (см. примеры ниже).
-
get
- Описание: Ключ для получения данных из хранилища.
- Допустимые значения:
string
- Значение по умолчанию: —
-
get_tpl
-
Описание: Шаблон вывода.
Доступные плейсхолдеры:
[+snippetResult+]
— данные из хранилища
-
Допустимые значения:
stringChunkName
string
— передавать код напрямую без чанка можно начиная значение с@CODE:
-
Значение по умолчанию:
'@CODE:[+snippetResult+]'
-
-
storage
- Описание: Хранилище данных.
- Допустимые значения:
'post'
—$_POST
'session'
—$_SESSION
- Значение по умолчанию:
'post'
[[ddStash?
&save=`{
"userData": {
"firstName": "Иван",
"lastName": "[[ddGetDocumentField?
&docId=`1`
&docField=`lastName`
]]",
"children": [
{
"firstName": "Алиса"
},
{
"firstName": "Роберт"
}
]
},
"someData": "someValue"
}`
]]
[[ddStash? &get=`someData`]]
Вернёт someValue
.
[[ddStash? &get=`userData.firstName`]]
Вернёт Иван
.
[[ddStash? &get=`userData.children.0.firstName`]]
Вернёт Алиса
.
Если значение поля — объект или массив, оно будет возвращено в формате JSON.
[[ddStash? &get=`userData.children.0`]]
Вернёт:
{
"firstName": "Алиса"
}
[[ddStash? &get=`userData.children`]]
Вернёт:
[
{
"firstName": "Алиса"
},
{
"firstName": "Роберт"
}
]
[[ddStash? &get=`userData`]]
Вернёт:
{
"firstName": "Иван",
"lastName": "Иванов",
"children": [
{
"firstName": "Алиса"
},
{
"firstName": "Роберт"
}
]
}
Для начала сохраняем какой-нибудь объект:
[[ddStash?
&save=`{
"userData": {
"firstName": "Чак",
"lastName": "Иванов",
"children": [
{
"firstName": "Алиса"
},
{
"firstName": "Роберт"
}
]
}
}`
]]
Затем если мы просто сохраним объект с таким же ключём (userData
):
[[ddStash?
&save=`{
"userData": {
"middleName": "Рэй",
"lastName": "Норрис"
}
}`
]]
Сниппет перепишет предыдущий сохранённый объект полностью:
[[ddStash? &get=`userData`]]
Вернёт:
{
"middleName": "Рэй",
"lastName": "Норрис"
}
И так, если мы всё же хотим именно расширить первый объект, просто используем параметр save_extendExisting
:
[[ddStash?
&save=`{
"userData": {
"middleName": "Рэй",
"lastName": "Норрис"
}
}`
&save_extendExisting=`1`
]]
В этом случае сниппет рекурсивно расширит первый объект данными второго:
[[ddStash? &get=`userData`]]
Вернёт:
{
"firstName": "Чак",
"middleName": "Рэй",
"lastName": "Норрис",
"children": [
{
"firstName": "Алиса"
},
{
"firstName": "Роберт"
}
]
}
Сохранение: Расширение объектов без перезаписи полей пустыми значениями (&save_extendExistingWithEmpty=`0`
)
По умолчанию, полдя с пустыми занчениями (например, ''
) обрабатываются, как и все остальные значения и перезаписывают при расширении непустые.
[[ddStash?
&save=`{
"userData": {
"firstName": "Иван",
"lastName": "Тесла",
"discipline": "Электротехника"
}
}`
]]
[[ddStash?
&save=`{
"userData": {
"firstName": "Никола",
"lastName": ""
}
}`
&save_extendExisting=`1`
]]
Вернёт:
{
"firstName": "Никола",
"lastName": "",
"discipline": "Электротехника"
}
Пустое значение lastName
из второго объекта перезаписало непустое значение lastName
из первого объекта.
Если нам такое не нужно и мы хотим игнориовать пустые значения, просто изпользуем параметр save_extendExistingWithEmpty
== 0
:
[[ddStash?
&save=`{
"userData": {
"firstName": "Иван",
"lastName": "Тесла",
"discipline": "Электротехника"
}
}`
]]
[[ddStash?
&save=`{
"userData": {
"firstName": "Никола",
"lastName": ""
}
}`
&save_extendExisting=`1`
&save_extendExistingWithEmpty=`0`
]]
Вернёт:
{
"firstName": "Никола",
"lastName": "Тесла",
"discipline": "Электротехника"
}
//Подключение (MODX)EvolutionCMS.libraries.ddTools
require_once(
$modx->getConfig('base_path') .
'assets/libs/ddTools/modx.ddtools.class.php'
);
//Запуск (MODX)EvolutionCMS.snippets.ddStash
\DDTools\Snippet::runSnippet([
'name' => 'ddStash',
'params' => [
'get' => 'userData.firstName'
]
]);