Mailer-Project Community

Support&Community Forum

clarity
Mailer-Project Community » Howto-Ecke » Benutzung von ext-cache

Benutzung von ext-cache

Page: 1

Author Post
profi-concept
Guest
So da ich nun glaube, das cache-System zu durchschaut zu haben mache ich mal eine kurze kleine Anleitung wie man das cache-System benutzt.

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. :mrgreen: 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
Project Founder
Registered: Sep 2005
Posts: 1395
Location: Krefeld
Bis jetzt sieht deine Anleitung gut aus. :) Ich stelle dazu mal ein Feature-Request-Ticket ein, um dein Howto nicht zu "verunreinigen" mit Code-Ideen. ;)

Edit: Ticket 109 behandelt dies.
_______________
News-Flash: - Bitte den Bug-Tracker mehr nutzen! - Wiki verfuegbar - Bitte die neuste GIT-Revision von dieser Anleitung - Topic 180 herunterladen - Bug-Rallye gestartet! - Historisches Archiv angelegt - SVN-Howto - Commit-Statistik Feb 2008 - dato
« Last edit by Quix0r on Fri Mar 06, 2009 6:42 pm. »
Project Founder
Registered: Sep 2005
Posts: 1395
Location: Krefeld
Wichtig sei hier noch zu erwaehnen, das Vorkommenisse wie getConfig('cache_config') z.B. nach getConfig('cache_<cacheAbschnittsname>') umgeschrieben, auch einen entsprechenden Erweiterungsupdate von ext-cache.php, sowie eine Erweiterung der Sprachdatei cache_de.php und des Templates admin_config_cache.tpl nach sich zieht. Einfach bitte dazu ansonsten uns fragen. :)

Damit waere dann die eigene Cache-Datei ein und ausschaltbar, nur zu Debug-Zwecken versteht sich. :D
_______________
News-Flash: - Bitte den Bug-Tracker mehr nutzen! - Wiki verfuegbar - Bitte die neuste GIT-Revision von dieser Anleitung - Topic 180 herunterladen - Bug-Rallye gestartet! - Historisches Archiv angelegt - SVN-Howto - Commit-Statistik Feb 2008 - dato
profi-concept
Guest
Steht jetzt auch unter http://www.example.org zur verf�gung.
Project Founder
Registered: Sep 2005
Posts: 1395
Location: Krefeld
Das Ein- und Ausschalten von Cache-Dateien ist komplett veraltet, zudem wird im Howto ein veralteter Absicherungscode verwendet.
_______________
News-Flash: - Bitte den Bug-Tracker mehr nutzen! - Wiki verfuegbar - Bitte die neuste GIT-Revision von dieser Anleitung - Topic 180 herunterladen - Bug-Rallye gestartet! - Historisches Archiv angelegt - SVN-Howto - Commit-Statistik Feb 2008 - dato

Page: 1

Parse time: 0.2668 s · Memory usage: 0.57 MB · Server load: 3.70 · Template sections: 2 · SQL queries: 9

Nokia GNU GPL v3 YaCy Project Honeypot Stop ACTA!

Mailer-Project Community is powered by UseBB 1 Forum Software

threatening-alpha