Hoi,
Na een intieme en gelukkige jarenlange relatie heb ik sinds 2 weken ruzie met Smarty. Door een nog onbekende reden output ie bij een aantal templates die eerst prima werkten nu een lege string. Geen error ofzo. Het ligt ook niet aan de output (headers/compressie whatever) - Smarty geef gewoon een lege string (strlen=0) terug. Na eindeloos debuggen sta ik op het punt dat ik even niet meer weet hoe ik dit kan oplossen.
Omdat mn template-systeem best complex werkt (veel templates-in-templates) heb ik aanvankelijk met divide-and-conquer gewerkt om het probleem te kunnen pinpointen. Er blijken meerdere stukken in de templates te zijn waar ie van over zn nek gaat, dus ik heb nu de eerste helemaal uitgeplozen. Het is een redelijk straightforward stukje code:
De variabele $component_block_pages is netjes gevuld met een associatieve array, zoals je mag verwachten:
Mijn theorie was dat er ergens in een key of value in de array iets 'raars' zat, dus ben ik de array eens gaan aanpassen:
Voor de duidelijkheid: $pages2 is de originele variabele. Om te debuggen assign ik $pages3 ipv $pages2
Stap 1
Eerst maar eens kijken bij welke key/value het misgaat. Dat blijkt de 26e entry van de array te zijn
Het gekke is dat ik niks vreemds aan de betreffende entry kan vinden. Deze is:
Stap 2
Maar... ligt het wel aan deze regel?
Nee. Uiteindelijk blijkt dat elke key/value na 26 Smarty doet crashen.
Stap 3
Ok. Ligt het uberhaupt aan de tekst in de key of value?
Zorgt er ook voor dat de template crasht. Huh???
Stap 4
Nu wordt ik redelijk wanhopig. Het zou niet uit moeten maken, maar toch maar eens proberen:
Dit werkt! Maar als ik ipv "27" eens "28" invul dan crasht ie weer. What the hell? De array kan dus maximaal 26 entries bevatten? Of andere mogelijkheid: De key "test26" is prima maar "test27" geeft problemen?
Ik weet het even niet meer. Ik zit waarschijnlijk op de verkeerde plek te zoeken, omdat ik niks heb aangepast aan de code of templates. Maar dit is even het enige aanknopingspunt wat ik heb...
Ik zit hier dus al 2 weken op te klooien, en sta op het punt om mijn monitor/muis/toetsenbord/een ander niet-levend eigendom iets ergs aan te doen. Graag jullie tips!
Na een intieme en gelukkige jarenlange relatie heb ik sinds 2 weken ruzie met Smarty. Door een nog onbekende reden output ie bij een aantal templates die eerst prima werkten nu een lege string. Geen error ofzo. Het ligt ook niet aan de output (headers/compressie whatever) - Smarty geef gewoon een lege string (strlen=0) terug. Na eindeloos debuggen sta ik op het punt dat ik even niet meer weet hoe ik dit kan oplossen.
Omdat mn template-systeem best complex werkt (veel templates-in-templates) heb ik aanvankelijk met divide-and-conquer gewerkt om het probleem te kunnen pinpointen. Er blijken meerdere stukken in de templates te zijn waar ie van over zn nek gaat, dus ik heb nu de eerste helemaal uitgeplozen. Het is een redelijk straightforward stukje code:
HTML:
1
2
3
4
5
| [...] {foreach from=$component_block_pages key=pageurl item=pagename} <option value="{$pageurl}">{$pagename}</option> {/foreach} [...] |
De variabele $component_block_pages is netjes gevuld met een associatieve array, zoals je mag verwachten:
code:
1
2
3
| [nieuwsberichten] => Het laatste nieuws [about] => Over ons enz... |
Mijn theorie was dat er ergens in een key of value in de array iets 'raars' zat, dus ben ik de array eens gaan aanpassen:
Voor de duidelijkheid: $pages2 is de originele variabele. Om te debuggen assign ik $pages3 ipv $pages2
Stap 1
Eerst maar eens kijken bij welke key/value het misgaat. Dat blijkt de 26e entry van de array te zijn
PHP:
1
2
3
4
5
6
| $counter = 0; foreach ( $pages2 as $kp1=>$vp1 ) { $counter++; if ( $counter < 26 ) { $pages3[$kp1] = $vp1; } else { echo $kp1 . " -> " . $vp1 . "<br />"; } } |
Het gekke is dat ik niks vreemds aan de betreffende entry kan vinden. Deze is:
code:
1
| demo_request -> Demo request |
Stap 2
Maar... ligt het wel aan deze regel?
PHP:
1
2
3
4
5
6
| foreach ( $pages2 as $kp1=>$vp1 ) { $counter++; if ( $counter < 26 ) { $pages3[$kp1] = $vp1; } elseif ( $counter > 26 ) { $pages3[$kp1] = $vp1; } else { echo $kp1 . " -> " . $vp1 . "<br />"; } } |
Nee. Uiteindelijk blijkt dat elke key/value na 26 Smarty doet crashen.
Stap 3
Ok. Ligt het uberhaupt aan de tekst in de key of value?
PHP:
1
2
3
4
5
6
| $counter = 0; foreach ( $pages2 as $kp1=>$vp1 ) { $counter++; if ( $counter < 26 ) { $pages3[$kp1] = $vp1; } else { $pages3["test" . $counter] = "test"; } } |
Zorgt er ook voor dat de template crasht. Huh???
Stap 4
Nu wordt ik redelijk wanhopig. Het zou niet uit moeten maken, maar toch maar eens proberen:
PHP:
1
2
3
4
5
| foreach ( $pages2 as $kp1=>$vp1 ) { $counter++; if ( $counter < 26 ) { $pages3[$kp1] = $vp1; } elseif ( $counter < 27 ) { $pages3["test" . $counter] = "test"; } } |
Dit werkt! Maar als ik ipv "27" eens "28" invul dan crasht ie weer. What the hell? De array kan dus maximaal 26 entries bevatten? Of andere mogelijkheid: De key "test26" is prima maar "test27" geeft problemen?
Ik weet het even niet meer. Ik zit waarschijnlijk op de verkeerde plek te zoeken, omdat ik niks heb aangepast aan de code of templates. Maar dit is even het enige aanknopingspunt wat ik heb...
Ik zit hier dus al 2 weken op te klooien, en sta op het punt om mijn monitor/muis/toetsenbord/een ander niet-levend eigendom iets ergs aan te doen. Graag jullie tips!