Обработка данных перед выводом

    Часто возникает необходимость дополнительной обработки данных перед выводом. Для этого доступны 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)
    rowrow.number: Номер текущей итерации (начинается с 1) row.total: Общее количество элементов

    Значения параметра $data для prepareWrap:

    КлючОписание
    docidИдентификатор текущего документа
    wrapperМассив выведенных элементов
    rowsrows.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;
    };