drupal 8 – Implementación de etiquetas de caché personalizadas

Pregunta:

Me gustaría usar el nuevo Cache Tagging en D8 para ayudar a mantener sincronizado el contenido relacionado de diferentes tipos (entidades, nodos, bloques, etc.). Pero al leer la documentación disponible actualmente de esta función, no entiendo cómo agregar mi propia etiqueta de caché a los elementos de contenido al crear / actualizar dichos elementos.

Por ejemplo, al crear un nuevo nodo de un tipo Tienda, me gustaría agregar la ubicación de la etiqueta de caché: new_york_123 y lo mismo para un bloque. Luego, si cambiaba el nombre para mostrar de la ubicación 123 de Nueva York a SoHo, podría invalidar la etiqueta de caché y actualizar todo el contenido relacionado.

Respuesta:

Aquí se explica cómo usar etiquetas de caché en el contexto de bloques personalizados que he probado y funciona, pero creo que se aplica a otros contextos

Usar etiquetas de drupal predeterminadas

En la matriz de compilación, puede especificar cache > tags > node_list y este contenido de bloque se invalidaría (actualizaría) cuando se cambia CUALQUIER NODO sin nada más que hacer de su parte

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['node_list'], //invalidate when any node updates
            //'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
        ],
    );
}

Alternativamente , puede colocar una o más ID de nodo / término / usuario para invalidar la matriz en nodos o términos específicos como se muestra en el comentario de código anterior. Nota: puede mezclar y combinar nodos, términos, usuarios y etiquetas personalizadas como mejor le parezca.

Utilice sus propias etiquetas

si desea tener su propia forma de borrar su matriz de compilación, agregue su etiqueta única personalizada en la matriz de compilación (cualquier cadena única servirá)

public function build() {
    return array(
        '#markup' => MY_MODULE_awesome_dynamic_node_content(),
        '#cache' => [
            'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
        ],
    );
}

y en su lógica de código personalizado, llame a invalidateTags con su propia etiqueta

function MY_MODULE_custom_clear_cache_logic(){ 
    ...
    \Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));        

si desea leer más sobre los componentes internos de la caché de drupal 8

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım