Often there is a need for additional data processing before output. For this purpose, prepare and prepareWrap are available as settings in the configuration file or as snippet parameters.
The value can be a snippet name, a function name (also in the configuration file you can specify the Closure), or a comma-separated list, or an array of them.
The parameters of the function/snippet following:
| Parameter | Description | 
|---|---|
| $data | Current values | 
| $modx | Instance of the DocumentParser class | 
| $_multiTV | Instance of the multiTV class, to work with storage methods | 
The function/snippet should always return values, even if they have not changed.
Examples:
// in configuration file:
function prepareRowsFunction($data, $modx, $_multiTV) {
   return $data;
}
$settings['prepare'] = 'prepareRowsSnippet';
// or
$settings['prepare'] = function($data, $modx, $_multiTV) {
   return $data;
};
// or
$settings['prepare'] = 'prepareRowsSnippet,prepareRowsFunction'; 
// or
$settings['prepare'] = ['prepareRowsSnippet', 'prepareRowsFunction']; 
// or
$settings['prepare'] = ['prepareRowsSnippet', function($data, $modx, $_multiTV) {
   return $data;
}]; // in tempalte
Values of the $data parameter of the prepare function, in addition to the field values specified in the variable configuration, will be as follows:
| Key | Description | 
|---|---|
| docid | Current document ID | 
| iteration | Current iteration Number (starts with 1) | 
| row | row.number- current iteration Number (starts with 1),row.total- total number of elements | 
Values of the $data parameter for prepareWrap:
| Key | Description | 
|---|---|
| docid | Current document ID | 
| wrapper | Array of rendered elements | 
| rows | rows.offset- number of skipped items,rows.total- total number of elements | 
Examples:
$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;
};