Zum Inhalt springen

TCA rekursiv auslesen

Erstellt am 23. Oktober 2007 · Noch keine Antworten

Tags: TCA, PHP, Frage

bagalude ·

Hi Forum,

ich versuche derzeit für einen Export von Datensätzen die TCA rekursiv auszulesen, genauer die in ihr enthaltenen Datenbankabhängigkeiten, damit sich selbige später wieder importieren lassen. Dafür habe ich folgende Funktion in einer Extension erstellt:

function readTCA($table = 'pages'){
  $out[$table]= $table;
  $DATA = $GLOBALS['TCA'][$table]['columns'];
  if (is_array($DATA)) {
    foreach ($DATA as $key => $value)
      if (isset ($DATA[$key]['config']['foreign_table'])) {
 	$table = $DATA[$key]['config']['foreign_table'];
 	$xout = $this->readTCA($table);
 	$out=array_merge($out,$xout);
      }
    }
  }
  return $out;
}

Dies scheint soweit auch auf einer Ebene zu funktionieren, aber sobald ich die if(isset ($DATA[$key]['config']['foreign_table'])) Schleife mir einbaue hängt sich der Server auf (leider ohne Fehlermeldung). Kann mir vielleicht jemand sagen woran es liegt und wie ich das Problem umgehen kann??

Einzig mir bekannt Alternative wäre nämlich nur das Array mit den relevanten TCA einträgen per hand zu erstellen und dann statisch abzuspeichern was nicht nur ein erheblicher aufwand ist, sondern auch äußerst unflexibel...;(

hat sich erledigt. Habe durch $out[$table]= $table; eine Endlosschleife produziert...

So geht´s

function readTCA($table = 'pages', &$out){
  if (!isset($out[$table])) {
  $out[$table]= $table;
  $DATA = $GLOBALS['TCA'][$table]['columns'];
    if (is_array($DATA)) {
      foreach ($DATA as $key => $value){
        if (!$this->exportTest($key)){
 	  $table = $DATA[$key]['config']['foreign_table'];
 	  if (is_array($DATA[$key]['config'])){
	    foreach ($DATA[$key] as $key=>$value){
	      $out[]=$DATA[$key]= $value;
	    }
	  }
 	  $void = $this->readTCA($table, $out);
        }
      }
    }
  }
  return $out;
  }
}