Часто возникает необходимость дополнительной обработки данных перед выводом. Для этого доступны prepare и prepareWrap - как настройки в файле конфигурации либо как параметры сниппета.
В качестве значения можно указать имя сниппета, имя функции (в файле конфигурации также доступна возможность указать функцию-замыкание), либо их список, разделенный запятыми, либо их массив.
Параметры функции/сниппета следующие:
Параметр | Описание |
---|---|
$data | Текущие значения |
$modx | Экземпляр класса DocumentParser |
$_multiTV | Экземпляр класса multiTV, для работы с методами хранилища |
Функция/сниппет всегда должны возвращать значения, даже если они не менялись.
Примеры:
// в файле конфигурации:
function prepareRowsFunction($data, $modx, $_multiTV) {
return $data;
}
$settings['prepare'] = 'prepareRowsSnippet';
// или
$settings['prepare'] = function($data, $modx, $_multiTV) {
return $data;
};
// или
$settings['prepare'] = 'prepareRowsSnippet,prepareRowsFunction';
// или
$settings['prepare'] = ['prepareRowsSnippet', 'prepareRowsFunction'];
// или
$settings['prepare'] = ['prepareRowsSnippet', function($data, $modx, $_multiTV) {
return $data;
}];
// в шаблоне
[[multiTV? &tvName=`test` &prepare=`prepareRowsSnippet,prepareRowsFunction`]]
Значения параметра $data
функции prepare, помимо значений полей, указанных в конигурации переменной, будут следующими:
Ключ | Описание |
---|---|
docid | Идентификатор текущего документа |
iteration | Номер текущей итерации (начинается с 1) |
row | row.number: Номер текущей итерации (начинается с 1) row.total: Общее количество элементов |
Значения параметра $data
для prepareWrap:
Ключ | Описание |
---|---|
docid | Идентификатор текущего документа |
wrapper | Массив выведенных элементов |
rows | rows.offset: Количество пропущенных элементов rows.total: Общее количество элементов |
Примеры:
$settings['prepare'] = function($data, $modx, $_multiTV) {
$store = $_multiTV->getStore('storekey');
if (is_null($store)) {
$store = $modx->runSnippet('HeavySnippet');
$_multiTV->setStore('storekey', $store);
}
return $data;
};
$settings['prepare'] = function($data, $modx, $_multiTV) {
if (!empty($data['file'])) {
$extension = pathinfo($data['file'], PATHINFO_EXTENSION);
$data['icon'] = 'icon-document-' . $extension;
}
return $data;
};