web-dev-qa-db-fra.com

Paramètre sans cache du composant personnalisé

J'ai construit un composant personnalisé et il dispose d'une barre d'outils de filtre de recherche pour filtrer les résultats. Le problème est que, lorsque la mise en cache Joomla est activée, les filtres sont mis en cache avec les données de la page. Vous soumettez donc le formulaire pour définir de nouveaux filtres. Il renvoie simplement la page mise en cache, le pré-filtre.

Comment définir un en-tête sans cache ou obliger Joomla à ignorer la version mise en cache d'une vue lorsque vous transmettez de nouveaux paramètres?

MODIFIER POUR AJOUTER:

Le problème se produit avec les caches conservateur ou progressif, avec File et Memcached.

4
user101289

Vous n'avez pas indiqué quels paramètres de cache génèrent ce problème. Joomla a plusieurs niveaux de cache https://docs.joomla.org/Cache .

L'option de mise en cache la plus agressive est la mise en cache de pages (activée via le plug-in du système de cache). Cela sélectionnera une page en cache basée sur l'URI AVANT que votre composant soit même exécuté. Ici, je pense que votre seule option serait de définir la méthode de votre formulaire sur "get", cela transmettra les données du champ de formulaire dans le cadre de la chaîne de requête, de sorte que chaque recherche unique devrait générer une page mise en cache unique. Cela présente également l’avantage de permettre aux utilisateurs d’appuyer sur le bouton Précédent du navigateur sans que celui-ci leur demande s’ils souhaitent republier les données du formulaire. Cependant, l'inconvénient est que l'URL de votre page peut devenir moins lisible, car la chaîne de requête peut rapidement devenir très longue en fonction du nombre de filtres que vous avez.

Si vous n'utilisez pas le plug-in système, mais si vous activez le cache via la configuration globale du site, cela s'appelle la mise en cache 'view' et peut être gérée par le contrôleur de votre composant.

Dans ce cas, vous devrez créer un identifiant de cache à partir des données de formulaire publiées pour vous assurer qu'une page mise en cache unique est créée par jeu de filtres:

// Create the view
$view = $this->getView('myView', 'html');

// Build a cache id which will be unique per search: 
$user = JFactory::getUser();
$uri = JURI::getInstance();
$input = JFactory::getApplication()->input;
$cacheId = serialize(array($uri, $input->post, $user->get('id')));

// Create the cache
$cache = JFactory::getCache('com_mycomponent', 'view');
$cache->get($view, 'display', $cacheId);

J'ai coupé et condamné le code ci-dessus à partir du contrôleur de liste de Fabrik https://github.com/Fabrik/fabrik/blob/joomla3/components/com_fabrik/controllers/list.php qui doit traiter avec un problème similaire.

3
Rob Clayburn
0
kumarramalingam