it-swarm.com.de

Benutzerdefinierte Einstellung für die Komponente ohne Cache

Ich habe eine benutzerdefinierte Komponente, die ich erstellt habe, und eine Suchfilter-Symbolleiste zum Filtern der Ergebnisse. Das Problem ist, dass bei aktiviertem Joomla-Caching die Filter zusammen mit den Seitendaten zwischengespeichert werden. Sie senden also das Formular, um neue Filter festzulegen, und geben einfach den Vorfilter der zwischengespeicherten Seite zurück.

Wie können Sie einen No-Cache-Header festlegen oder Joomla auf andere Weise zwingen, die zwischengespeicherte Version einer Ansicht zu ignorieren, wenn Sie neue Parameter übergeben?

BEARBEITEN ZU HINZUFÜGEN:

Das Verhalten tritt sowohl bei konservativem als auch bei progressivem Cache sowie bei Datei und zwischengespeichertem Cache auf.

4
user101289

Sie haben nicht angegeben, welche Cache-Einstellungen dieses Problem verursachen. Joomla hat mehrere Cache-Ebenen https://docs.joomla.org/Cache .

Die aggressivste Caching-Option ist Page Caching (über das Cache-System-Plugin aktiviert). Dies wählt eine zwischengespeicherte Seite basierend auf dem URI aus, BEVOR Ihre Komponente überhaupt ausgeführt wird. Hier denke ich, dass Ihre einzige Option darin besteht, die Methode Ihres Formulars auf "get" zu setzen. Dadurch werden die Daten des Formularfelds als Teil der Abfragezeichenfolge übergeben, sodass bei jeder eindeutigen Suche eine eindeutige zwischengespeicherte Seite generiert werden sollte. Dies hat auch den Vorteil, dass Benutzer die Zurück-Taste des Browsers drücken können, ohne dass der Browser fragt, ob sie die Daten des Formulars erneut veröffentlichen möchten. Der Nachteil ist jedoch, dass die URLs Ihrer Seite möglicherweise weniger lesbar sind, da die Abfragefolge je nach Anzahl der von Ihnen verwendeten Filter schnell sehr lang werden kann.

Wenn Sie nicht das System-Plugin verwenden, sondern den Cache über die globale Konfiguration der Site aktivieren, wird dies als Ansichts-Caching bezeichnet und kann vom Controller Ihrer Komponente verarbeitet werden.

In diesem Fall müssen Sie eine Cache-ID aus den bereitgestellten Formulardaten erstellen, um sicherzustellen, dass pro Filtersatz eine eindeutige zwischengespeicherte Seite erstellt wird:

// 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);

Ich habe den obigen Code aus Fabriks Listencontroller herausgeschnitten und komprimiert https://github.com/Fabrik/fabrik/blob/joomla3/components/com_fabrik/controllers/list.php der damit umgehen muss mit einem ähnlichen Problem.

3
Rob Clayburn
0
kumarramalingam