Cache ipbSDK vs cache IPB

Afin d'afficher 2 blocs d'informations supplémentaires sur ma page d'accueil, je me suis mis à étudier les requêtes MySQL engendrées par le ipbSDK afin d'en réduire leur nombre et de pouvoir en mettre 2 de plus pour mes 2 blocs :). Et la surprise :

[sql]
SELECT * FROM ibf_cache_store WHERE cs_key IN ( 'banfilters', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats', 'languages' )
[sql]
SELECT cs_value FROM ibf_cache_store WHERE cs_key = "stats"

A quoi sert de charger les informations issue du cache IPB (1ère requête), si la fonction get_board_stats() ne les utilise pas ???!!! La réponse est malheureusement simple, le cache ipbSDK ($this->_CACHE) et celui d'IPB ($GLOBALS'ibforums'->cache) sont différents... J'ai d'abord pensé charger le cache IPB dans celui du SDK:

[php]
$this->_cache = $GLOBALS['ibforums']->cache

Mais quel intêret de 2 cache identique ? Et de plus je trouvais que leur vocations étaient différentes car le cache du SDK pouvais contenir des informations sur le membres et non pas uniquement sur le forum... J'ai donc modifié la fonction get_board_stats() pour qu'elle interroge non pas le cache ipbSDK mais celui d'IPB. Bilan, 1 requêtes de gagnée !!!

[php]
/**
* Obtenir les statistiques de mon forums.
* Modification : Liaison avec le cache IPB au lieu de celui du SDK.
* @author Guillaume Kulakowski <guillaume_AT_llaumgui_DOT_com>
* @author Pita (conversion to 2.0) <peter_AT_randomnity.com>
* @author Cow <khlo_AT_global-centre.com>
* @return array Board Statistics
*/
function get_board_stats() {
    // 1 : Je cherche dans le cache IPB :
    if ( !empty($GLOBALS['ibforums']->cache['stats']) && is_array($GLOBALS['ibforums']->cache['stats']) )
        { return $GLOBALS['ibforums']->cache['stats']; }        
    else
        {
            $this->DB->query ('SELECT cs_value FROM ibf_cache_store WHERE cs_key = "stats"');
            $row                                     = $this->DB->fetch_row();
            $stats                                    = unserialize(stripslashes($row['cs_value']));
            $GLOBALS['ibforums']->cache['stats']     =  $stats;
            return $stats;
        }
}

A noter que la modification utilise ma classe MySQL et que je n'ai pas modifié la fonction du SDK mais que je l'ai redéfinie.

Attribution - Partage dans les Mêmes Conditions 4.0 International