Teil 6 - Trennen Sie den Programmcode vom Text. Dieser Beitrag zeigt Ihnen wie Sie dies mit wenigen Zeilen Code realisieren und reine Textbausteine erzeugen.
Das bisherige PHP-Rahmenwerk um die freie Template Engine Smarty funktioniert schon sehr gut. Etwas nachteilig ist allerdings noch die Tatsache, das die Textbausteine immer noch mit wenigen PHP-Variablen vermischt sind. In diesem Teil der Beitragsreihe geht es darum, den Text vollständig von den Templatevariablen zu trennen.
01 <?php 02 $titel_var = 03 "Das ist der Titel Beitrag A"; 04 05 $anleser_var = 06 "Beitrag A ist der erste Beispieleitrag"; 07 08 $inhalt_var = 09 "<p>Der Inhalt des Beitrags A - der Haupttext.</p>"; 10 11 $autor_var = "Oliver Lohse"; 12 $mail_var = "moc.liamg@tset"; 13 $datum_var = "12-2019"; 14 $footer_var = "(c) Oliver Lohse"; 15 ?>
So oder ähnlich (Coding oben) sieht der Content Ihres Templates aus, der Beitragstext ist bestimmten Templatevariablen zugewiesen in denen er später zur Laufzeit angezeigt werden soll. Die Mischung aus PHP und Beitragstext ist etwas hinderlich beim schreiben von Inhalt, daher müssen Sie dies jetzt anpassen. Der neue Dateiaufbau ist nun wie folgt:
01 Das ist der Titel Ihrer Seite 02 --- 03 Hier kommt der Anleser des Beitrags 04 --- 05 Der eigentliche vollständige Beitragstext 06 --- 07 Name des Autors 08 --- 09 Datum 10 --- 11 Mailadresse 12 --- 13 URL des vorangegangenen Beitrags 14 --- 15 URL des folgenden Beitrags 16 --- 17 URL zum Index bzw. Home
Alle PHP relevanten Attribute sind aus dem Inhalt der Datei verschwunden. Die Zuweisung der Textbausteine zu den Templatevariablen muss an anderer Stelle erfolgen, er findet ab sofort in der index.php statt.
01 <?php 02 require_once('libs/Smarty.class.php'); 03 $smarty = new Smarty(); 04 05 $smarty->template_dir = 'templates'; 06 $smarty->compile_dir = 'templates_c'; 07 $smarty->config_dir = 'configs'; 08 09 // --------------------------------------------------------------------------- 10 // In Abhaengigkeit vom Eingabeparameter einen anderen Text einbinden 11 // Ein Default-Beitrag wird zuerst geladen falls keine Eingabe erfolgt 12 // dies wird dann vom darauffolgenden IF ueberschrieben. 13 // --------------------------------------------------------------------------- 14 if(isset($_GET['artikel'])) { 15 $artikel = $_GET['artikel']; 16 } else { 17 $artikel = 'home'; 18 } 19 20 $fileContent = file_get_contents ("texte/".$artikel.".php"); 21 $textBausteine = explode("---", $fileContent); 22 23 // --------------------------------------------------------------------------- 24 // Die Template-Vars (links ) mit den Smarty-Template-Vars (rechts) 25 // verbinden 26 // --------------------------------------------------------------------------- 27 28 $footer_var = '© Developed by Oliver Lohse with Smarty Template Engine and Bootstrap CSS'; 29 30 $smarty->assign('titel_tmpl', $textBausteine[0]); 31 $smarty->assign('anleser_tmpl', $textBausteine[1]); 32 $smarty->assign('inhalt_tmpl', $textBausteine[2]); 33 $smarty->assign('autor_tmpl', $textBausteine[3]); 34 $smarty->assign('datum_tmpl', $textBausteine[4]); 35 $smarty->assign('mail_tmpl', $textBausteine[5]); 36 $smarty->assign('beitrag_back_tmpl', $textBausteine[6]); 37 $smarty->assign('beitrag_next_tmpl', $textBausteine[7]); 38 $smarty->assign('home_tmpl', $textBausteine[8]); 39 40 $smarty->assign('footer_tmpl', $footer_var); 41 42 // --------------------------------------------------------------------------- 43 // Das Template starten 44 // --------------------------------------------------------------------------- 45 $smarty->display('artikel.php'); 46 47 ?>
Die Zeile 20 und 21 liest die Datei, die bekanntlich als Parameter an die index.php übergeben wird, als vollständigen String ein. Der anschließende explode splittet den Inhalt anhand des Delimiters --- in je einen Array-Slot auf. Jeder einzelne Slot des Arrays wird dann von Zeile 30 bis 38 den Templatevariablen zugewiesen.
Anmerkung - Sie können als Text-Trenner statt des --- auch jedes andere Spezialzeichen nutzen, wichtig ist, das dieses nicht im regulären Text auftauchen sollte.