Rene (Diskussion | Beiträge) |
Rene (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 2: | Zeile 2: | ||
Die Parser-Erweiterung CacheArray ermöglicht das anlegen und auslesen von Arrays. Das besondere dabei ist das diese Arrays nur einmal angelegt werden müssen und dann auch von anderen Seiten benutzt werden können. '''Hinweis:''' ''Natürlich bleibt das Array nicht erhalten wenn die ursprünglich angefragte Seite an den Browser ausgegeben wurde. Es kann nur während des Seitenaufbaus von aufgerufenen Seiten bzw. Vorlagen benutzt werden.'' | Die Parser-Erweiterung CacheArray ermöglicht das anlegen und auslesen von Arrays. Das besondere dabei ist das diese Arrays nur einmal angelegt werden müssen und dann auch von anderen Seiten benutzt werden können. '''Hinweis:''' ''Natürlich bleibt das Array nicht erhalten wenn die ursprünglich angefragte Seite an den Browser ausgegeben wurde. Es kann nur während des Seitenaufbaus von aufgerufenen Seiten bzw. Vorlagen benutzt werden.'' | ||
== | ==Befehle== | ||
=== | Die Erweiterung bietet neben dem eigentlichen Array Befehl (carray) noch einige weitere Befehle die bei der Benutzung der Erweiterung hilfreich sind. | ||
<pre><nowiki>{{carray:<Name_des_Array>|< | * '''carray''' | ||
:Der Befehl zum setzen, auslesen und löschen der Arrays | |||
* '''trim''' | |||
:Leerzeichen am Anfang und Ende einer Variable entfernen | |||
* '''keys''' | |||
:Mehrere Index-Keys zu einem einzigen Verbinden | |||
===carray=== | |||
<pre><nowiki>{{carray:<Name_des_Array>|<Kommando>[''Parameter''…''Array-Werte'']}}</nowiki></pre> | |||
* '''Name_des_Array''' | * '''Name_des_Array''' | ||
:Die Erweiterung ist in der Lage beliebig viele Arrays zu verwalten. Zur Unterscheidung dient dabei der Array-Name. | :Die Erweiterung ist in der Lage beliebig viele Arrays zu verwalten. Zur Unterscheidung dient dabei der Array-Name. | ||
* '''Kommando''' | |||
Die Steuerung von carray erfolgt über die folgenden Kommandos. | |||
* '''w''' oder '''write''' | * '''w''' oder '''write''' | ||
: | :Das Kommando '''write''' füllt das Array mit den angegebenen Werten. Ist das Array bereits angelegt wird der Befehl ignoriert. Um ein Array erneut anzulegen muss es zuerst gelöscht werden, siehe Befehl '''delete'''. | ||
:Die Definition der Array-Werte erfolgt analog zur <nowiki>{{#switch:}}</nowiki> Definition. Ein Beispiel: | :Die Definition der Array-Werte erfolgt analog zur <nowiki>{{#switch:}}</nowiki> Definition. Ein Beispiel: | ||
<pre><nowiki>{{carray:EpName|w | <pre><nowiki>{{carray:EpName|w | ||
| Zeile 22: | Zeile 30: | ||
:Das Array-Element '''#default''' wird immer dann ausgegeben wenn die Anfrage nach einem nicht definierten Wert gestellt wird, siehe Befehl '''read'''. | :Das Array-Element '''#default''' wird immer dann ausgegeben wenn die Anfrage nach einem nicht definierten Wert gestellt wird, siehe Befehl '''read'''. | ||
* '''r''' oder '''read''' | * '''r''' oder '''read''' | ||
:Mit dem | :Mit dem Kommando '''read''' erfolgt die Abfrage des Arrays. Das folgende Beispiel | ||
<pre><nowiki>{{carray:EpName|r|SGA_1x01}}</nowiki></pre> | <pre><nowiki>{{carray:EpName|r|SGA_1x01}}</nowiki></pre> | ||
würde nach der oben angegebenen Definition den Wert | würde nach der oben angegebenen Definition den Wert | ||
| Zeile 28: | Zeile 36: | ||
zurück liefern. Ist kein Wert definiert wird entweder nichts oder, wenn definiert, der Inhalt der Zeile '''#default''' ausgegeben. | zurück liefern. Ist kein Wert definiert wird entweder nichts oder, wenn definiert, der Inhalt der Zeile '''#default''' ausgegeben. | ||
* '''rw''' oder '''readwrite''' | * '''rw''' oder '''readwrite''' | ||
:Mit der Kombination der | :Mit der Kombination der Kommandos '''read''' und '''write''' wird das Array zuerst gefüllt und dann die entsprechende Zelle ausgelesen. Der Aufruf muss daher lauten: | ||
<pre><nowiki>{{carray:EpName|rw|SGA_1x01 | <pre><nowiki>{{carray:EpName|rw|SGA_1x01 | ||
| #default = <span class="error">Episodencode ungültig</span> | | #default = <span class="error">Episodencode ungültig</span> | ||
| Zeile 37: | Zeile 45: | ||
| SGA_1x04 = 38 Minuten | | SGA_1x04 = 38 Minuten | ||
}}</nowiki></pre> | }}</nowiki></pre> | ||
* '''f''' oder '''file''' - Ab Version 0.7 verfügbar - | |||
:Das Kommando entspricht '''write''' und erzeugt ebenfalls ein Array. Der Unterschied ist das die Daten aus einer anderen Seite gelesen werden. Es wird vor dem erzeugen geprüft ob das Array schon vorhanden ist und nur wenn dies nicht der Fall ist wird die Datei geladen. ''Siehe auch [[#Hinweise zum Einsatz]].'' | |||
<pre><nowiki>{{carray|EpName|f|Vorlage:EpName/Fill}}</nowiki></pre> | |||
* '''fr''' oder '''fileread''' - Ab Version 0.7 verfügbar - | |||
: Das Kommando ist eine Kombination aus '''file''' und '''read''' | |||
<pre><nowiki>{{carray|EpName|fr|Vorlage:EpName/Fill|SG1_1x10}}</nowiki></pre> | |||
* '''u''' oder '''used''' | * '''u''' oder '''used''' | ||
:Um zu prüfen ob ein Array bereits angelegt ist sollte | :Um zu prüfen ob ein Array bereits angelegt ist sollte das Kommando '''used''' benutzt werden. Ist das Array bereits vorhanden liefert die Anfrage die Anzahl der definierten Array-Elemente, ansonsten wird nichts zurück geliefert. | ||
<pre><nowiki>{{carray:EpName|u}}</nowiki></pre> | <pre><nowiki>{{carray:EpName|u}}</nowiki></pre> | ||
* '''c''' oder '''count''' | * '''c''' oder '''count''' | ||
: | :Das Kommando gibt die Anzahl der definierten Array-Elemente zurück. Ist das Array noch nicht definiert ist das Ergebnis 0. | ||
<pre><nowiki>{{carray:EpName|c}}</nowiki></pre> | <pre><nowiki>{{carray:EpName|c}}</nowiki></pre> | ||
* '''d''' oder '''delete''' | * '''d''' oder '''delete''' | ||
:Mit dem | :Mit dem Kommando '''delete''' wird das Array gelöscht. Dies ist immer dann nötig wenn das Array neu geschrieben werden soll, da das Überschreiben nicht möglich ist. | ||
<pre><nowiki>{{carray:EpName|d}}</nowiki></pre> | <pre><nowiki>{{carray:EpName|d}}</nowiki></pre> | ||
===trim=== | |||
<pre><nowiki>{{trim|<Parameter>}}}</nowiki></pre> | |||
*'''Parameter''' | |||
:Der Parameter kann ein Text oder sinnvoller eine Variable sein. | |||
Als Rückgabe erhält man den angegebenen Wert ohne führende oder nachfolgende Leerzeichen. Der Einsatz der Funktion ist bei der Übergabe des Arraykeys sinnvoll da es vorkommen kann das der Wert einer Variablen ein führendes Leerzeichen enthält. | |||
===keys=== | |||
<pre><nowiki>{{keys:[<Mod>:]<Key>[|[<Mod>:]<Key>…]}}</nowiki></pre> | |||
* '''Key''' | |||
:Der Key ist entweder direkt ein Text oder eine Variable. Vor dem Key kann ein Modifierer (Mod) angegeben werden. | |||
* '''Mod''' | |||
:Mit dem Modifier kann der Key verändert werden. Definiert sind die Modifier '''l''' zum umwandeln des Keys in Kleinbuchstaben und '''u''' zum umwandeln in Großbuchstaben. | |||
Das Kommando wandelt die Keys entsprechend der Modifier um, entfernt Leerzeichen und fügt zwischen den einzelnen Keys einen Unterstrich '''_''' ein. Das Ergebnis wird dann zurückgeliefert. | |||
<pre><nowiki>{{keys:u: sg1 | 1x01 }}</nowiki></pre> | |||
Ergibt: {{keys:u: sg1| 1x01 }} | |||
'''Hinweis''' Damit nicht definierte Variablen als soclhe auch erkannt werden müssen diese nach dem folgenden Muster eingesetzt werden. Nicht <nowiki>{{{1}}}</nowiki> sondern <nowiki>{{{1|}}}</nowiki>. | |||
==Hinweise zum Einsatz== | ==Hinweise zum Einsatz== | ||
Die Erweiterung kann, richtig eingesetzt, den Aufbau von Seiten beschleunigen die häufig eine Vorlage aufrufen die aus einer großen Anzahl an Werten einen Wert liefert. Dazu sollte eine eigene Seite angelegt werden die nur das Array füllt. Auf der eigentlichen Vorlagenseite sollte mit dem Befehl '''used''' geprüft werden ob das Array bereits gesetzt wurde. Wenn nicht kann die "Full"-Vorlage aufgerufen werden. Sonst sollte immer nur das Array ausgelesen werden. | Die Erweiterung kann, richtig eingesetzt, den Aufbau von Seiten beschleunigen die häufig eine Vorlage aufrufen die aus einer großen Anzahl an Werten einen Wert liefert. Dazu sollte eine eigene Seite angelegt werden die nur das Array füllt. Auf der eigentlichen Vorlagenseite sollte mit dem Befehl '''used''' geprüft werden ob das Array bereits gesetzt wurde. Wenn nicht kann die "Full"-Vorlage aufgerufen werden. Sonst sollte immer nur das Array ausgelesen werden. | ||
| Zeile 68: | Zeile 96: | ||
$wgExtensionCredits['parserhook'][] = array( | $wgExtensionCredits['parserhook'][] = array( | ||
'name' => 'CacheArray', | 'name' => 'CacheArray', | ||
'version' => '0. | 'version' => '0.6.0', | ||
'url' => 'http://www.stargate-wiki.de/index.php/Benutzer:Rene/CacheArray', | 'url' => 'http://www.stargate-wiki.de/index.php/Benutzer:Rene/CacheArray', | ||
'author' => 'René Raule', | 'author' => 'René Raule', | ||
| Zeile 84: | Zeile 112: | ||
global $wgParser; | global $wgParser; | ||
$wgParser->setFunctionHook( 'carray', ' | $wgParser->setFunctionHook( 'carray', 'efCacheArray_carray', SFH_NO_HASH ); | ||
$wgParser->setFunctionHook( 'trim' , 'efCacheArray_trim' , SFH_NO_HASH ); | |||
$wgParser->setFunctionHook( 'keys' , 'efCacheArray_keys' , SFH_NO_HASH ); | |||
} | } | ||
| Zeile 90: | Zeile 120: | ||
function efCacheArray_Magic( &$magicWords, $langCode ) { | function efCacheArray_Magic( &$magicWords, $langCode ) { | ||
$magicWords['carray'] = array( 0, 'carray' ); | $magicWords['carray'] = array( 0, 'carray' ); | ||
$magicWords['trim'] = array( 0, 'trim' ); | |||
$magicWords['keys'] = array( 0, 'keys' ); | |||
return true; | return true; | ||
} | } | ||
// | // trim | ||
function | function efCacheArray_trim( &$parser, $inStr='') { | ||
return array(trim($inStr),'noparse'=>true); | |||
} | |||
// combinate keys | |||
function efCacheArray_keys() { | |||
// get the parser parameter | |||
$param = func_get_args(); | |||
$parser = current($param); | |||
// get the parts for the key | |||
$key = ''; | |||
while($value = next($param)) { | |||
// get key-parameter(s) p:key | |||
list($mod,$value) = explode(':',$value,2); | |||
// if modifier (mod) is given (then value is set) | |||
if(isset($value)) { | |||
if(strpos($mod,'u')!==false) { | |||
$value = strtoupper($value); | |||
} | |||
if(strpos($mod,'l')!==false) { | |||
$value = strtolower($value); | |||
} | |||
} else { | |||
$value = $mod; | |||
} | |||
$value = trim($value); | |||
if(!empty($value)) { | |||
if(!empty($key)) { | |||
$key .= '_'; | |||
} | |||
$key .= $value; | |||
} | |||
} | |||
return $key; | |||
} | |||
// carray main part | |||
function efCacheArray_carray() { | |||
global $efCacheArray_cache; | global $efCacheArray_cache; | ||
| Zeile 123: | Zeile 192: | ||
// read the keys and values and save in carray | // read the keys and values and save in carray | ||
while($values = next($param)) { | while($values = next($param)) { | ||
list($index,$value) = explode('=',$values,2); | |||
$efCacheArray_cache[$cnumber][trim($index)] = trim($value); | |||
} | } | ||
} | } | ||