dynamisches Layout

barnholdy
Beiträge: 18
Registriert: Do 13. Mär 2008, 12:18
Kontaktdaten:

dynamisches Layout

Beitrag von barnholdy »

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.
unblack
Beiträge: 77
Registriert: Do 1. Sep 2005, 11:06
Kontaktdaten:

Beitrag von unblack »

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:

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>";
und im output muss ein switch oder if rein

Code: Alles auswählen

if( "CMS_VALUE[10]" == "A" ) { css-Defintion für A } else { usw }
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

Code: Alles auswählen

<div class="<?=$cssdefinition;?>">bla</div>
Also am Besten wär's du definierst unterschiedliche externe css files, die du in dem Modul auswählst.
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.
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL »

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

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>";
OUTPUT - im header

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 ...
8)
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.
tinof
Beiträge: 197
Registriert: Mi 24. Jan 2007, 20:38
Wohnort: Kirchberg / Sa.
Kontaktdaten:

Beitrag von tinof »

Hi,

kann man hier was draus machen ?

http://forum.contenido.org/viewtopic.php?p=88182#88182
Für die Freizeit : www.hobbybrauer.de
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL »

(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
Zuletzt geändert von OliverL am Fr 10. Okt 2008, 21:23, insgesamt 1-mal geändert.
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

zur Ursprungsfrage: Kann man auch ohne Module was dynamisch machen?

Ja, man kann auch einfach php-Code in das Layout schreiben. Das ist manchmal bei einfachen Operationen schneller gemacht als ein neues Modul, ist allerdings nicht so übersichtlich, wie alles in Modulen zu haben.
Bis dann
Tono
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL »

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)

Code: Alles auswählen

<img src="images/logo_lang_<?php echo $lang; ?>.jpg">
Für zeit gesteuerte Begrüßungen:
(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
unblack
Beiträge: 77
Registriert: Do 1. Sep 2005, 11:06
Kontaktdaten:

Beitrag von unblack »

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.
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.
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

unblack hat geschrieben:Ab einer bestimmten Zeichenzahl zwischen <? und ?> hat er das Layout abgeschossen.
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.
Bis dann
Tono
OliverL
Beiträge: 870
Registriert: Do 28. Jun 2007, 09:28
Kontaktdaten:

Beitrag von OliverL »

@tono:
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)
barnholdy
Beiträge: 18
Registriert: Do 13. Mär 2008, 12:18
Kontaktdaten:

Beitrag von barnholdy »

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.
unblack
Beiträge: 77
Registriert: Do 1. Sep 2005, 11:06
Kontaktdaten:

Beitrag von unblack »

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.
barnholdy
Beiträge: 18
Registriert: Do 13. Mär 2008, 12:18
Kontaktdaten:

Beitrag von barnholdy »

Das Problem ist ja das mein Template das Contenido-Layout ist. Ich weiß nicht, ob es beim Aufruf der Module schon aus der Datenbank rausgeholt wurde und im Code verfügbar ist. Sonst macht es ja keinen Sinn. Wenn ja, wie kann man darauf zugreifen?
Das wäre ja eine saubere Alternative.
unblack
Beiträge: 77
Registriert: Do 1. Sep 2005, 11:06
Kontaktdaten:

Beitrag von unblack »

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

Code: Alles auswählen

<p>{VARIABLE_A}</p>
Dann setzt du im Modul output ne neues template

Code: Alles auswählen

// generate html output
cInclude('classes', 'class.template.php');
if (!is_object($itpl)) {
  $itpl = new Template;
}
$itpl->reset();
ersetzt die vars in deinem switch

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");
}
und generierst den output

Code: Alles auswählen

$itpl->generate($cfgClient[$client]["path"]["frontend"].'templates/meintemplate.html');
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 ;)
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.
tono
Beiträge: 574
Registriert: Mo 25. Apr 2005, 20:51
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von tono »

OliverL 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)
Er schrieb der switch war im Layout. Das Layout wird geregexpt (<-- gibts das Verb :?:) um die Container zu finden. Meiner Vermutung nach könnte dort ein Fehler sein, aber ich habs weder ausprobiert noch angeguckt. War eine intuitiv-Diagnose.
Bis dann
Tono
Gesperrt