• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Rendern von Content

Tronjer

Senior HTML'ler
Wieder mal eine konzeptionelle Frage.

Ich habe hier eine Website mit vielen Unterseiten, die bezüglich Aufbau und Content weitestgehend identisch sind. Sie unterscheiden sich lediglich im Hinblick auf ihre URLs, Meta-Tags und SEO-Texte. Um Redundanzen zu vermeiden, habe ich eine layout.phtml geschrieben, welche die einzelnen Module (Nav, Footer, etc.), sowie die Views/Partials mit den SEO-Texten - korrespondierend zur URL - inkludiert.

Nun will ich die Struktur so gestalten, dass auch Marketing-Leute ohne Entwicklerkenntnisse weitere Unterseiten ergänzen können, und aus dem Grunde sollen alle Inhalte - also HTML-Texte, Variablen für Seitentitel, etc., - in einer einzigen Datei abgelegt werden. Normaler Weise würde ich dazu etwas mit Markdown und einer Template-Engine bauen, allerdings scheidet die Verwendung zusätzlicher Module ebenso wie Frameworks und CMS aus.

Insofern habe ich für jede Unterseite eine PHP-Datei angelegt, in der sowohl Variablen als auch HTML stehen. Das sieht etwa so aus:
HTML:
<? $page_titel = "Foo Bar"
// weitere Variablen
?>
<div="baz"> Viel HTML </div>

Womit wir uns der eigentlichen Frage nähern. Nachfolgend habe ich einen Navigation-Helper geschrieben, der aus dem Unterseiten-Verzeichnis die Dateinamen als Link-Ziele übergibt und aus den in den Dateien angelegten Variablen die Link-Texte erstellt:
PHP:
<ul>
  <? foreach (new DirectoryIterator('./includes/seo') as $fileInfo):
      if($fileInfo->isDot()) continue;
      ob_start();
      include('seo/' . $fileInfo->getFilename());
      ob_end_clean(); ?>
      <li>
        <a href="<? echo substr($fileInfo->getFilename(), 4); ?>">
          <? echo $seo_header ?>
        </a>
    </li>
  <? endforeach; ?>
</ul>

Das funktioniert auch, ist aber nicht besonders sauber, weil bei jeder Iteration eine komplette Datei eingelesen und deren HTML-Output mit ob_start() / ob_end_clean() unterdrücken werden muss. Deshalb die Frage, ob es dafür nicht eine elegantere Lösung gibt.

Mit AJAX wüsste ich, wie ich nur auf Teile einer Datei zugreife, aber PHP ist vom Ansatz her leider unterschiedlich zu JavaScript. :(
 
Zuletzt bearbeitet:
Werbung:
Es ist fast 6 uhr morgends und dementsprechend schwer ist dein Text geade zu verstehen. Ich will es aber trotzdem versuchen.

Sie wie es sich für mich anhört, hast du die eigentlichen Inhalte deiner Homepage schon genau definiert. Kommst aber, so langsam, an den Punkt dem dem du gerne das gesammte Template beeinflussen möchtest.
Falls ich richtig liege empfiehlt es sich, eine extra schicht der Abstraktion einzubauen. Ich kann es selbst noch nicht genau erklären, da ich auch erst seit 2 - 3 Monaten damit arbeite aber ich versuche es einmal in code auszudrücken.

Was du meiner Meinung nach brauchst ist eine Klasse, welche sich um die Komplette ausgabe kümmert.
Du willst das eine HTML Datei ausgegeben wird. HTMLDocument, du willst, dass z.b. ein XML Dokument ausgegeben wird XMLDocument, usw.

Diese Klassen kümmern sich um die komplette handhabung des jeweiligen Templates. (Ermöglicht übrigens auch wunderbar mehrere Templates in einem System handzuhaben)

Deine Views (sorry falls ich falsch liege aber ich gehe davon aus, dass du MVC conform programmierst) können also intern ungefähr so etwas schreiben

PHP:
$oDocument = System::getDocument();
$oDocument->setMeta('name', $this->sCustomMetaEntry...);
$oDocument->includeScript('path/to/script/only/for/this/site.js');
// etc

Auf diesem Wege kannst du für jede Seite Mechanismen einbauen um die Marketing leute glücklich zu machen. :)
Würde dir gerne noch tiefer gehende Tipps geben, aber erst einmal würde ich gerne wissen ob diese Idee geholfen hat.

lg
 
Danke für die Antwort, aber das war es nicht, was ich meinte. Es handelt sich hier um eine bestehende, statische Website, dich ich dynamisieren und auf PHP umbauen will. Es gibt kein MVC-Framework, keine Controller/Action und keine Datenbank.

Vereinfacht gesagt habe ich hier eine Site mit 20 Views. Jeder View benötigt 3 Variablen und einen HTML-Container mit statischem Text. Mangels Controller könnte ich alle Variablen in einer separaten Datei mittels einer Switch-Case-Abfrage oder mehrdimensionalen Arrays speichern. Das würde aber ein sehr langes Konstrukt, mit jedem neuen View unübersichtlicher und schwerer zu lesen bzw. leichter zu zerstören für Leute, die zwar einfache HTML-Tags lesen können, aber keine Programmiererfahrung besitzen. Aus dem Grunde will ich die zu einem View gehörigen Variablen und HTML-Texte in jeweils einer gemeinsamen Datei zusammenfassen. Mit dem Setzen von drei Stringvariablen kommt auch ein Einsteiger zurecht.

Mein oben geposteter Navigation-Helper macht folgendes:
Code:
-> Lies alle Dateinamen der Views aus dem entsprechenden Verzeichnis aus
-> Öffne diese Dateien und suche darin eine Variable
-> Erstelle aus beidem eine Navigation

Das funktioniert auch, weil ich einen Ausgabepuffer verwende, der die Ausgabe des in den Dateien vorhandenen HTML-Containers unterdrückt. Dieses Konstrukt aus ob_start(); require 'file'; obj_end_clean(); gefällt mir aber nicht besonders.
 
Zuletzt bearbeitet:
Werbung:
Damit das Ganze nicht wieder überlang und unverständlich wird, hier die Frage in einem extra post. ;)

Ich habe 11 Dateien: 10 x view.php und 1 x navigation.php. Die in den Views enthaltenen Variablen sollen für die navigation.php sichtbar sein. Dazu müsste die navigation.php die Views includen.
Code:
navigation.php --includiert--> view_1.php;
                               view_2.php;
                               ......... ;

Ich will es nun aber in die andere Richtung und ohne include() lösen. Die view.php soll ihre Variablen für die navigation.php sichtbar machen, und natürlich dürfen die Variablen dabei nicht in den globalen Namespace wandern.
Code:
navigation.php <--ist_sichtbar_in-- view_1.php;
                                    view_2.php;
                                    ......... ;

In einem MVC-Framework hätten alle 10 Views einen gemeinsamen Controller und für jeden View gäbe es darin eine eigene Action, über die sich die Sichtbarkeit der Variablen steuern ließe.

Aber ich habe kein Framework, und die Site soll ohne Controller und Actions auskommen. Ich suche hier auch keinen Code, sondern nur einen konzeptionellen Ansatz.
 
Zuletzt bearbeitet:
Zurück
Oben