Menü aufrufen
Toggle preferences menu
Persönliches Menü aufrufen
Nicht angemeldet
Ihre IP-Adresse wird öffentlich sichtbar sein, wenn Sie Änderungen vornehmen.

Benutzer:Rene/CacheArray: Unterschied zwischen den Versionen

aus Stargate Wiki, dem deutschsprachigen Stargate-Lexikon
Keine Bearbeitungszusammenfassung
Version 0.7.1
Zeile 45: Zeile 45:
| SGA_1x04 = 38 Minuten
| SGA_1x04 = 38 Minuten
}}</nowiki></pre>
}}</nowiki></pre>
* '''f''' oder '''file''' - Ab Version 0.7 verfügbar -
* '''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''' - Ab Version 0.7 verfügbar -
* '''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 soclhe auch erkannt werden müssen diese nach dem folgenden Muster eingesetzt werden. Nicht <nowiki>{{{1}}}</nowiki> sondern <nowiki>{{{1|}}}</nowiki>.
'''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.6.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();
$efCacheArray_Cache = array();


// Register extension  
// Register extension  
Zeile 117: Zeile 120:
}
}


// Define magic word(s)
// 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-parameter(s) p:key
         // get key-modifier(s) m:key
         list($mod,$value) = explode(':',$value,2);
         list($mod,$mvalue) = explode(':',$value,2);
         // if modifier (mod) is given (then value is set)
         // if mvalue is set means we also have modifier
         if(isset($value)) {
         if(isset($mvalue)) {
             if(strpos($mod,'u')!==false) {
             if(strpos($mod,'u')!==false) { // uppercase
                 $value = strtoupper($value);
                 $mvalue = strtoupper($mvalue);
             }
             }
             if(strpos($mod,'l')!==false) {
             if(strpos($mod,'l')!==false) { // lowercase
                 $value = strtolower($value);
                 $mvalue = strtolower($mvalue);
             }
             }
        } else {
             $value = $mvalue;
             $value = $mod;
         }
         }
        // 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 $efCacheArray_cache;
     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);
        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)
        // read key (only if readwrite)
if(($action == 'rw') or ($action == 'readwrite')) {
        if(($action === 'rw') or ($action === 'readwrite')) {
    $key = trim(next($param));
            $key = trim(next($param));
}
        }
// if carray is already set do not read it again (cache!)
        // if carray is already set do not read it again (cache!)
if(!isset($efCacheArray_cache[$cnumber])) {
        if(!isset($efCacheArray_Cache[$cnumber])) {
    // 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);
                list($index,$value) = explode('=',$values,2);
        $efCacheArray_cache[$cnumber][trim($index)] = trim($value);
                $efCacheArray_Cache[$cnumber][trim($index)] = trim($value);
    }
            }
}
        }
// leave switch (only if write)
        // leave switch (only if write)
if(($action == 'w') or ($action == 'write')) {
        if(($action === 'w') or ($action === 'write')) {
    break;
            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
        // read key, if not already set by action readwrite
if(!isset($key)) {
        if(!isset($key)) {
    $key = trim(next($param));
            $key = trim(next($param));
}
        }
// read cache
        // read cache
$value = $efCacheArray_cache[$cnumber][$key];
        $value = $efCacheArray_Cache[$cnumber][$key];
// if no value, look for default
        // if no value, look for default
if(isset($value)) {
        if(isset($value)) {
    $output = $value;
            $output = $value;
} else {
        } else {
    if(isset($efCacheArray_cache[$cnumber]['#default'])) {
            if(isset($efCacheArray_Cache[$cnumber]['#default'])) {
$output = $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]);
        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]);
        $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 carray is used give size  
if(isset($efCacheArray_cache[$cnumber])) {
        if(isset($efCacheArray_Cache[$cnumber])) {
    $output = count($efCacheArray_cache[$cnumber]);
            $output = count($efCacheArray_Cache[$cnumber]);
}
        }
break;
break;
     }
     }