Wie kann ich einen Cache in einer bestimmten Ansicht ungültig machen?

8

Ich bin mit einer Situation konfrontiert, in der ich eine bestimmte Ansicht ungültig machen muss, um das Löschen des Caches in dieser Ansicht einzuleiten.

views_invalidate_cache () löscht ALLE zwischengespeicherten Ansichtsdaten für jede Ansicht auf der Site.

Wie kann ich innerhalb meines Modulcodes eine Cache-Ungültigmachung für eine bestimmte Ansicht auslösen?

sheldonkreger
quelle

Antworten:

3

Ich glaube, die Funktion, die Sie suchen, ist cache_flush aus dem Views Cache Plugin.

Coleman
quelle
Korrigieren Sie mich, wenn ich falsch liege, aber es sieht so aus, als müssten Sie die gesamte Ansicht im Bereich haben, um dies auszuführen. Das ist natürlich möglich, aber es scheint, dass es eine Funktion geben sollte, die ich wie cache_flush ($ view_id) aufrufen kann, ohne die gesamte Ansicht laden zu müssen. Nur neugierig :-)
Sheldonkreger
cache_flushist nur Drupal 6 und 7? Ich sehe es nicht im Views-Modul für Drupal 8.
Yzmir Ramirez
10

Wenn Sie den Namen der Ansicht kennen, die Sie löschen möchten, können Sie die für diese Ansicht spezifischen Caches löschen, indem Sie eine Funktion wie die folgende aufrufen:

/**
 * Function to invalidate selected views caches to enable the action forms to work
 */
function mymodule_invalidate_views_cache($view_name) {
  cache_clear_all('ctools_export:views_view:' . $view_name, 'cache_views', TRUE);
  cache_clear_all($view_name, 'cache_views_data', TRUE);
}

Ich brauchte dies, damit VBO-Aktionen mit Konfigurationsformularen funktionieren können, während das Zwischenspeichern von Ansichten aktiviert ist (ich verwende das Zwischenspeichern von Inhalten). Ich habe dies zweimal aufgerufen, einmal in der Funktion mymodule_myaction_form () und erneut in der Funktion mymodule_myaction_submit ().

jlscott
quelle
1

Sie können den Inhaltscache für Ansichten verwenden .

Es wird normalerweise verwendet, um einen Ansichts-Cache automatisch zu löschen, wenn verwandte Inhalte hinzugefügt oder aktualisiert werden. Es bietet jedoch ein Framework zum Überwachen eines Cache-Segments. Ich habe dies nicht getan, aber Entwicklerdokumente sind verfügbar.

Dave Bruns
quelle
Ich suche speziell nach einer Möglichkeit, einen Views-Cache mit PHP aus meinem eigenen Modulcode heraus auszurichten. Vielen Dank, dass Sie dies geteilt haben. Es könnte jedoch anderen helfen. Mein Cache-Problem ist für dieses Modul nicht geeignet.
Sheldonkreger
1

Schauen Sie sich das Projekt Cache-Aktionen an . Es macht genau das, was Sie wollen. Wenn Sie in Ihrer Situation Regeln verwenden können, müssen Sie nicht einmal benutzerdefinierten Code schreiben. Sie können das Modul einfach unverändert verwenden und Regeln einrichten, um die Caches bestimmter Ansichten zu löschen. Andernfalls lesen Sie in den Interna nach, wie es funktioniert, um View-Caches programmgesteuert zu löschen.

Coleman
quelle
Gute Informationen für andere, die möglicherweise hier landen, aber ich brauchte speziell eine Möglichkeit, einen Ansichts-Cache an einer bestimmten Stelle in meinem PHP-Code zu leeren.
Sheldonkreger
0

Um Sie nicht zu sehr zu überdenken, aber haben Sie ein Reverse-Proxy-Caching-System wie Lack in Betracht gezogen? Diese Dinge bieten eine unglaubliche Leistung und machen das DB-Caching von Ansichten, Knoten usw. etwas umstritten (es sei denn, Sie haben viele angemeldete Benutzer und benötigen dieses Caching für sie).

Coleman
quelle
Dies ist eine großartige allgemeine Leistungsempfehlung, beantwortet jedoch nicht die spezifische Frage, die ich gestellt habe. Gute Infos.
Sheldonkreger