dynamisches Layout
dynamisches Layout
Hallo,
ist es möglich auf anderer Weise dynamisch Content auf Layouts zu platzieren als mit Modulen?
Mein Problem:
Ich möchte an mehreren Stellen im Head den Titel und auch die URL der aktuellen Seite sowie an diversen Stellen im Body dynamisch Klassennamen (für CSS) platzieren. Mit Modulen ist das sehr umständlich.
Ich würde mich freuen, wenn es eine Lösung gäbe.
ist es möglich auf anderer Weise dynamisch Content auf Layouts zu platzieren als mit Modulen?
Mein Problem:
Ich möchte an mehreren Stellen im Head den Titel und auch die URL der aktuellen Seite sowie an diversen Stellen im Body dynamisch Klassennamen (für CSS) platzieren. Mit Modulen ist das sehr umständlich.
Ich würde mich freuen, wenn es eine Lösung gäbe.
Ich weiß nicht, wie tief du in Contenido drinsteckst und "wie dynamisch" du es willst, denn du musst dir ein eigenes Modul schreiben. Aber mal nachfolgend n Ansatz. Kann auch sein, dass schon was adäquates im Forum rumfliegt.
Modul müsste einfach nur im input ne Variable definierbar machen, nach der Du Dein css selektierst:
und im output muss ein switch oder if rein
Das Modul setzt du in den header und kannst dann, je nachdem was du im switch/if definiert hast direkt, in die tags reinparsen wie meinetwegen
Also am Besten wär's du definierst unterschiedliche externe css files, die du in dem Modul auswählst.
Modul müsste einfach nur im input ne Variable definierbar machen, nach der Du Dein css selektierst:
Code: Alles auswählen
echo "<select name='"."CMS_VAR[10]"."'>";
echo "<option value=''>keine Auswahl</option>";
echo "<option value='A'"; if( "CMS_VALUE[10]" == "A" ) { echo " selected"; } echo ">css A</option>";
echo "<option value='B'"; if( "CMS_VALUE[10]" == "B" ) { echo " selected"; } echo ">css B</option>";
echo "<option value='C'"; if( "CMS_VALUE[10]" == "C" ) { echo " selected"; } echo ">css C</option>";
echo "<option value='D'"; if( "CMS_VALUE[10]" == "D" ) { echo " selected"; } echo ">css D</option>";
echo "</select>";
Code: Alles auswählen
if( "CMS_VALUE[10]" == "A" ) { css-Defintion für A } else { usw }
Code: Alles auswählen
<div class="<?=$cssdefinition;?>">bla</div>
Für mehr Rechtschreibung im Netz:
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Gebe unblack recht!!!!
Externe CSS-Datei und dann separieren.
wie bei style.css für das Konstrukt und Extras (Menü, Rss, Infoboxen, Teaser) und tiny.css für die Definitionen im Content-Bereich (H[1-9],p,a,table...).
Wenn ein Farbschema herauskommen soll semtlichen dynamischen Farben aus der style.css und tiny.css raus lassen und in die extra, über das Modul dfinierte CSS-Datei setzen.
INPUT
OUTPUT - im header
Als keines Betthüpfelcher mal den Code gekürzt ...

Hatte heute auch eine ähnliche Idee für ein modul das mir div. Sprachspezifischen Mandanten einstellungen macht. Mit auslesen des css und js Verzeichnis. Und klassifizierung der CSS-Datei (Screen, Print, Default, Handheld ...). Gucken ob ich das morgen zusammen haue.
Externe CSS-Datei und dann separieren.
wie bei style.css für das Konstrukt und Extras (Menü, Rss, Infoboxen, Teaser) und tiny.css für die Definitionen im Content-Bereich (H[1-9],p,a,table...).
Wenn ein Farbschema herauskommen soll semtlichen dynamischen Farben aus der style.css und tiny.css raus lassen und in die extra, über das Modul dfinierte CSS-Datei setzen.
INPUT
Code: Alles auswählen
$aCSS_files = array("file_rot.css","file_blau.css","file_gruen.css","file_gelb.css");
echo '<select name="'."CMS_VAR[10]".'" class="text_medium">';
echo '<option value="">keine Auswahl</option>';
foreach( $aCSS_files as $sCSS_file ) {
echo '<option value="'.$sCSS_file.'"'.( "CMS_VALUE[10]" == $sCSS_file ? " selected":'').'>'.$sCSS_file.'</option>';
}
echo "</select>";
Code: Alles auswählen
<?php echo ("CMS_VALUE[10]" ? '<link rel="stylesheet" href="css/'."CMS_VALUE[10]".'" type="text/css" media="screen">':''); ?>
Als keines Betthüpfelcher mal den Code gekürzt ...

Hatte heute auch eine ähnliche Idee für ein modul das mir div. Sprachspezifischen Mandanten einstellungen macht. Mit auslesen des css und js Verzeichnis. Und klassifizierung der CSS-Datei (Screen, Print, Default, Handheld ...). Gucken ob ich das morgen zusammen haue.
Zuletzt geändert von OliverL am Mi 4. Jun 2008, 07:51, insgesamt 1-mal geändert.
(Immer wieder überraschend wie viele sich hier im Forum beteiligen)
Als Basis sicher auch gut (was ich so in der codierten XML-Datei gesehen hab).
Fehlt nur die Auswahl des media-Type dann wäre es schon optimal für mehrere CSS-Files.
Für ein normales Farbschema würde ich unblack's (bzw. meine darauf aufsetzende) Variante nehmen da dann eine Datei ausreicht.
Oder im Output von baumpaul den media-Type ergänzen.
mfg OliverL
Als Basis sicher auch gut (was ich so in der codierten XML-Datei gesehen hab).
Fehlt nur die Auswahl des media-Type dann wäre es schon optimal für mehrere CSS-Files.
Für ein normales Farbschema würde ich unblack's (bzw. meine darauf aufsetzende) Variante nehmen da dann eine Datei ausreicht.
Oder im Output von baumpaul den media-Type ergänzen.
mfg OliverL
Zuletzt geändert von OliverL am Fr 10. Okt 2008, 21:23, insgesamt 1-mal geändert.
back to basic
Ja, kann man wie tono schon sagte.
> Quick and dirty <
Wenn du dynamisch diverse Sachen einplegen willst brauchst du aber eine bestimmte Konstante an der du dich orientieren kannst.
s. Beispiel: Logo - hier ist es die $lang (ID der aktiven Sprache)
s. Beispiel: Begrüßungen - hier ist es die aktuelle Stunde in 24er von date()
Individualisierung für Sprachen:
(setzt voraus das entsprechend ein Bild vorhanden ist)
Für zeit gesteuerte Begrüßungen:
(Komplexer)
Man kann sich denn Kompletten Code der einzelnen Seiten auch in der DB-Tabelle con_code anschen (hier wird diese gecacht).
Der gecachte Code wird behandelt wie eine PHP-Datei.
Somit ist alles das möglich was in PHP möglich ist.
mfg Oliver
Ja, kann man wie tono schon sagte.
> Quick and dirty <
Wenn du dynamisch diverse Sachen einplegen willst brauchst du aber eine bestimmte Konstante an der du dich orientieren kannst.
s. Beispiel: Logo - hier ist es die $lang (ID der aktiven Sprache)
s. Beispiel: Begrüßungen - hier ist es die aktuelle Stunde in 24er von date()
Individualisierung für Sprachen:
(setzt voraus das entsprechend ein Bild vorhanden ist)
Code: Alles auswählen
<img src="images/logo_lang_<?php echo $lang; ?>.jpg">
(Komplexer)
Code: Alles auswählen
<?php
$sTime_h = date("G");
if( $sTime_h >= 3 and $sTime_h <= 10 ) echo "Guten morgen!";
elseif( $sTime_h > 10 and $sTime_h <= 15 ) echo "Mahlzeit!";
elseif( $sTime_h > 15 and $sTime_h <= 21 ) echo "Nabend!";
elseif( ( $sTime_h > 21 and $sTime_h <= 24 ) or ( $sTime_h > 0 and $sTime_h < 3 ) ) echo "Nacht!";
?>
Man kann sich denn Kompletten Code der einzelnen Seiten auch in der DB-Tabelle con_code anschen (hier wird diese gecacht).
Der gecachte Code wird behandelt wie eine PHP-Datei.
Somit ist alles das möglich was in PHP möglich ist.
mfg Oliver
Ich habe da neulich n sehr seltsamen Effekt beobachtet (kann auch sein, dass der schon mal hier diskutiert wurde). Ich hatte n sehr langen switch direkt im Layout. Ab einer bestimmten Zeichenzahl zwischen <? und ?> hat er das Layout abgeschossen. D.h., es wurde gespeichert, aber nicht mehr im Layout-Editor angezeigt.
Nachdem wir alles in ein Modul gepackt haben, ging es.
Nachdem wir alles in ein Modul gepackt haben, ging es.
Für mehr Rechtschreibung im Netz:
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Interessant. Hab ich noch nichts davon gehöhrt, klingt aber nach einem Fehler bzw. einer Beschränkung der PHP-regexp Unterstützung. Vielleicht gehts mit einer anderen PHP-Version.unblack hat geschrieben:Ab einer bestimmten Zeichenzahl zwischen <? und ?> hat er das Layout abgeschossen.
Bis dann
Tono
Tono
Danke für die Antworten.
Die Lösung mit den dynamisch erstellten Links auf CSS-Dateien ist nicht das was ich wollte.
Eventuell ist es besser, weil php und html getrennt bleiben.
Mein Problem war, dass ich viele automatisch zu generierende Daten möglichst zentral (in einem Modul) erstelle und dann an diversen Stellen im Layout platziere und nicht für jede der Daten ein extra Modul benötige. Das war evtl. nicht so auf den Punkt formuliert.
Ich mache es jetzt so, dass ich ein Modul habe, welches die Daten erzeugt und in Konstanten speichert. Diese lese ich dann im Layout aus (mit <? echo KONSTANTE;?>). Das funktioniert auch so. Mit zu langem php-code im Layout hatte ich auch Probleme.
Wenn es noch eine bessere Möglichkeit gibt, bin ich offen dafür.
Vielen Dank nochmal an alle.
Die Lösung mit den dynamisch erstellten Links auf CSS-Dateien ist nicht das was ich wollte.
Eventuell ist es besser, weil php und html getrennt bleiben.
Mein Problem war, dass ich viele automatisch zu generierende Daten möglichst zentral (in einem Modul) erstelle und dann an diversen Stellen im Layout platziere und nicht für jede der Daten ein extra Modul benötige. Das war evtl. nicht so auf den Punkt formuliert.
Ich mache es jetzt so, dass ich ein Modul habe, welches die Daten erzeugt und in Konstanten speichert. Diese lese ich dann im Layout aus (mit <? echo KONSTANTE;?>). Das funktioniert auch so. Mit zu langem php-code im Layout hatte ich auch Probleme.
Wenn es noch eine bessere Möglichkeit gibt, bin ich offen dafür.
Vielen Dank nochmal an alle.
Na für so was nehme ich die html-templates (dazu sind die ja da) mit Platzhaltern für Variablen, die dann vom Modul entsprechend geparst werden.
Für mehr Rechtschreibung im Netz:
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
layout != html-templates
Im Layout definierst du dein HTML-Grundgerüst (mit html, body usw).
Dann nimmst du den Teil, der später dynamisch sein soll von/bis aus dem Layout raus und packst ihn in ein neues html-template und setzt an die "dynamischen" Stellen Platzhalter für die Variablen
Dann setzt du im Modul output ne neues template
ersetzt die vars in deinem switch
und generierst den output
Zentraler und sauberer kannst du es nicht machen. Ist aber grad aus dem Gedächtnis hingeschmiert und draußen lärmt eine schreckliche Blaskapelle, daher übernehme ich grad keine Verantwortung für das was ich schreibe 
Im Layout definierst du dein HTML-Grundgerüst (mit html, body usw).
Dann nimmst du den Teil, der später dynamisch sein soll von/bis aus dem Layout raus und packst ihn in ein neues html-template und setzt an die "dynamischen" Stellen Platzhalter für die Variablen
Code: Alles auswählen
<p>{VARIABLE_A}</p>
Code: Alles auswählen
// generate html output
cInclude('classes', 'class.template.php');
if (!is_object($itpl)) {
$itpl = new Template;
}
$itpl->reset();
Code: Alles auswählen
switch( "CMS_VALUE[10]" ) {
case 'A' :
$itpl->set('s', 'VARIABLE_A', "wert");
$itpl->set('s', 'VARIABLE_B', "wert");
break;
case 'B' :
$itpl->set('s', 'VARIABLE_A', "wert2");
$itpl->set('s', 'VARIABLE_B', "wert2");
}
Code: Alles auswählen
$itpl->generate($cfgClient[$client]["path"]["frontend"].'templates/meintemplate.html');

Für mehr Rechtschreibung im Netz:
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
richtig: wäre, falsch: währe
richtig: Standard, falsch: Standart
richtig: Paket, falsch: Packet
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
Er schrieb der switch war im Layout. Das Layout wird geregexpt (<-- gibts das VerbOliverL hat geschrieben: wird nicht der gesamte Code durchs eval() ausgegeben?
wo sollen denn da eine RegEx sein?
(Wenn ich weiss wo ich schauen muss guck ich mir das RegEx-Muster mal an)

Bis dann
Tono
Tono