Typo3 Schnippels

Freitag, 27. Juni 2014

Split anhand der Sprache

In TemplaVoilà wird ein FCE erstellt. Die Überschrift des Inhaltselementes wird in lib.fce_headline gemappt und sieht z.B. so aus “Deutsch;English;Französisch”. Anhand der Sprach-ID z.B. “…&L=0″ soll jetzt das Wort der jeweiligen Sprache verwendet werden. Für Suchmaschinen: TypoScript TEXT anhand Sprach-ID sys_language_ID GP:L splitten.

10 = TEXT
10.cObject = TEXT
10.cObject < lib.fce_headline
10 {
  listNum.data = TSFE:sys_language_uid
  listNum.splitChar = ;
}

extbase Object alle Properties / Eigenschaften holen

In extBase möchte man manchmal per foreach durch alle Eigenschaften eines Objektes oder Models iterieren, z.B. um zwei Objekte zu vergleichen oder ein Objekt in ein anderes zu kopieren. Für Suchmaschinen: Alle Felder eines Models laden, get all available setters for Domain Object Model, alle Variablen eines extbase Objektes holen, foreach durch alle getter einer Objektes. Domain-Model-Object vergleichen, typo3 extbase mit foreach alle proporties eines Objektes anzeigen. Debug aller Eigenschaften und Properties eines typo3 Domain-Objektes.

$props = Tx_Extbase_Reflection_ObjectAccess::getGettablePropertyNames($model);
foreach ($props as $prop) {
   echo $prop.' => '.Tx_Extbase_Reflection_ObjectAccess::getProperty($model, $prop).'<br />';
}

extbase zwei Domain Model Objekte vergleichen, Unterschiede zwischen zwei extbase Objekten zeigen

Hier werden alle Eigenschaften/Properties von zwei Domain-Model-Entities rekursiv verglichen und die Unterschiede zwischen beiden Objekten als Array zurückgegeben. Für Suchmaschinen: Unterschiede zwischen zwei Models finden extbase, typo3 zwei Objekte vergleichen, Unterschied zwischen zwei Modellen anzeigen typo3.

public function getChangedMemberDataFields( $oldMember, $newMember, $ignoreProps = array() ){
 
  if (!$ignoreProps) $ignoreProps = array('jsonData');
 
  $changes = array();
 
  if (is_object($oldMember)) {
	 $props = Tx_Extbase_Reflection_ObjectAccess::getGettablePropertyNames($oldMember);      
  } else if (is_array($oldMember)) {
	 $props = array_keys($oldMember);
  }
 
  foreach ($props as $prop) {
 
	 if (!in_array($prop, $ignoreProps)) {
		if (is_object($oldMember)) {
		   $oldVal = Tx_Extbase_Reflection_ObjectAccess::getProperty($oldMember, $prop);
		   $newVal = Tx_Extbase_Reflection_ObjectAccess::getProperty($newMember, $prop);
		} else {
		   $oldVal = $oldMember[$prop];
		   $newVal = $newMember[$prop];
		}
 
		if ($oldVal != $newVal && !is_array($oldVal) && !is_object($oldVal)) {
		   $changes[$prop] = array($oldVal, $newVal);
		}
		if (is_object($oldVal)) {
		   if ($ref = $this->getChangedMemberDataFields($oldVal, $newVal)) {
			  $changes[$prop] = $ref;
		   }
		}
		if (is_array($oldVal)) {
		   if ($ref = $this->getChangedMemberDataFields($oldVal, $newVal)) {
			  $changes[$prop] = $ref;
		   }
		}
	 }
  }
 
  return $changes;
 
}