{{ switch }} continues across nested loops when the inner count is odd
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 72/100
Piste de recherche
Le bogue se trouve dans la classe de la balise Rotate, qui conserve sa position dans un tableau statique $counts indexé uniquement par un hash md5 des paramètres de la balise. Commence par reproduire le problème avec le modèle de boucles imbriquées de l'issue, puis lis comment ce hash est construit et réinitialisé. C'est terminé lorsque chaque boucle interne recommence à la première valeur, avec un test couvrant les boucles imbriquées dont le nombre interne est impair.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug description
{{ switch }} tag does not restart at the beginning of each inner loop when it is rendered inside a nested loop.
The counter is shared for the whole request.
How to reproduce
With two values,
an odd inner loop makes the next parent item continue the previous sequence.
An even inner loop hides the problem, because the sequence lands back on the first value.
Steps to reproduce
{{ loop times="2" }}
{{ loop times="3" }}
{{ switch between="1|0" }}
{{ /loop }}
{{ /loop }}
Expected
Each inner loop starts again at the first value.
1 0 1
1 0 1
Actual
1 0 1
0 1 0
The second group is the continuation of the first (… 1 then 0 1 0), not a new 1 0 1.
Logs
Environment
Environment
Laravel Version: 12.70.2
PHP Version: 8.4.16
Composer Version: 2.10.2
Environment: local
Debug Mode: ENABLED
Maintenance Mode: OFF
Timezone: UTC
Locale: fr_CA
Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: CACHED
Drivers
Broadcasting: log
Cache: file
Database: sqlite
Logs: stack / single
Mail: smtp
Queue: sync
Session: file
Storage
public/storage: NOT LINKED
Statamic
Addons: 2
License Key: Not set
Sites: 2 (Français, English)
Stache Watcher: Disabled
Static Caching: Disabled
Version: 6.40.0 PRO
Statamic Addons
jacksleight/statamic-bard-texstyle: 4.2.3
mg/litespeed: dev-dev
Installation
Fresh statamic/statamic site via CLI
Additional details
Cause
Statamic\Tags\Rotate stores the position on a static array, keyed only by a hash of the tag parameters:
protected static $counts = [];
$hash = md5(implode(',', $this->params->all()));
if (! isset(static::$counts[$hash])) {
static::$counts[$hash] = 0;
}
$switch = $vars[static::$counts[$hash] % count($vars)];
static::$counts[$hash]++;
resetStaticState() clears that array between requests. Nothing clears it between iterations of the parent loop, and the hash does not include the parent iteration. Every render of the same {{ switch }} shares one counter.
A parameter such as for="gallery" does not scope the counter to a loop. It is only part of the hash, so it separates this tag from another {{ switch }} with different parameters.
- Langage dominant
- PHP
- Étoiles
- 4.9k
- Forks
- 647
- Merge moyen
- 23 h 42 min
- PR mergées (30 j)
- 148
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de statamic/cms
-
accessibility
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
Les mainteneurs répondent en général sous 1 jour
-
antlers
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
Les mainteneurs répondent en général sous 1 jour
-
antlers modifiers
Difficulté 2/5 1-3 heures Accessibilité débutants 57/100
statamic/cms#15832 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Multisite: switching site in the collection listing opens a different entry, not the localizationOuvertemultisite
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
Les mainteneurs répondent en général sous 1 jour
-
Select field preview disappears after reordering Replicator setsPeut-être pris @lazerg l’a pris il y a 4 jours. Ouvertefieldtypes
Difficulté 3/5 1-2 jours Accessibilité débutants 35/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de statamic/cms
Issues similaires
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Icinga/icinga-notifications-web#645 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
OpenMage/magento-lts#5865 ·
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
neos/flow-development-collection#3655 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Codeinwp/themeisle-companion#1014 ·
Les mainteneurs répondent en général sous 1 jour