Esempio n. 1
0
 /**
  * Resolves variables to marker. Markers can be simple markers like
  * ###MY_MARKER## or "nested" markers which devide their sub values by a
  * dot: ###MY_MARKER.MY_VALUE### ###MY_MARKER.MY_OTHER_VALUE###.
  *
  * @param	array	array with markers to resolve
  * @param	mixed	the marker's value, which can be an array of values, an object with certain getter methods or a simple string
  * @return	array	with marker as index and value for it
  */
 protected function resolveVariableMarkers(array $markers, $variableValue)
 {
     $resolvedMarkers = array();
     $normalizedKeysArray = array();
     foreach ($variableValue as $key => $value) {
         $key = $this->normalizeString($key);
         $normalizedKeysArray[$key] = $value;
     }
     foreach ($markers as $marker) {
         $dotPosition = strpos($marker, '.');
         if ($dotPosition !== FALSE) {
             $resolvedValue = NULL;
             // the marker contains a dot, thus we have to resolve the
             // second part of the marker
             $valueSelector = substr($marker, $dotPosition + 1);
             $valueSelector = $this->normalizeString($valueSelector);
             if (is_array($variableValue) && array_key_exists($valueSelector, $normalizedKeysArray)) {
                 $resolvedValue = $normalizedKeysArray[$valueSelector];
             } elseif (is_object($variableValue)) {
                 $resolveMethod = 'get' . Tx_Solr_Util::camelize($valueSelector);
                 $resolvedValue = $variableValue->{$resolveMethod}();
             }
         } else {
             $resolvedValue = $variableValue[strtolower($marker)];
         }
         if (is_null($resolvedValue)) {
             if ($this->debugMode) {
                 $resolvedValue = '!!! Marker "' . $marker . '" could not be resolved.';
             } else {
                 $resolvedValue = '';
             }
         }
         if (is_array($resolvedValue)) {
             // handling multivalue fields, @see Tx_Solr_ViewHelper_Multivalue
             $resolvedValue = serialize($resolvedValue);
         }
         $resolvedMarkers[$marker] = $resolvedValue;
     }
     return $resolvedMarkers;
 }