Umlaufende Sidebars auf Unterseiten
Mit dem "#" als Titel und dem abschließenden Namen in einem Absatz einer Kontextspalte wird die Seite definiert, für die die folgenden Absätze auszugeben sind. Folgt der nächste "#...." Absatz endet die Kontextspalte für die zuletzt definierte Seite.
Die Eingabe "#Seite" gibt dabei aber den Seiteninhalt aus. D.h. alles vor #Seite wird links ausgegeben, alles nach "#Seite" als Titel eines Absatzes wird rechts ausgegeben. Der Text des Absatzes is irrelevant.
D.h. man definiert in der einen verfügbaren Kontextspalte der Hauptseite die Summe aller Absätze aller Unterseiten und der einen Hauptseite und muss dann mit entsprechenden steuernden Absätzen "Titel #" die Ausgabe ggf. unterdrücken.
Note: die Texte in den runden Klammern dienen zur Erläuterung und sind nicht Bestandteil der Absätze.
Beispiel für den Aufbei einer Kontextspalte:
Absatz
Titel: Titel des Absatzes 1
text: Text für Hauptseite (Ausgabe linke Spalte)
Absatz
Titel: Titel des Absatz 2
Text: Texte für Hauptseite (Ausgabe linke Spalte)
Absatz
Titel: #
Text: impressum.php
Absatz
Titel: Titel für den 1. Absatz der Impressum-Seite
text: Text des Absatzes (Ausgabe linke Spalte)
Absatz
Titel: Titel für den 2. Absatz der Impressum-Seite
text: Text des Absatzes (linke Spalte)
Absatz
Titel: #Seite
Text: irrelevant, jetzt wird der Seiteninhalt ausgegeben
Absatz
Titel: #
Text: agb.php (Folgende Sidebar-Absätze nur auf Seite AGB ausgeben)
Absatz
Titel: Titel für den 1. Absatz der AGB-Seite
Text: Text des Absatzes (rechte Spalte)
Absatz
Titel: #
Text: index.php (Absatz für die Hauptseite)
Absatz
Titel: Titel des Absatz 3
Text: Texte für Hauptseite (Ausgabe 1. Absatz in rechter Spalte)
Zum Verständnis: is_output beginnt mit "ja" auf Hauptseiten, und mit "nein" für Unterseiten. Die Routine testet auf "#" als Titel. Der Absatz heißt "nur" # und der zu nutzende Seitenname ist im Absatztext zu hinterlegen. Achtung auf Tippfehler!
Durch "index.php" wird die Haupseite identifiziert, da alle Unterseiten einen anderen Namen haben.
<?php
$seitenname = preg_replace("/^.*\//","",$_SERVER['REQUEST_URI']);
$seitenmame = $_SERVER['REQUEST_URI'];
$in_analyse ='nein'; // Dient nur der Analyse, dann 'ja' eingeben
$seite_ausgegeben='nein';
?>
<cc:if cond="&sidebar.count gt 0">
<?php
$is_output='nein';
if($seitenname=="index.php")
{ $is_output='ja';}
?>
<cc:loop type="sidebar" obj="mysidebar">
<cc:if cond="&mysidebar.caption='#Seite'">
</div>
<div id="content">
<cc:print value="&page.content.text">
<php
$seite_ausgegeben='ja';
?>
<cc:*> Seiten Content Ende </cc:*>
</div>
<div id="sidebar">
<cc:else>
<cc:if cond="&mysidebar.caption='#'">
<?php
$is_output='nein';
$vorgabeseite='<cc:print value="&mysidebar.text">';
if($in_analyse=='ja') {
echo 'Der Absatz enthät:"',$vorgabeseite,
'"! (das ist inkl. HTML-Code!)<br />';
}
$vorgabeseite=substr($vorgabeseite,3,strlen($vorgabeseite)-7);
if($in_analyse=='ja')
{ echo 'Vergleich mit folgendem Teilstring:"',$vorgabeseite,'"!<br />';
echo 'gefundener aktueller Seitenname:"',$seitenname,'"!<br />';}
if($seitenname==$vorgabeseite)
{$is_output='ja';
if($in_analyse=='ja')
{echo 'Das ist ein Treffer. Die Ausgabe beginnt.<br />';}
}
else { if($in_analyse=='ja')
{echo 'Das ist kein Treffer. Es gibt keine Ausgabe!<br />';}}
?>
<cc:else>
<?php
if($is_output=="ja") {
?>
<cc:if cond="&mysidebar.caption">
<h2><cc:print value="&mysidebar.caption"></h2>
</cc:if>
<cc:print value="&mysidebar.text"><br/>
<?php
}
?>
</cc:if>
</cc:if>
</cc:loop>
</div><cc:*> Ende der Sidebar </cc:*>
</cc:if><cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
</body>
</html> <cc:*> Navigation.Ende </cc:*>
Wenn man genau hingesehen at, findet man noch die Variable "$seite_ausgegeben". Die hilft bei fehlenden Sidebars, oder fehlenden "#Seite" eine Zwangsausgabe der Seite durchzuführen. Der folgende Code muss an das Ende der navigation.ccml.
</div><cc:*> Ende der Sidebar </cc:*>
</cc:if><cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
<php
if ($seite_ausgegeben=='nein')
{
</div>
<div id="contentfull">
<cc:print value="&page.content.text">
</div>
}
?>
</body>
</html> <cc:*> Navigation.Ende </cc:*>
Hier wird die Seite dann auch mit Contentfull ausgegeben. Was aber immer noch nicht geht, ist das man auch bei Inhalten in der Kontextspalte ein Style Contentfull verwenden kann. Das geht auch noch mit folgender Erweiterung:
<?php
$seitenname = preg_replace("/^.*\//","",$_SERVER['REQUEST_URI']);
$seitenmame = $_SERVER['REQUEST_URI'];
$in_analyse ='nein'; // Dient nur der Analyse, dann 'ja' eingeben
$seite_ausgegeben='nein';
?>
<cc:if cond="&sidebar.count gt 0">
<?php
$is_output='nein';
if($seitenname=="index.php")
{ $is_output='ja';}
?>
<cc:loop type="sidebar" obj="mysidebar">
<cc:if cond="&mysidebar.caption='#Seite'">
</div>
<div id="content">
<cc:print value="&page.content.text">
<php
$seite_ausgegeben='ja';
?>
<cc:*> Seiten Content Ende </cc:*>
</div>
<div id="sidebar">
<cc:else> <cc:*>ist nicht #Seite </cc:*>
<cc:if cond="&mysidebar.caption='#Seitefull'">
</div>
<div id="contentfull">
<cc:print value="&page.content.text">
<php
$seite_ausgegeben='ja';
?>
<cc:*> Seitemkontekt Ausgabe Ende </cc:*>
</div>
<cc:else> <cc:*>ist weder #Seite noch #S.full</cc:*>
<cc:if cond="&mysidebar.caption='#'">
<?php
$is_output='nein';
$vorgabeseite='<cc:print value="&mysidebar.text">';
if($in_analyse=='ja') {
echo 'Der Absatz enthät:"',$vorgabeseite,
'"! (das ist inkl. HTML-Code!)<br />';
}
$vorgabeseite=substr($vorgabeseite,3,strlen($vorgabeseite)-7);
if($in_analyse=='ja')
{ echo 'Vergleich mit folgendem Teilstring:"',$vorgabeseite,'"!<br />';
echo 'gefundener aktueller Seitenname:"',$seitenname,'"!<br />';}
if($seitenname==$vorgabeseite)
{$is_output='ja';
if($in_analyse=='ja')
{echo 'Das ist ein Treffer. Die Ausgabe beginnt.<br />';}
}
else { if($in_analyse=='ja')
{echo 'Das ist kein Treffer. Es gibt keine Ausgabe!<br />';}}
?>
<cc:else>
<?php
if($is_output=="ja") {
?>
<cc:if cond="&mysidebar.caption">
<h2><cc:print value="&mysidebar.caption"></h2>
</cc:if>
<cc:print value="&mysidebar.text"><br/>
<?php
}
?>
</cc:if><cc:*> check if Titel=# </cc:*>
</cc:if> <cc:*> check if Titel=#Seitefull </cc:*>
</cc:loop>
</div> <cc:*> Ende der Sidebar </cc:*>
</cc:if> <cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
</div><cc:*> Ende der Sidebar </cc:*>
</cc:if><cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
<php
if ($seite_ausgegeben=='nein')
{
</div>
<div id="contentfull">
<cc:print value="&page.content.text">
</div>
}
?>
</body>
</html> <cc:*> Navigation.Ende </cc:*>
Die Syntax wird dann verständlicher, wenn man bedenkt, dass CCML während der Seitengenerierung am PC stattfindet, das PHP aber erst am Server im Moment der Seitenausgabe aktiv wird. D.h. PHP ist hier dynamischer und kann besser in Schleifen reagieren, als CCML. Java würde dann bei der Ausgabe auf dem PC interpretiert, so dass man dann flexible Inhalte der Seite userspezifisch ausgeben könnte. Aber Java kommt hier noch nicht vor.
In rot wurde oben der Einschub für ein neues Kriterium markiert. D.h. mit jeder weiteren Verzweigung auf bestimmte Steuerkriterien in einem Absatz-Titel ist diese rote Struktur zu wiederholen. Also vor der oben roten Block ist der obere rote Block einzufügen und nach der unteren roten Zeile ist eine weitere Zeile als Abschluss der IF-Verzweigung einzufügen. Im neu eingefügten roten Block sind dann die neuen Bedingungen und Verhaltensweisen zu hinterlegen:
<?php
$seitenname = preg_replace("/^.*\//","",$_SERVER['REQUEST_URI']);
$seitenmame = $_SERVER['REQUEST_URI'];
$in_analyse ='nein'; // Dient nur der Analyse, dann 'ja' eingeben
$seite_ausgegeben='nein';
?>
<cc:if cond="&sidebar.count gt 0">
<?php
$is_output='nein';
if($seitenname=="index.php")
{ $is_output='ja';}
?>
<cc:loop type="sidebar" obj="mysidebar">
<cc:if cond="&mysidebar.caption='#Common">
<cc:*> Schleife auf Commonpages ausgeben </cc:*>
<cc:loop type="commonpages" obj="mycommonpage">
<li><a class="blacklink" href="<cc:print value="&mycommonpage.url">"><cc:print
value="&mycommonpage.caption"></a></li>
</cc:loop>
<cc:else> <cc:*>ist nicht #Common </cc:*>
<cc:if cond="&mysidebar.caption='#Seite'">
</div>
<div id="content">
<cc:print value="&page.content.text">
<php
$seite_ausgegeben='ja';
?>
<cc:*> Seiten Content Ende </cc:*>
</div>
<div id="sidebar">
<cc:else> <cc:*>ist nicht #Seite </cc:*>
<cc:if cond="&mysidebar.caption='#Seitefull'">
</div>
<div id="contentfull">
<cc:print value="&page.content.text">
<php
$seite_ausgegeben='ja';
?>
<cc:*> Seitemkontekt Ausgabe Ende </cc:*>
</div>
<cc:else> <cc:*>ist weder #Seite noch #S.full</cc:*>
<cc:if cond="&mysidebar.caption='#'">
<?php
$is_output='nein';
$vorgabeseite='<cc:print value="&mysidebar.text">';
if($in_analyse=='ja') {
echo 'Der Absatz enthät:"',$vorgabeseite,
'"! (das ist inkl. HTML-Code!)<br />';
}
$vorgabeseite=substr($vorgabeseite,3,strlen($vorgabeseite)-7);
if($in_analyse=='ja')
{ echo 'Vergleich mit folgendem Teilstring:"',$vorgabeseite,'"!<br />';
echo 'gefundener aktueller Seitenname:"',$seitenname,'"!<br />';}
if($seitenname==$vorgabeseite)
{$is_output='ja';
if($in_analyse=='ja')
{echo 'Das ist ein Treffer. Die Ausgabe beginnt.<br />';}
}
else { if($in_analyse=='ja')
{echo 'Das ist kein Treffer. Es gibt keine Ausgabe!<br />';}}
?>
<cc:else>
<?php
if($is_output=="ja") {
?>
<cc:if cond="&mysidebar.caption">
<h2><cc:print value="&mysidebar.caption"></h2>
</cc:if>
<cc:print value="&mysidebar.text"><br/>
<?php
}
?>
</cc:if><cc:*> check if Titel=# </cc:*>
</cc:if> <cc:*> check if Titel=#Seitefull </cc:*>
</cc:if> <cc:*> check if Titel=#Seite </cc:*>
</cc:if> <cc:*> check if Titel=#Common </cc:*>
</cc:loop>
</div> <cc:*> Ende der Sidebar </cc:*>
</cc:if> <cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
</div><cc:*> Ende der Sidebar </cc:*>
</cc:if><cc:*> If-Ende auf Abfrage gibt es eine Sidebar </cc:*>
<php
if ($seite_ausgegeben=='nein')
{
</div>
<div id="contentfull">
<cc:print value="&page.content.text">
</div>
}
?>
</body>
</html> <cc:*> Navigation.Ende </cc:*>
Menü ausgeben
Mit dem obigen Code haben wir eine Syntax geschaffen, die die Links auf die Common-Pages, also auf die Unterseiten der Hauptseite, dann ausgibt, wenn ein Absatz in der Kontextspalte mit dem Titel "#Common" auftaucht. Damit läßt sich die Position dieser Common-Pages verändern (dynamisch, je nach Kontextspalte). Man möge aber beachten, dass die Ausgabe nicht davon abhängt, ob die richtige Unterseite aktiv ist. Erscheint "#Common" werden die Links ausgegeben. Die flexible Steuerung der Ausgabe bezieht sich nur auf "normale Absätze" der Kontextspalte. Auch das wäre umbaubar, so dass die Steuerabsätze "#Common", "#Seite" usw. nur dann wirken, wenn auch die Ausgabe auf dieser Unterseite aktiv ist. Also jede Unterseite könnte eine eigene Aufbaustruktur bekommen. Aber das macht ggf. weniger Sinn. Und die, die die Logik nun verstanden haben, könen den Code umbauen, so dass die gewünschten Funktionen entstehen.