Filtrage sur métadonnées du cache ou par son contenu html #6

Open
opened 6 months ago by JLuc · 2 comments
JLuc commented 6 months ago
Collaborator

Situation

Une noisette navigation qui calcule l'id_article suivant et précédent pour présenter des flèches de navigation.

Un cache de cette noisette doit être raffraichi si le statut de l'article précédent change ou si le statut de l'article suivant change

C'est à dire que le formulaire ou l'action qui change le statut de cet article ne doit pas raffraichir les caches ayant cet id_article dans son environnement, mais les caches de 2 autres articles, dont les valeurs calculées id_article_prec et id_article_next ont comme valeur l'id_article_courant.

Il semble qu'aucun des filtrages standards actuels ne permet cela, mais on peut créer une fonction de ciblage sur mesure (argument condition 'func')... ou proposer dans le plugin une nouvelle condition adaptée.

2 pistes : filtrage par le contenu du cache + filtrage par les métadonnées.

filtrage sur contenu du cache

Fournir un nouveau filtrage sur le contenu du cache, en ne cherchant qu'au début du cache.

return strpos(substr($html_cache, 0, $max_len), $str_cible) !== false

Le squelette devrait alors mettre ses data calculées en commentaire au début du cache.
<!-- id_voisin=#GET{id_prec_calculed} id_voisin=#GET{id_suiv_calculed} -->

Et ainsi, on pourrait cibler ces caches devant être raffraîchis par

cachelab_cibler(
	'del', 
    'contenu', 
	['partie'=>'debut', 'max_pos'=>20,
     'str_cible'=>"id_voisin=$id_article"]
);

Rq : De manière plus polyvalente on pourrait vouloir chercher un ensemble de valeurs possibles "$str1|$str2|$str3..." comme pour la condition 'chemin'.

filtrage par meta_données du cache

Fournir un filtre (ou une macro ? non je crois pas) (utilisable dans un squelette) et permettant de créer, modifier ou lire une meta_donnée du cache (et non son contenu html).

[(#REM|cachelab_set_metadata{id_voisins,#LISTE{#GET{id_voisin_prec},#GET{id_voisin_suiv}}})]

Et fournir un nouveau filtrage sur les valeurs des meta_données du cache :

cachelab_cibler(
	'del', 
    'metadata', 
	[ 'test_func'=>'in_array', 
	  'metadata'=>'id_voisins', 
	  'val'=>$id_article_courant ]
);

D'autres test_func seraient potentiellement utiles : in_str, ==, >, <, etc.

### Situation Une noisette `navigation` qui calcule l'id_article suivant et précédent pour présenter des flèches de navigation. Un cache de cette noisette doit être raffraichi si le statut de l'article précédent change ou si le statut de l'article suivant change C'est à dire que le formulaire ou l'action qui change le statut de cet article ne doit pas raffraichir les caches ayant cet id_article dans son environnement, mais les caches de 2 *autres* articles, dont les valeurs calculées id_article_prec et id_article_next ont comme valeur l'id_article_courant. Il semble qu'aucun des filtrages standards actuels ne permet cela, mais on peut créer une fonction de ciblage sur mesure (argument condition 'func')... ou proposer dans le plugin une nouvelle condition adaptée. 2 pistes : filtrage par le contenu du cache + filtrage par les métadonnées. #### filtrage sur contenu du cache Fournir un nouveau filtrage sur le contenu du cache, en ne cherchant qu'au début du cache. `return strpos(substr($html_cache, 0, $max_len), $str_cible) !== false` Le squelette devrait alors mettre ses data calculées en commentaire au début du cache. `<!-- id_voisin=#GET{id_prec_calculed} id_voisin=#GET{id_suiv_calculed} -->` Et ainsi, on pourrait cibler ces caches devant être raffraîchis par ``` cachelab_cibler( 'del', 'contenu', ['partie'=>'debut', 'max_pos'=>20, 'str_cible'=>"id_voisin=$id_article"] ); ``` Rq : De manière plus polyvalente on pourrait vouloir chercher un ensemble de valeurs possibles "$str1|$str2|$str3..." comme pour la condition 'chemin'. #### filtrage par meta_données du cache Fournir un filtre (ou une macro ? non je crois pas) (utilisable dans un squelette) et permettant de créer, modifier ou lire une meta_donnée du cache (et non son contenu html). ``` [(#REM|cachelab_set_metadata{id_voisins,#LISTE{#GET{id_voisin_prec},#GET{id_voisin_suiv}}})] ``` Et fournir un nouveau filtrage sur les valeurs des meta_données du cache : ``` cachelab_cibler( 'del', 'metadata', [ 'test_func'=>'in_array', 'metadata'=>'id_voisins', 'val'=>$id_article_courant ] ); ``` D'autres test_func seraient potentiellement utiles : in_str, ==, >, <, etc.
JLuc changed title from Filtrage sur le contenu html du cache OU sur metadata to Filtrage sur métadonnées du cache ou par son contenu html 6 months ago
Poster
Collaborator

Autre piste : fournir le moyen de cibler un cache depuis un squelette, lors de son calcul...

#CACHELAB_CIBLER {
  del,
  #ARRAY{ou,
  	#LISTE { 
       #ARRAY{chemin, navigation_prec_suiv,  
              cle_objet, id_article, 
              id_objet, #GET{id_article_prec}},
       #ARRAY{chemin, navigation_prec_suiv,
              cle_objet, id_article,
              id_objet, #GET{id_article_suiv}}
    }
  }
}

Mais du coup ça n'est pas utilisable quand le changement se fait parceque l'article est dépublié.

Autre piste : fournir le moyen de cibler un cache *depuis un squelette*, lors de son calcul... ``` #CACHELAB_CIBLER { del, #ARRAY{ou, #LISTE { #ARRAY{chemin, navigation_prec_suiv, cle_objet, id_article, id_objet, #GET{id_article_prec}}, #ARRAY{chemin, navigation_prec_suiv, cle_objet, id_article, id_objet, #GET{id_article_suiv}} } } } ``` Mais du coup ça n'est pas utilisable quand le changement se fait parceque l'article est dépublié.
Poster
Collaborator

Autre piste :

  • un filtre pour stocker les associations calculées (id_courant, id_prec, id_suiv) dans un même enregistrement memoization dédié à cet usage.
  • y récupérer les adjacents au changement de statut et appeler cachelab_cibler à leur sujet.
Autre piste : - un filtre pour stocker les associations calculées `(id_courant, id_prec, id_suiv)` dans un même enregistrement memoization dédié à cet usage. - y récupérer les adjacents au changement de statut et appeler cachelab_cibler à leur sujet.
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.