/** * takes a search result document and processes its fields according to the * instructions configured in TS. Currently available instructions are * * timestamp - converts a date field into a unix timestamp * * serialize - uses serialize() to encode multivalue fields which then can be put out using the MULTIVALUE view helper * * skip - skips the whole field so that it is not available in the result, usefull for the spell field f.e. * The default is to do nothing and just add the document's field to the * resulting array. * * @param Apache_Solr_Document $document the Apache_Solr_Document result document * @return array An array with field values processed like defined in TS */ protected function processDocumentFieldsToArray(Apache_Solr_Document $document) { $processingInstructions = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_solr.']['search.']['results.']['fieldProcessingInstructions.']; $availableFields = $document->getFieldNames(); $result = array(); foreach ($availableFields as $fieldName) { $processingInstruction = $processingInstructions[$fieldName]; // TODO switch to field processors // TODO allow to have multiple (commaseparated) instructions for each field switch ($processingInstruction) { case 'timestamp': $processedFieldValue = Tx_Solr_Util::isoToTimestamp($document->{$fieldName}); break; case 'serialize': if (!empty($document->{$fieldName})) { $processedFieldValue = serialize($document->{$fieldName}); } else { $processedFieldValue = ''; } break; case 'skip': continue 2; default: $processedFieldValue = $document->{$fieldName}; } // escape markers in document fields // TODO remove after switching to fluid templates $processedFieldValue = Tx_Solr_Template::escapeMarkers($processedFieldValue); $result[$fieldName] = $processedFieldValue; } return $result; }