Level-Lift

Ebenen (Level) können unabhängig der ID abgefragt werden, dazu bedarf es eines kleinen Skriptes. Ich stelle hier die grundlegende Verwendung dar.

Docu:
Forum: Level-Lift ([DE])

Autor: K.Heermann (flip-flop) http://planmatrix.de 2009/05/14
CMS-Version: >= V1.2.7
Update:

Bedingung:/config/phpwcms/conf.inc.php

  • $phpwcms['allow_cntPHP_rt'] = 1;



Grundlage Level und ID

Wir unterscheiden zwischen ID-und Level-basierten Einsprungpunkten.

ID= Absoluter Einsprungpunkt:
Funktioniert in jeder Lebenslage, auch wenn ich nicht in dem gekennzeichneten Baum-Teil stehe.
(ID= Seitenstruktur (mit der Maus über das Blättchen fahren)).

Level= Relativer Einsprungpunkt:
Z.B. kann eine Skript oder {RT} abgearbeitet werden, wenn ich mich in dem angegebenen Level (oder Level-Bereich) befinde.
(Level: Betrachte die Baumstruktur einmal Spaltenweise, dann siehst du die Level).

Annahme (IDs sind frei erfunden):

 ------------------------------------
L  E  V  E  L
.:  :  :  :
.0  1  2  3   <- LEVEL-Nr.
.:  :  :  :
-+ home   :                    ID=0
-+--+ category_01              ID=01
-+--+ category_02              ID=02
-+--+--+ category_02_01        ID=04
-+--+--+--+ category_02_01_01  ID=06
-+--+--+--+ category_02_01_02  ID=07
-+--+--+ category_02_01        ID=05
-+--+--+ category_02_02        ID=08
-+--+ category_03              ID=03
-+--+ category_04              ID=09
.:  :  :  :
.0  1  2  3   <- LEVEL Nr.
------------------------------------

ID-basiert:

Die Ebene wird absolut adressiert.
Der Vorteil ist, dass diese Ebene von einem Skript oder {RT} immer (wieder) abgearbeitet wird, gleich wo der Client sich gerade auf der Seite befindet.
Der Nachteil ist, dass ich bei verschiedenen Ebenensträngen für dieses Verfahren mehrere Vorlagen brauche.

Levelbasiert:

Die Ebene wird relativ adressiert.
Der Vorteil ist, dass ich z.B. einen {RT} in die Vorlage schreibe und alle vom Client gerade aktivierten Ebenen damit angesprochen werden können, die auf das Schema passen.
Der Nachteil ist, dass ich keine Ebene anzeigen kann, die nicht gerade vom Client aufgerufen ist.


Test:

Ich möchte ein bestimmtes Bild ausgeben, wenn der Benutzer in der Kategorie category_02_01 steht, in allen anderen Kategorien wird ein anderes Bild ausgeliefert:

ID-basiert:

[PHP]
if ($GLOBALS['content'][cat_id] == 4) { // ist die ID=4 aktiv? (User gerade auf der Seite category_02_01)
 
  echo <img src="img/backend/sourceforge.gif' border="0" alt="" />'.LF;
}
else {
  echo <img src="img/backend/preinfo2.jpg' border="0" alt="" />'.LF;
}
[/PHP]

Ein klassisches Beispiel für eine ID-basierte, absolut adressierte Abfrage. Egal an welcher Stelle sich der User auf der Seite befindet (außer in category_02_01) es wird immer das Bild preinfo2.jpg ausgeliefert. Nur bei aktivierter Kategorie category_02_01 wird das Bild sourceforge.gif ausgegeben.

Ich möchte jedoch für das gesamte erste, zweite und dritte Level jeweils ein eigenes Bild ausgeben, also muss ich das Level (die Ebene) prüfen.

Level-basiert:

Level pruefen

[PHP]
$my_image = 'img/backend/preinfo2.jpg';  // voreingestelltes Bild Level 0 und 1
 
if(isset($GLOBALS['LEVEL_ID'][2])) {   // 2 fuer das zweite Level -> ist das 2. Level aktiv?
  $my_image = 'img/backend/hotscripts.gif';  // Bild fuer alle Kategorien im 2. Level
 
  if (isset($GLOBALS['LEVEL_ID'][3])) {   // gibt es ein aktives drittes Level?
    $my_image = 'img/backend/sourceforge.gif';  // Bild fuer alle Kategorien im 3. Level
  }
}
 
// Bildausgabe
echo '<img src="'.$my_image.'" border="0" alt="" />'.LF;
 
 
// ======= Testsektion: Ausgabe Level / Kategorie / ID
$level = 0;
for ($i = 0; $i <= $level; $i++) {  // Wieviele Level sind vorhanden?
  isset($GLOBALS['LEVEL_ID'][$i]) ? $level++ : $level--;
}
 
// Aktuellen Kategorie-alias und ID auslesen
$cat_alias = $GLOBALS['content']["struct"][$GLOBALS['content']["cat_id"]]["acat_alias"];
$cat_id =    $GLOBALS['content']['cat_id'];
 
echo 'Level='.$level.' Cat.'.$cat_alias.' ID='.$cat_id.LF;
// ======= Ende Testsektion
 
[/PHP]

In dem Array $LEVEL_ID[X] steckt also die gesuchte Information. Ist das Level vorhanden, (isset($LEVEL_ID[X]) wird die aktuelle Kategorie-ID als Inhalt geliefert.

Es können auch ganz andere Anweisungen anstatt der Bildausgabe abgearbeitet werden. Der Fantasie sind keine Grenzen gesetzt.

Level-Lift

Der Level-Lift arbeitet genau nach diesem Verfahren und wird typischerweise für getrennte Navigationen eingesetzt.

[PHP]
if(isset($GLOBALS['LEVEL_ID'][1])) {  // hier wird das erste level abgefragt
$level_id = $GLOBALS['LEVEL_ID'][1];
echo '<div class="untermenu">'.LF;
echo '<h1>Filme</h1>'.LF;
echo '{NAV_LIST_UL:F,'.$level_id.',1,act_path,active,,,#|}';
echo '</div>';
}
[/PHP]

Level = Spaltenwert 0, 1, 2, …. (relativ Navigation)
ID= Numeraler Wert der Seitenebene in der Seitenstruktur (Maus über das Blättchen bewegen) (absolute Navigation)

Ab Version r317 möglich: Der neue Tag {LEVELX_ID}

[PHP]
if(isset($GLOBALS['LEVEL_ID'][1])) {  // hier wird das erste Level abgefragt
echo '<div class="untermenu">'.LF;
echo '<h1>Filme</h1>'.LF;
echo '{NAV_LIST_UL:F,{LEVEL1_ID},1,act_path,active,,,#|}';
echo '</div>';
}
[/PHP]


Siehe hierzu: Navigation in verschiedenen Ebenen

deutsch/navigationen/kleine-helfer/level-lift.txt · Last modified: 2010/01/29 08:23 by Knut Heermann (flip-flop)
www.planmatrix.de www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0