critères pris 2 fois en compte
Le critère limit pris en compte par SMARTDATA est aussi pris en compte par la boucle. Il faut pouvoir désactiver sa prise en compte par la boucle.
Ainsi avec le critère {3,5} la source renvoie les items 3 à 7 au lieu de renvoyer 10000 items, mais la boucle ré-applique ce critère sur les résultats renvoyés, et au final il ne reste plus que les items 6 et 7 dans la boucle.
Autrement dit : « L'opération est un succés mais le patient est décédé »
En effet, le calcul du tableau source est fait au tout début de la compilation, alors que les critères sont calculés à la fin.
Effort à poursuivre
En l'état la fonction source to_smart_array définit une globale smart_criteres avec la liste des critères qu'elle a traité et que la boucle ne doit pas traiter, ou doit traiter différemment. Par exemple, cette globale vaut array ('limit' => '') aprés que la fonction _to_array ait totalement traité le critère {3,5} : car il ne reste plus rien dans 'limit' que la boucle SPIP doive encore gérer.
La compilation/exécution de la boucle doit en tenir compte pour ne PAS réutiliser ces critères (ou réutiliser la valeur trouvée dans la globale)
Il faut trouver où en amont gérer ça.