Rekursiv Platzhalter in Sub-Templates eines Webseite finden

NTDY

Erfahrenes Mitglied
Ich habe eine Webseite, die ich mit mehreren Sub-Templates (in Dateiform) bestücken möchte.

Die jpg-Zeichnung zeigt, wie das Endergebnis aussehen soll.

  1. Die Großbuchstaben A,B,...,Q sind Inhaltselemente
  2. Bezeichnungen wie co2(1), co2(2), green(1), blue(2), ... sind alles Namen für HTML-Template Dateien innerhalb der Datenbank
  3. Bezeichnungen wie g1, l1, l2, b1 sind die Platzhalter, die innerhalb der HTML-Template Datei reserviert sind, in die die Inhalte hinein sollen.
Die DB-Struktur ist wie folgt:
id - ID
parentid - ID des Vaters / Mutter
position - die Position des Inhalts von oben (ab 0) nach unten
typ - Template, Inhalt
platzhalter - steht nur bei Inhalten. Zeigt in welchem Platzhalter der Inhalt stehen soll
titel - Bezeichner
zusatz - hier steht der Pfad zur HTML-Template Datei

Die zip-Datei enthält die derzeitige PHP-Datei, das SQL-Schema und einige Subtemplates

Die baum.php zeigt bereits, wie das Resulat aussehen sollte. Es fügt also schon die Inhalte innerhalb der Template Datei ein (berücksichtigt aber nicht die Platzhalter)

Die Funktionen sind wie folgt:
  • hole_template() // holt die Template Datei
  • finde_platzhalter() //findet die Platzhalter, in der Form {#...}
  • hole_inhalt() //holt den Inhalt des Inhaltselements
Problem:
Ich würde nun gern wissen wie ich die Inhalte in die entsprechenden Platzhalter der Subtemplates bekomme? Das sql_array ist ja bereits laut Anfrage nach parentid, platzhalter und position sortiert. Die Inhalte müssen nun in die Platzhalter der jeweiligen Template Datei. Hat jemand einen Lösungsansatz, da ich mit meinen Gedanken bereits verhakt bin.

PHP:
<html>
<head>
<style>
*{
	font-family:"Courier New", Courier, monospace;
	font-size:12px;
	color: #000;
	font-weight:bolder;
}
.CO1, .CO2, .CO3, .green1, .green2, .green3, .blue1, .blue2, .blue3, .light1, .red1, .red2, .red3, .content {
	padding: 10px;
	margin: 10px;
}
.CO1 {		background-color:#CCC;	}
.CO2 {		background-color:#EEE;	}
.CO3 {		background-color:#BBB;	}
.green1 {	background-color:#009966;}
.green2 {	background-color:#3C3;	}
.blue1 {	background-color:#09F;	}
.blue2 {	background-color:#66CCFF;}
.blue3 {	background-color:#9CF;	}
.light1 {	background-color:#FF0;	}
.red1 {		background-color:#903;	}
.red2 {		background-color:#990000;}
.content {	background-color:#EEE;	width: 100px; border: 3px dotted #000; }
</style>
</head>

<body>
<?php
	$tpl_placeholder_val = 
	$db_host = 'localhost';
	$db_name = 'baum';
	$db_user = 'root';
	$db_password = '';
	 
$connect = mysql_connect($db_host,$db_user,$db_password) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());

$query = "SELECT * FROM baum ORDER BY parentid ASC, platzhalter ASC, position ASC;";
$sql = mysql_query($query) or die(mysql_error());


while (($row = mysql_fetch_assoc($sql)) !== false) {
   	$sql_array[$row['parentid']][$row['id']] = array('id'=>$row['id'],'parentid'=>$row['parentid'],$row);
}

$ausgabe = function_neu_rec($sql_array,0);
echo $ausgabe;

/* Neue Version */
function function_neu_rec($array,$zaehler){
	$sammeln = '';
	/**
	 * Durchlaufe nun alle Child-Elemente von dem derzeitigen Parent 
	 */
	foreach($array[$zaehler] as $c_key=>$c_val){
		/**
		 * Es gibt noch Unterelemente von diesem Element, also Rekursion aufrufen
		 */
		if($array[$zaehler][$c_key][0]['typ']=='template'){				
			$temp = function_neu_rec($array,$c_key);
			
			/**
			* Hole den Inhalt der Template Datei
			*/
			$hole_template = hole_template($array[$zaehler][$c_key][0]);
			/**
			* Finde alle Platzhalter in der Template Datei
			* Bei den Inhalten steht der Platzhalter in die der Inhalt hinein soll
			* Anhand der Parent ID weiß der Inhalt, in welchem Template er sich befinden soll
			*/
			$platzhalter_im_template = finde_platzhalter($hole_template);
			
			//echo "<textarea>".$hole_template."\n".print_r($platzhalter_im_template)."</textarea>";
			
			$inhalte = "<div class=\"".$array[$zaehler][$c_key][0]['titel']."\">".$temp."</div>";
			//$inhalte .= "Wrappe nun mit ".$array[$zaehler][$c_key][0]['titel'];
			$sammeln .= $inhalte;
		/**
		 * Es gibt keine Unterelemente, da ich beim Inhalt angelangt bin
		 */
		}else{
			$inhalte = '<div class="content">'.$array[$zaehler][$c_key][0]['titel'].' ('.$array[$zaehler][$c_key][0]['platzhalter'].')</div>';
			$sammeln .= $inhalte;
		}
	} 
	return $sammeln;
}

function hole_inhalt($template){
	return '<div class="content">'.$template['titel'].' ('.$template['platzhalter'].')</div>';
}

function hole_template($template){
	return file_get_contents($template['zusatz']);
}

function finde_platzhalter($html_datei){
		$gefunden_array = array();
		
		preg_match_all('/{#(.*)}/',$html_datei,$gefunden);			
		foreach($gefunden[1] as $gefunden_key=>$gefunden_val){
		    $gefunden_array[] .= $gefunden_val;
		}	
		return $gefunden_array;
}

?>
</body>
</html>
 

Anhänge

  • suche.jpg
    suche.jpg
    298,5 KB · Aufrufe: 9
  • baum.zip
    baum.zip
    4,3 KB · Aufrufe: 10
Zurück