web-dev-qa-db-fra.com

Mise en cache d'éléments avec une durée de vie de cache différente

Je cherche à utiliser le mécanisme de cache de Joomla pour un plugin. Cependant, il me faudrait mettre en cache les données du plug-in pendant une période donnée, quels que soient les paramètres de cache du site.

Est-il possible de remplacer la durée du cache à l'échelle du site, mais uniquement pour des données mises en cache spécifiques?

La question s’applique à la version actuelle de Joomla (3.8.12), mais aussi à la version J4, s’il ya des différences.

3
Spudley

Oui, vous pouvez mettre vos données en cache pour votre plugin en créant une nouvelle instance JCache et en définissant vos options personnalisées.

Quelque chose comme ci-dessous ferait cela:

// Reading global configuration params
$conf = JFactory::getConfig();

// Setting a location for your cached data.
$cacheBase = JPATH_SITE . '/cache/yourcachelocation';

// Your custom cachegroup
$cacheGroup = 'yourCacheGroup';

// Lifetime for your cache
$lifetime = 60;

// Setting your options
$options = array(
    'defaultgroup'  => $cacheGroup,
    'storage'       => $conf->get('cache_handler', ''),
    'caching'       => true,
    'cachebase'     => $cacheBase,
    'lifetime'      => $lifetime,
);

// Instantiate your cache object
$cache = JCache::getInstance('', $options);

// Create $cacheDataId  
$cacheDataId = 'yourCacheDataId';


// It's time to check for cached data
if ($cache->get($cacheDataId) !== false )
{
    $data = $cache->get($cacheDataId); // We got data from cache
}
else
{
    // No cached data, fetch fresh data
    $data = yourFreshDataGenerationMethod();

    // Cache the data for the next time
    $cache->store($data, $cacheDataId);
}

// Do Nice things with your $data

Mise à jour pour inclure les informations pertinentes trouvées dans les commentaires:

  • Vous pouvez utiliser $cachebase pour sélectionner un emplacement personnalisé pour vos données en cache.

  • Au lieu de spécifier que vous pouvez utiliser le $cachegroup, qui ferait la même chose.

  • Le plus important est le $cacheId lorsque vous stockez les données, car vous récupérerez vos données de cache stockées avec cet ID.

  • Notez que si vous donnez un chemin de répertoire personnalisé ($cachebase) pour stocker vos données en cache qui n'existent pas, vous devrez créer ce dossier, sinon cela ne fonctionnera pas, mais utiliser un groupe de cache créera automatiquement les dossiers de votre cache ou du moins voici comment Je me souviens que ça marche ...).

Je recommande d'essayer ces options et de voir exactement comment elles fonctionnent.

Liens utiles:

3
FFrewin