Wichtige Objekte, Dateien und Arrays zur Benutzung:
$GLOBALS['cache_instance']: ist das CacheSystem-Objekt --> wird im Loading-Bereich von /inc/extension/ext-cache.php erstellt. Braucht man nicht neu erstellen!!
$GLOBALS['cache_array']: Mit diesem Array erhält man Zugriff auf die gecachten Werte.
inc/loader/load_cache-<cacheAbschnittsname>.php: Dies ist die magische Datei, in der ein Cache-Abschnitt eingelesen bzw. erstellt wird (erklärung weiter unten)
inc/cache/<cacheAbschnittsname>.cache: Ist die Datei mit den Cacheinformationen drinnen. Wird automatisch erstellt oder gelöscht vom CacheSystem-Objekt.
Schritt für Schritt Anleitung
Als erstes sollte man sich einen guten, leicht beschreibenen Namen für seinen Cache-Abschnitt überlegen.
Wir nennen diesen in weiterer Folge mal ganz einfach <cacheAbschnittsname> und sollte dann mit eurem ausgedachten Abschnittsnamen ersetzt werden.
Dann braucht man eine Datei load_cache-<cacheAbschnittsname>.php im Verzeichniss inc/loader/. Als gutes, einfaches und vor allem leicht verständliches Grundgerüst für eine solche Datei kann man die load_cach-config.php im gleichen Verzeichniss hernehmen. Diese Datei wird dann beim Laden von ext-cache aufgerufen und erstellt die inc/cache/<cacheAbschnittsname>.cache-Datei. Diese loader-Datei von sieht mal so aus:
if (!defined('__SECURITY')) {
$INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
require($INC);
}
// Next cached table is the configuration (config)...
if (($GLOBALS['cache_instance']->loadCacheFile("config", true)) && ($GLOBALS['cache_instance']->extensionVersionMatches("sql_patches"))) {
// Load config from cache
$GLOBALS['cache_array']['config'] = $GLOBALS['cache_instance']->getArrayFromCache();
// @TODO: Do we really need to cache the config???
} elseif ((getConfig('cache_config') == "Y") && ($GLOBALS['output_mode'] != "1") && ($GLOBALS['output_mode'] != "-1")) {
// Create cache file here
$GLOBALS['cache_instance']->init("CONFIG");
$GLOBALS['cache_instance']->storeExtensionVersion("sql_patches");
// Load all modules and their data
$result = SQL_QUERY("SELECT * FROM `{!_MYSQL_PREFIX!}_config` ORDER BY config ASC", __FILE__, __LINE__);
while ($data = SQL_FETCHARRAY($result)) {
// Add row to cache file
$GLOBALS['cache_instance']->addRow($data);
} // END - while
// Free memory
SQL_FREERESULT($result);
// Close the cache
$GLOBALS['cache_instance']->finalize();
// Include loader again
require(__FILE__);
}Jedes Vorkommen von "config", 'config' oder auch "CONFIG" (nicht das config in getConfig) gehört da mit eurem <cacheAbschnittsname> ersetzt.
Eigentlich sind alle Kommentare in der Datei selbsterklärend. Der wichtigste Abschnitt ist aber mit:
$result = SQL_QUERY("SELECT * FROM `{!_MYSQL_PREFIX!}_config` ORDER BY config ASC", __FILE__, __LINE__);
while ($data = SQL_FETCHARRAY($result)) {
// Add row to cache file
$GLOBALS['cache_instance']->addRow($data);
} // END - while
Hier wird veranschaulicht, wie man ein Abfrage-Ergebniss aus einer Datenbank im Cache ablegt. Hat man nur ein einfaches Array in den Cache zu stecken, dann tut auch ein einfaches $GLOBALS['cache_instance']->addRow($data); den Trick. $data ist hierbei einfach das Array.
So nun hat man seinen Abschnitt im CacheSystem angelegt und man kann dann in weiterer Folge im Script per $GLOBALS['cache_array'][<cacheAbschnittsname>] auf seine Daten im Cache zurückgreifen. Will man bei einem forciertem neueinlesen des Caches auch den eigenen Abschnitt neu einlesen lassen wollen (ist sehr ratsam) so muss man in inc/libs/cache_functions.php in der Funktion (fast am Ende der Datei) if ($GLOBALS['cache_instance']->loadCacheFile("<cacheAbschnittsname>")) $GLOBALS['cache_instance']->destroyCacheFile(); hinzufügen.
Manuelles auslösen des cache-reloads:
if ($GLOBALS['cache_instance']->loadCacheFile("<cacheAbschnittsname>")) {
$GLOBALS['cache_instance']->destroyCacheFile();
unset($GLOBALS['cache_array']['revision']);
// Reload load_cach-revison.php
LOAD_INC('inc/loader/load_cache-revision.php');
}So ich hoffe mal das stimmt so wie ichs hier getan hab. Bitte korriegieren wenn was falsch ist.
MfG
Stelzi

Ich stelle dazu mal ein Feature-Request-Ticket ein, um dein Howto nicht zu "verunreinigen" mit Code-Ideen. 