INCLURE sans perdre les {doublons}

Salut,

j'ai l'impression que le critère {doublons}
est local à un unique fichier .html.

Si ce fichier est une suite d'inclure,
il n'y a pas moyen de communaliser les listes de {doublons}
de ces différents fichiers inclure.
Et la spécification d'un nom de liste {doublons nomdeliste}
n'y change rien...

C'est également ce qu'indique le forum
http://forum.spip.org/fr_182224.html

Mais la solution préconisée sur ce forum :
recopier les boucles incluses, à vide, dans le fichier appelant,
n'est pas du tout satisfaisante...

Il me semble que ce besoin est assez largement répandu
avec l'engouement pour les squelettes à noisettes...

Alors comment faire pour que différents fichiers inclus
puissent utiliser une même liste de {doublons}?

JLuc

Salut,

j'ai l'impression que le critère {doublons} est local à un
unique fichier .html.

Si ce fichier est une suite d'inclure,
il n'y a pas moyen de communaliser les listes de {doublons}
de ces différents fichiers inclure.
Et la spécification d'un nom de liste {doublons nomdeliste}
n'y change rien...

C'est également ce qu'indique le forum
http://forum.spip.org/fr_182224.html

Mais la solution préconisée sur ce forum :
recopier les boucles incluses, à vide, dans le fichier
appelant, n'est pas du tout satisfaisante...

Il me semble que ce besoin est assez largement répandu avec
l'engouement pour les squelettes à noisettes...

Alors comment faire pour que différents fichiers inclus
puissent utiliser une même liste de {doublons}?

Jluc

Pour l'instant on ne peut pas (question de performances, notament).

JLuc wrote:

Mais la solution préconisée sur ce forum :
recopier les boucles incluses, à vide, dans le fichier appelant,
n'est pas du tout satisfaisante...

C'est bien la seule solution :wink:

Alors comment faire pour que différents fichiers inclus
puissent utiliser une même liste de {doublons}?

j'ai l'impression qu'on ait déjà discutté cela la semaine dernière...

les fichiers inclus ont un cache différent, un temps de recalcul potentiellement différent donc. A ce moment là, c'est un peu ingérable cette question de doublons partagés entre les inclusions.
Par exemple, si tu as un squelette principal qui calcul des doublons et se recalcul toutes les heures, mais que le squelette inclus se recalcul tous les 10 jours, alors les doublons utilisés au calcul de l'inclusion ne sont plus les mêmes...

Il faudrait donc recalculer l'inclusion en même temps que le squelette qui l'inclus. Du coup, côté perf du cache, ça revient au même que d'avoir un temps de recalcul identique, et donc, que d'avoir la boucle incluse directement dans le squelette.

Côté modularisation du squelette, c'est effectivement pratique de mettre des blocs de code dans un inclure, mais avoir des squelettes inclus qui se comportent différement en fonction d'où ils sont inclus (si le doublons etait passé par exemple) devient un peu difficile à gerer (à mon avis) puisqu'on ne sait plus exactement ce qu'on va inclure.
Je pense donc que le choix d'extraire la boucle de l'inclusion pour ne garder que le bloc statique dedans est un meilleur choix côté "propreté" de la noisette :slight_smile:

Enfin, voilà l'idée. Si tu veux transferer les doublons d'un squelette à un autre, tu peux jouer du set, eval et get j'imagine:
<BOUCLE_makedbl(ARTICLES) {!doublons blabla}>
#EVAL{array_push($doublons_blabla,#ID_ARTICLE)}
</BOUCLE_makedbl>
<INCLURE{fond=truc}{doublons=[(#GET{doublons_blabla}|toregexp)]}>

et dans le inclure:
<BOUCLE_art(ARTICLES) {id_article !== #ENV{doublons}}>
...

et en filtre dans mes_fonctions:

function toregexp($array) {
return '('.join('|',$array).')';
}

Pierre

PS: c'est juste un debut de code, je suis sûr qu'il y a un ou deux details qui manquent :wink:

Pierre Andrews wrote:

les fichiers inclus ont un cache différent, un temps de recalcul potentiellement différent donc. A ce moment là, c'est un peu ingérable cette question de doublons partagés entre les inclusions.

Merci pour le rappel.
Je comprend bien, ainsi que l'exemple que tu as détaillé.

Dans mon cas, le fichier appelant ne génère pas les doublons lui même :
il ne fait qu'inclure plusieurs fois de suite le fichier inclus,
et j'aurais besoin que la liste de doublons soit mémorisée
à l'intérieur de ce sous-squelette,
avec une valeur différente cependant pour chaque fichier squelette principal.

Par ailleurs,
si j'enlève les boucles de mon squelette inclu, il n'y reste plus rien !

Si tu veux transferer les doublons d'un squelette à
un autre, tu peux jouer du set, eval et get j'imagine:
<BOUCLE_makedbl(ARTICLES) {!doublons blabla}>
#EVAL{array_push($doublons_blabla,#ID_ARTICLE)}
</BOUCLE_makedbl>
<INCLURE{fond=truc}{doublons=[(#GET{doublons_blabla}|toregexp)]}>

et dans le inclure:
<BOUCLE_art(ARTICLES) {id_article !== #ENV{doublons}}>
...

et en filtre dans mes_fonctions:

function toregexp($array) {
return '('.join('|',$array).')';
}

oh yeah;
c'est une jolie piste un peu complexe
mais que je vais essayer d'adapter,
avec plus de php et moins de spip cependant
car ce site est encore en 1.8.x

genre :
passer à l'inclure un nom-référence de fichier appelant
et gérer localement dans le fichier inclu
l'ensemble des doublons pour un fichier appelant donné.

JLuc