Rene (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Rene (Diskussion | Beiträge) Version 0.7.1 |
||
| Zeile 45: | Zeile 45: | ||
| SGA_1x04 = 38 Minuten | | SGA_1x04 = 38 Minuten | ||
}}</nowiki></pre> | }}</nowiki></pre> | ||
* '''f''' oder '''file''' | * '''f''' oder '''file''' | ||
: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]].'' | :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> | <pre><nowiki>{{carray|EpName|f|Vorlage:EpName/Fill}}</nowiki></pre> | ||
* '''fr''' oder '''fileread''' | * '''fr''' oder '''fileread''' | ||
: Das Kommando ist eine Kombination aus '''file''' und '''read''' | : Das Kommando ist eine Kombination aus '''file''' und '''read''' | ||
<pre><nowiki>{{carray|EpName|fr|Vorlage:EpName/Fill|SG1_1x10}}</nowiki></pre> | <pre><nowiki>{{carray|EpName|fr|Vorlage:EpName/Fill|SG1_1x10}}</nowiki></pre> | ||
| Zeile 74: | Zeile 74: | ||
<pre><nowiki>{{keys:u: sg1 | 1x01 }}</nowiki></pre> | <pre><nowiki>{{keys:u: sg1 | 1x01 }}</nowiki></pre> | ||
Ergibt: {{keys:u: sg1| 1x01 }} | Ergibt: {{keys:u: sg1| 1x01 }} | ||
'''Hinweis''' Damit nicht definierte Variablen als | '''Hinweis''' Damit nicht definierte Variablen als solche 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 87: | Zeile 87: | ||
Die Vorlage EpName/Fill füllt das Array ''EpName'' mit Werten die dann von der Vorlage EpName ausgelesen wird. | Die Vorlage EpName/Fill füllt das Array ''EpName'' mit Werten die dann von der Vorlage EpName ausgelesen wird. | ||
'''Wichtiger Hinweis''' | |||
Die oben angegebene Vorgehensweise führt zu Problemen bei gesichteten Versionen. Wird diese Erweiterung benutzt sollte alternativ der Befehl '''file''' bzw. '''fileread''' eingesetzt werden. | |||
==Code== | ==Code== | ||
<pre><nowiki> | <pre><nowiki> | ||
| Zeile 96: | Zeile 99: | ||
$wgExtensionCredits['parserhook'][] = array( | $wgExtensionCredits['parserhook'][] = array( | ||
'name' => 'CacheArray', | 'name' => 'CacheArray', | ||
'version' => '0. | 'version' => '0.7.1', | ||
'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', | ||
'description' => 'Cached Array for templates', | 'description' => 'Cached-Array for templates', | ||
); | ); | ||
// Define a setup function | // Define a setup function | ||
| Zeile 106: | Zeile 109: | ||
$wgHooks['LanguageGetMagic'][] = 'efCacheArray_Magic'; | $wgHooks['LanguageGetMagic'][] = 'efCacheArray_Magic'; | ||
// Cache | // Cache | ||
$ | $efCacheArray_Cache = array(); | ||
// Register extension | // Register extension | ||
| Zeile 117: | Zeile 120: | ||
} | } | ||
// Define magic | // Define magic words | ||
function efCacheArray_Magic( &$magicWords, $langCode ) { | function efCacheArray_Magic( &$magicWords, $langCode ) { | ||
$magicWords['carray'] = array( 0, 'carray' ); | $magicWords['carray'] = array( 0, 'carray' ); | ||
| Zeile 138: | Zeile 141: | ||
$key = ''; | $key = ''; | ||
while($value = next($param)) { | while($value = next($param)) { | ||
// get key- | // get key-modifier(s) m:key | ||
list($mod,$ | list($mod,$mvalue) = explode(':',$value,2); | ||
// if | // if mvalue is set means we also have modifier | ||
if(isset($ | if(isset($mvalue)) { | ||
if(strpos($mod,'u')!==false) { | if(strpos($mod,'u')!==false) { // uppercase | ||
$ | $mvalue = strtoupper($mvalue); | ||
} | } | ||
if(strpos($mod,'l')!==false) { | if(strpos($mod,'l')!==false) { // lowercase | ||
$ | $mvalue = strtolower($mvalue); | ||
} | } | ||
$value = $mvalue; | |||
$value = $ | |||
} | } | ||
// keys always trim | |||
$value = trim($value); | $value = trim($value); | ||
// drop empty mw-variables | |||
$value = preg_replace('/\{\{\{.*?\}\}\}/','',$value); | |||
// if value is not empty add to key | |||
if(!empty($value)) { | if(!empty($value)) { | ||
if(!empty($key)) { | if(!empty($key)) { | ||
| Zeile 164: | Zeile 170: | ||
// carray main part | // carray main part | ||
function efCacheArray_carray() { | function efCacheArray_carray() { | ||
global $ | global $efCacheArray_Cache; | ||
// minimum parser, cachenumber and action are needed | // minimum parser, cachenumber and action are needed | ||
if(func_num_args() < 3) { | if(func_num_args() < 3) { | ||
return array('','noparse'=>true); | |||
} | } | ||
// get the parser parameter | // get the parser parameter | ||
| Zeile 180: | Zeile 186: | ||
// action | // action | ||
switch($action) { | switch($action) { | ||
case 'f' : | |||
case 'file' : | |||
case 'fr' : | |||
case 'fileread' : | |||
// read array out of "file" | |||
$file = next($param); | |||
// if carray is already set do not read it again (cache!) | |||
if(!isset($efCacheArray_Cache[$cnumber])) { | |||
$fh = new Article(Title::newFromText($file)); | |||
$content = $fh->fetchContent(); | |||
if($fh->mContentLoaded) { | |||
$cont = explode('|',$content); | |||
foreach($cont as $line) { | |||
list($index,$value) = explode('=',$line,2); | |||
$efCacheArray_Cache[$cnumber][trim($index)] = trim($value); | |||
} | |||
} | |||
} | |||
// leave switch (only if file) | |||
if(($action === 'f') or ($action === 'file')) { | |||
break; | |||
} | |||
// read key | |||
$key = trim(next($param)); | |||
// read cache | |||
$value = $efCacheArray_Cache[$cnumber][$key]; | |||
// if no value, look for default | |||
if(isset($value)) { | |||
$output = $value; | |||
} else { | |||
if(isset($efCacheArray_Cache[$cnumber]['#default'])) { | |||
$output = $efCacheArray_Cache[$cnumber]['#default']; | |||
} | |||
} | |||
break; | |||
case 'w' : // only create new carray | case 'w' : // only create new carray | ||
case 'write' : | case 'write' : | ||
case 'rw' : // write new carray and read one value | case 'rw' : // write new carray and read one value | ||
case 'readwrite' : | case 'readwrite' : | ||
// read key (only if readwrite) | |||
if(($action === 'rw') or ($action === 'readwrite')) { | |||
$key = trim(next($param)); | |||
} | |||
// if carray is already set do not read it again (cache!) | |||
if(!isset($efCacheArray_Cache[$cnumber])) { | |||
// read the keys and values and save in carray | |||
while($values = next($param)) { | |||
list($index,$value) = explode('=',$values,2); | |||
$efCacheArray_Cache[$cnumber][trim($index)] = trim($value); | |||
} | |||
} | |||
// leave switch (only if write) | |||
if(($action === 'w') or ($action === 'write')) { | |||
break; | |||
} | |||
case 'r' : // read value out of carray | case 'r' : // read value out of carray | ||
case 'read' : | case 'read' : | ||
// read key, if not already set by action readwrite | |||
if(!isset($key)) { | |||
$key = trim(next($param)); | |||
} | |||
// read cache | |||
$value = $efCacheArray_Cache[$cnumber][$key]; | |||
// if no value, look for default | |||
if(isset($value)) { | |||
$output = $value; | |||
} else { | |||
if(isset($efCacheArray_Cache[$cnumber]['#default'])) { | |||
$output = $efCacheArray_Cache[$cnumber]['#default']; | |||
} | |||
} | |||
break; | break; | ||
// delete carray | // delete carray | ||
case 'd' : | case 'd' : | ||
case 'delete' : | case 'delete' : | ||
unset($efCacheArray_Cache[$cnumber]); | |||
break; | break; | ||
case 'c' : // count elements in carray | case 'c' : // count elements in carray | ||
case 'count' : | case 'count' : | ||
$output = count($efCacheArray_Cache[$cnumber]); | |||
break; | break; | ||
case 'u' : // test if cache is used | case 'u' : // test if cache is used | ||
case 'used' : | case 'used' : | ||
// if carray is used give size | |||
if(isset($efCacheArray_Cache[$cnumber])) { | |||
$output = count($efCacheArray_Cache[$cnumber]); | |||
} | |||
break; | break; | ||
} | } | ||