Page 1 of 5

Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 11:04
by Marceau
Hallo liebe Gemeinde.
Gibt es eigtl die Möglichkeit das Haupt-Template in eine HTML-Datei auszulagern und zu parsen, anstatt in der DB zu speichern, ohne alle Funktionsmöglichkeiten dadurch zu verlieren (Replacement-Tags etc) ?
Ich denke da besonders an die Möglichkeit der Versionierung, was auf dem "normalen" Weg ja nicht möglich ist

Für Tipps wäre ich dankbar

Viele Grüße aus LE

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 12:26
by Oliver Georgi
Bisher ist das auf einfachem Weg so nicht vorgesehen, aber mittels Replacement Tags lässt sich das über Frontend Render ganz gut abbilden. So löse ich vieles in Verbindung mit HTML Basiskonstrukt und diversen Ersetzern, häufig dann in Form von HTML-Kommentaren.

Dann ist es leichter, Template-Logik auszulagern, bzw. komplexer zu gestalten.

Nicht zu vergessen die Conditional Block-Elemente:

Code: Select all

[HEADER]{HEADER}[/HEADER][HEADER_ELSE]<!--NO-HEADER-->[/HEADER_ELSE]…
Das ermöglicht eben auch vieles der Form:

Code: Select all

<div class="row">
[LEFT]
    <div class="col-md-4">
        {LEFT}
    </div>
[/LEFT]
    <div class="[LEFT]col-md-8[/LEFT][LEFT_ELSE]col-md-12[/LEFT_ELSE]">
        {CONTENT}
    </div>
</div>

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 15:04
by Old Boy
Irgendwann hatte der "gute alte" Flip-Flop mal ein kleines Script bereitgestellt, welches ich für die Entwicklungszeit von Internetsites gerne benutze.

In den Ordner .../template/inc_sript/frontend_init kopiere ich folgende Datei inject-code-to-main.php

Code: Select all

<?php
/* ********************************************************************************************
   Backend Template Replacer fuer den Bereich MAIN

   Ersetzt das Haupt-Templates mit dem Inhalt der Datei:
      template/inc_script/template/inject_to_main.tmpl

   Wird im bereich HAUPT des Templates (LEDIGLICH) der Text 
      {INJECT_TO_MAIN} 
   eingetragen, sucht phpwcms die Datei 
      .../template/inc_script/template/inject_to_main.tmpl 
   und setzt den dort vorhandenen Quelltext in den HAUPT-Bereich des Templates ein.

   So kann mit einem FTP-faehigen externen Editor diese Datei uebersichtlich bearbeitet werden.
   
   Ist dann die Entwicklung des Haupt-Templates optimiert/abgeschlossen, wird der Datei-Inhalt 
   in das Template kopiert.
   
   KH 07.01.2010
   ******************************************************************************************** */
 
// --------------------------------------------------------------------------------------------
// obligate check for phpwcms constants
  if (!defined('PHPWCMS_ROOT')) {
    die("You Cannot Access This Script Directly, Have a Nice Day."); }
// --------------------------------------------------------------------------------------------
 
if ($block['maintext'] == '{INJECT_TO_MAIN}')
    $block['maintext']  = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/inject_to_main.tmpl');

if ($block['maintext'] == '{INJECT_TO_MAIN_VARIANTE_2}')
    $block['maintext']  = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/inject_to_main_variante_2.tmpl');

if ($block['maintext'] == '{INJECT_TO_MAIN_WAS-WEISS-ICH}')
    $block['maintext']  = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/inject_to_main_was-weiss-ich.tmpl');

// Wenn der HAUPTBEREICH im Template absolut LEER ist, also kein RT verwendet wird!
if (!empty($block['maintext'])) { dumpVar($block['maintext']); }
    $block['maintext']  = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/custom.tmpl');

?>
Zusätzlich erstelle ich im selben Ordner einen Unterordner mit Namen .../template/inc_sript/template , in den dann eine beliebig benannte tmpl-Datei gelegt wird (Name muss im Script natürlich angepasst sein!), die den HTML-Code enthält, der in den HAUPT-Bereich der Vorlage "gebeamt" werden soll.

In den HAUPT-Bereich der Vorlage trage ich noch das Replacement {INJECT_TO_MAIN} ein , damit der Inhalt der zugeordneten Datei gefunden wird.

Wenn ich mir mehrere Replacements {INJECT_TO_MAIN_VARIANTE_2} ... {INJECT_TO_MAIN_WAS_WEISS_ICH} ... und die zugehörenden Dateien anlege, kann ich mir mehrere Varianten parallelen jonglieren und bei Bedarf die Verschiedenen Replacements und damit Dateiinhalte nutzen!

So kann ich mit meinem FTP fähigen HTML-Editor flott arbeiten, bis alles steht! Da klappt nicht immer die Fensterbreite zusammen ;)

CSS-Dateien und JS-Scripts spreche ich natürlich über

Code: Select all

<!-- CSS: /* Hier muss der CSS-Dateiname oder die CSS-Anweisung rein */ -->
<!-- JS: /* Hier muss der JS-Dateiname oder die JS-Anweisung rein */ -->
auch gleich in diesem externen Template an, sodass ich dazu nicht mehr ins Backend muss.

Ist alles fertig kopiere ich den Inhalt der genutzten Datei in den Hauptbereich des Backends und alles ist "übergabebereit"!

Ob das allerdings wirklich "wasserdicht" ist, weiss ich nicht, aber in den letzten Jahren hat es damit keine Probleme gegeben!

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 16:27
by Oliver Georgi
Nicht mit PHP Dateien an der Stelle arbeiten! Das ist falsch, da der Inhalt nur als Text übernommen wird.

Normalerweise reicht dann:

Code: Select all

$block['maintext'] = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/custom.tmpl');

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 16:49
by update
Ich hatte das öfters auch auf die von Old Boy beschriebene Weise gemacht - die Änderung wird gleich mal getestet.
Jetzt ist das mal auf den Punkt gebracht!
(So wird da zwar immer noch kein Templatetransporter draus -der wäre schon ganz schön schrill- ;) aber dennoch: Für die Entwicklung ist das prima.)

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 17:37
by update
Was mir gerade auffällt: Geht das denn dann auch mit mehreren Templates? Manchmal braucht man sowas ja ;)

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 18:02
by update
Hmmm, ich glaube, das war doch noch nicht ausreichend auf den Punkt, jedenfalls nicht für Doofe... mit der neuen Methode will es nicht. Oder ich appliziere das nicht richtig. Vielleicht hat ja jemand einen Hinweis (den er/sie dann auch gleich hier abwirft)?
== Was wird wo wie eingetragen?

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 18:27
by update
alles klar. :)

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 18:47
by update
update wrote:Was mir gerade auffällt: Geht das denn dann auch mit mehreren Templates? Manchmal braucht man sowas ja ;)
Diese Frage bleibt aber immer noch offen

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 20:02
by Oliver Georgi
prüfe einfach, was bereits in der zu überschreibenden Variable enthalten ist, dann klärt sich Deine Frage von selbst.

Code: Select all

if(!empty($block['maintext'])) {
    dumpVar($block['maintext']);
}
$block['maintext'] = file_get_contents(PHPWCMS_TEMPLATE.'/inc_script/template/custom.tmpl');

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 23:12
by Old Boy
Also, wenn ich das recht verstanden habe,
kann ich eigentlich alles so belassen, lediglich die Dateien bekommen die Endung ".tmpl" anstelle von ".php" ???

Das funktioniert - wie ich soeben getestet habe - natürlich prima!

Für verschiedene Einsatzfälle habe ich dann passende {ReplacemenTags} "kreiert" mit den entsprechenden zugehörigen "Dateien.tmpl"

Jetzt kann ich auch mit mehreren Vorlagen und unterschiedlichen Inhalten arbeiten,
ich brauche ja nur das passende {RT} zu setzen in das Hauptfeld der unterschiedlichen Vorlagen ...
die ziehen sich dann den erforderlichen Inhalt aus meiner zugehörigen .tmpl Datei!

:D

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Wed 13. May 2015, 23:16
by Old Boy
Da fällt mir doch gleich wieder ein, was ich eigentlich seit Jahren hatte fragen wollen:

Wenn ich Datei-Inhalte in den HAUPT Bereich einer Vorlage "einschleusen" kann mit dem Befehl:

Code: Select all

$block['maintext'] = ...
Wie spreche ich denn dann die anderen Felder der Backenvorlagen an,
insbesondere den HEAD und den FEHLER Bereich :?:
Das geht doch garantiert auch :idea:

Ach wie einfach wäre da die Zusammenstellung eines vernünftigen phpwcms-Layouts,
wenn man einen "richtig zackigen" HTML-Editor mit allen Snippets und "Pipapo" verwenden könnte!!!

phpwcms Template-Entwicklung "so fix wie Kuchenbacken mit Backmischungen" :lol:

Ja, ja, vom Template-Transporter will ich gar nicht mehr träumen ... das war mal, in einem anderen Jahrtausend !!!

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Thu 14. May 2015, 00:28
by Old Boy
OK... nach Jahren endlich wieder gefunden: http://www.phpwcms-howto.de/wiki/doku.p ... n/vorlagen

Damit kann man ja mal probieren...

htmlhead
maintext
errortext


Na wunderbar, damit funktioniert's jetzt schonmal "super" :D


Tante EDIT meint:
Es wäre natürlich erstklassig, wenn man all die verschiedenen Blockinhalte über eine einzige externe Datei "einschleusen" könnte!

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Thu 14. May 2015, 06:19
by Oliver Georgi
Nur maintext hat am Ende Relevanz. Die anderen Felder aggregieren nur und brauchen nicht gefüllt zu werden — abgesehen von errortext, das einen Fallback darstellt.

Re: Haupttemplate nicht in DB speichern sondern in Datei

Posted: Sun 7. Jun 2015, 00:26
by Old Boy
Ich hab' hier noch mal nachgearbeitet: http://forum.phpwcms.org/viewtopic.php?p=144706#p144706

Damit sollte "updates" Frage nach mehreren Varianten eigentlich beantwortet sein ... hoffe ich!?