quick Template Switch

OBSOLETE BY Template Switcher via Action

Leider gibt es bis zur DokuWiki Version 2006-03-09 keine Möglichkeit das Template per Knopfdruck für die aktuelle Sitzung zu ändern. Aus diesem Grund habe ich eine kleine Modifikation geschrieben, die das leisten kann. Im Folgenden beschreibe ich alle Änderungen, die an der Engine gemacht werden müssen:

In der Datei /inc/actions.php müssen wir unsere neue Funktion zunächst anmelden. Dazu fügen wir in der Funktion act_clean() in das array array_search folgenden Wert ein: ‘template’

Bei den meisten sieht die Zeile vor dem Einfügen ungefähr so aus:

if(array_search($act,array(	'login','logout','register','save','edit','template'
				'preview','search','show','check','index','revisions',
				'diff','recent','backlink','admin','subscribe',
				'unsubscribe','profile','resendpwd',)) === false

Nach dem Einfügen sollte die Zeile wie folgt aussehen:

if(array_search($act,array(	'login','logout','register','save','edit','template'
				'preview','search','show','check','index','revisions',
				'diff','recent','backlink','admin','subscribe',
				'unsubscribe','profile','resendpwd','template',)) === false



Damit das DokuWiki nach der Übergabe des Template auch noch die Seite wieder anzeigt muss in der Funktion act_dispatch() folgender Code eingefügt werden:

  if($ACT == 'template'){
  	$ACT = 'show';
  }



Nun müssen wir in der Datei /inc/template.php noch einbauen, dass die Funktion tpl_button() versteht, wenn man ihr einen weiteren Parameter, unser neues Template, übergibt. Ändert dazu die Zeile:

function tpl_button($type){

in die Zeile:

function tpl_button($type, $additional=NULL){



In der selben Funktion muss das Case Konstrukt erweitert werden, damit der Button später auch angezeigt werden kann:

case 'template':
	print html_btn('template',$ID,'',array('do' => 'template', 'template' => $additional));
	break;



Um dem neuen Button eine Bezeichnung zu geben, muss in der Datei inc/lang/*/lang.php noch eine $lang Variable hinzugefügt werden. Ich habe extra das Sternchen in den Pfad geschrieben, damit erkennbar ist, dass dieser Schritt u.U. für mehr als nur eine Sprache zu erledigen ist.

Fügt unter die $lang[’btn_*’] Reihe noch den Wert:

$lang['btn_template']  = 'anderes Aussehen';



Schlussendlich müssen wir nur noch das eigentliche Switching vornehmen. Diese Änderung geht in die Datei /conf/local.protected.php, damit sie nicht versehentlich überschrieben wird. Es kann sein, dass bei euch diese Datei nicht existiert. Wenn das der Fall sein sollte, erstellt sie bitte neu und fügt in die erste Zeile ‘<?php’ ein. Ansonsten komplettiert ihr die Datei mit dem folgenden Code:

session_start();
$_SESSION['template']=empty($_POST['template'])?(empty($_SESSION['template'])?$conf['template']:$_SESSION['template']):htmlspecialchars($_POST['template']);

$conf['template']    = $_SESSION['template'];



So, das waren alle Änderungen an der Engine. Nun könnt ihr in eurem Template oder auch in einer der Wiki Dateien 1) einfach den Code einfügen:

tpl_button('template', 'dasAndereTemplate');

Ihr solltet dabei beachten, dass im Template dasAndereTemplate auch ein Button zum zurückswitchen eingebaut ist.

Das war es auch schon. Wie immer gilt, dass ihr die Änderungen am Wiki auf eigene Gefahr hin macht und ich keine Haftung für Schäden 2) übernehme, die bei euch durch diese Änderungen auftreten. Falls ihr Fragen habt, meldet euch einfach bei mir.

1) falls ihr die php Erweiterung eingeschaltet habt
2) eigentlich sollte nichts passieren
authoring tool: counter
content: © 2012 Gerry Weißbach @ gammaproduction.de