Часто виникає необхідність додаткової обробки даних перед виведенням. Для цього доступні 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;
};