De:Projektdatei austauschen

From phpCMS

Jump to: navigation, search

Frage: Wie kann ich durch Austausch der Projektdatei das Layout wechseln?

Antwort: von Samson (08.02.2006)

Contents

[edit] Einführung

Wenn man dem Besucher die Auswahl eines anderen Layouts anbieten möchte, steht man vor der Frage wie man das mit phpCMS umsetzen kann. Eine Möglichkeit, die man schnell in Erwägung zieht, ist die Übergabe eines alternativen Templates per URI:

index.htm?template=/template/alternativ.tpl

Damit der Besucher im Genuß der Layoutalternative bleibt, müßte der Parameter aber an alle Links der Seite angehangen werden. Schnell wird einem klar, das diese Variante inakzeptabel ist.

Die zweite Möglichkeit ist die Layoutänderung per CSS-Datei. Dazu muß man sich aber wieder ein Plugin basteln, das den CSS-Link im Template austauscht und entsprechend die Cookies setzt.

Beide Varianten wurden im phpCMS-Forum schon ausführlich diskutiert. Doch es gibt noch eine dritte Möglichkeit - das Austauschen der Projektdatei ! Doch diese Möglichkeit scheitert an der fehlenden Unterstützung durch phpCMS. Da bringt es auch nichts, wenn man in der Konfigurationsdatei die globale Projektdatei ändert.

Ich möchte jetzt eine Lösung präsentieren, die den Austausch trotzdem ermöglicht. Dazu ist ein kleiner Patch von phpCMS und der Bau eines kleinen Plugins erforderlich.

[edit] class.parser_page_phpcms.php

In der Funktion CheckProject ab Zeile 55, muß man nach dem Code

if (isset($this->content->PROJECT)) {
  $temp = trim($this->content->PROJECT[0]);
} else {
  $temp = false;
}

folgende Zeilen einfügen

if($DEFAULTS->INI_SWITCH == 'on') {
  if($DEFAULTS->INI_FILES[$_COOKIE["phpcmsinifile"]]) {
    $temp = $DEFAULTS->INI_FILES[$_COOKIE["phpcmsinifile"]];
  }
}  

[edit] default.php

Hier müssen zusätzliche Konfigurationswerte eingefügt werden:

$this->INI_SWITCH = 'on';
$this->INI_FILES = array("Standard 3clm"=>"/template/home.ini",
                         "Demo4you"=>"/template/demo_4you_home.ini");

Im Array INI_FILES werden die Bezeichnungen der Layouts und die Pfade zur entsprechenden Projektdatei abgelegt.

[edit] iniswitch.php

Das ist ein Plugin, das die Links zum Umstellen des Layouts anzeigt. Das Plugin setzt außerdem das Cookie und lädt die Seite anschließend neu:

<?php
  
  if($_GET["layout"]) { 
    // Neues Layout einstellen, Cookie für 1 Jahr setzen und Seite neu laden
    setcookie ("phpcmsinifile",$_GET["layout"],time()+31536000,"/");
    Header("Location:".$CHECK_PAGE->path."/".$CHECK_PAGE->name);
  }

  // Navigation generieren
  $count = 0;
  while(list($key,$value) = each($DEFAULTS->INI_FILES)) {
    $count++;
    $Ausgabe .= '<a href="?layout='.$key.'" title="'.$key.'">'.$count.'</a> '; 
  }         
	$current = count($Tags);
	$Tags[$current][0] = '<!-- PLUGIN:INISWITCH -->';
	$Tags[$current][1] = 'INI-Switcher: '.$Ausgabe;

?>

[edit] Templatedatei

In der Templatedatei jedes Layouts muß dieses Plugin natürlich auch noch eingebunden werden, z.B. mit

{PLUGIN FILE="$plugindir/iniswitch.php" TYPE="DYNAMIC"}

Dort, wo die Links zur Layout-Umstellung erscheinen sollen, schreibt man

<!-- PLUGIN:INISWITCH -->

[edit] Funktionsweise

Der Parser kommt als erstes zum Zug. Er ersetzt die in der Contentdatei angegebene Projektdatei durch eine neue - vorausgesetzt INI_SWITCH ist on und das Cookie gesetzt. Wird die Projektdatei nicht gefunden, wird die globale Projektdatei benutzt.

Das Plugin liest das Array mit den INI-Dateien aus der Konfigurationsdatei und zeigt die Links zum Austauschen des Layouts an. Klickt der Besucher auf einen Link, setzt das Plugin das Cookie und lädt die Seite neu.

[edit] Vor- und Nachteile

Der Projektdatei-Austausch eignet sich nur für Websites, wo alle Contentdateien dieselbe Projektdatei benutzen. Benötigt Deine Website mehrere Projektdateien für ein und dasselbe Layout, ist ein CSS-Dateiaustausch die einfachere Variante.

[edit] Ausbau und Erweiterungsmöglichkeiten

Bei der Linkgenerierung könnte man ganz auf ein Plugin verzichten, wenn die Links zum Switchen bereits vom Parser generiert werden. Sollte der Patch einmal festeingebaut werden, ist solch eine Lösung denkbar.

Main Page: Tutorials MainPage | Top Page: De:MiniHowTos

This page in other languages: English

Personal tools