Moet het in Smarty? PHP is zelf een prima template engine :p.
Je zult ongeveer hetzelfde moeten doen als in PHP, dus iets met assign (om een waarde tijdens een loop te onthouden) en een if-statement.
Maar wat je dan doet is in Smarty nog eens dunnetjes overdoen wat je in PHP al kon doen. In dit geval lijkt het mij dat Smarty het verkeerde gereedschap is voor de klus.
Het meeste wat je in Smarty kunt doen kan ook prima in PHP zelf. Waarom zou je een alternatieve syntax voor dezelfde functionaliteit willen hebben? Los daarvan, je bent hier een hoop logica in een (pseudo) template-taal aan het proppen :/.
En als het de bedoeling is dat hier non-programmeurs aan kunnen freubelen... Maak in plaats hiervan een klasse waarmee je gecategoriseerde lijsten kunt configureren ofzo. Kan er ook niets gebroken worden.
Ben benieuwd waarom je bedacht hebt dat dit in Smarty zou moeten.
Mijn CMS gebruikt nu eenmaal Smarty, en dat pas je niet even zomaar aan ;-).
In mijn ogen is dit een meer een stukje logica wat prima in Smarty zou kunnen. Of het netjes is, is een tweede. Maar op welke manier zou jij het dan doen? En een hoop logica, dat is wel erg overdreven gezegd, Thomas.... Het zijn maar drie regeltjes met vergelijking en toewijzing.
Ikzelf heb inmiddels gevonden dat er een {assign} variabele in Smarty bestaat. Nu maar hopen dat deze overschreven kan worden. Dan zou het moeten werken, maar dat moet ik nog even uittesten.
Het ontwerp van de architectuur van het CMS staat los van deze scope. Dus ik snap niet waarom je zo op tegen bent. Met rants zoals 'Rommel' schiet ook niemand wat op.
Gelieve je in het vervolg wat positiever op te stellen.
Actually, no. Bij vraagstukken op het forum kijk ik altijd of de ingeslagen weg wel een goede is. Ik geef niet enkel een oplossing zonder context. De oplossing is in zekere zin niet relevant. Het gaan om de motivatie voor een aanpak, want daaruit blijkt of iemand snapt waar 'ie mee bezig is en kan hem/haar verder sterken in de gekozen oplossing.
Als ik denk dat de aanpak onjuist is zal ik dat niet onder stoelen of banken steken. Smarty is een middel, geen doel. Blijkbaar is het voor jou toch belangrijk dat het op deze manier moet. Dit begrijp ik niet, en blijkbaar kun je dat ook niet echt motiveren.
Het ontwerp en de architectuur lijken mij juist belangrijk in dit vraagstuk. Immers, je had zelf al in PHP een oplossing klaarliggen, maar je probeert nu uit te zoeken hoe dit in Smarty zou moeten. Dit klinkt als het proberen een barricade te overkomen die je zelf hebt opgeworpen. Ik zou zeggen, neem de barricade weg dan heb je dit probleem in eerste instantie niet.
Daarbij gaf ik trouwens aan hoe het op te lossen zou moeten zijn (middels de assign constructie), misschien had ik duidelijker moeten zijn dat dit (ook) een Smarty-ding is.
Ooit en later ga ik Smarty uitfaseren, maar je zult toch echt moeten begrijpen dat dat niet eenvoudig is.
Planning, kosten, aanpassing aan de architectuur. Dat gaan niet altijd over één nacht ijs. En ik heb een vermoeden dat jij dat ook wel zou weten.
Probeer je meer op de vraag van de topicstarter te focussen i.p.v. vooral naar het geheel en de nadelen te kijken.
Hier de code voor de liefhebbers:
{assign var="previousItem" value=""}
{section name=nummers loop=$data}
{if $previousItem != $data[nummers].Subcategory}
<tr>
<td colspan="6"><b>{$data[nummers].Subcategory}</b></td>
</tr>
{assign var="previousItem" value=$data[nummers].Subcategory}
{/if}
<tr>
<td>{! uitvoer van data hier *}</td>
</tr>
[quote="- Ariën - op 01/06/2017 13:18:26"]Planning, kosten, aanpassing aan de architectuur. Dat gaan niet altijd over één nacht ijs. En ik heb een vermoeden dat jij dat ook wel zou weten.
Zeker, en daarom denk ik ook altijd goed na voordat ik ergens aan begin.
[/quote]
True, maar er bestaat ook vaak legacy-code, wat niet 1-2-3 om te bouwen is.
Smarty gebruik ik al 10 jaar met plezier, en ombouw kost mij voorlopig teveel tijd, hoewel ik het graag anders wil. Een template-set van honderden templates ombouwen is ook niet zo gedaan.
Lang leve roadmap's die je planning op pijl houden. Anders blijf je na 5 jaar bezig met hetzelfde project.
Zo vlot zal dat niet gaan. En ik ben al blij dat ik de architectuur van mijn CMS al flink heb aangepast zodat het weer robuuster en toekomstbestendiger wordt. Smarty wordt nog steeds ontwikkeld, dus ik zie dat niet echt als Technical Debt.
Thomas van den Heuvel op 01/06/2017 13:13:58
Blijkbaar is het voor jou toch belangrijk dat het op deze manier moet. Dit begrijp ik niet, en blijkbaar kun je dat ook niet echt motiveren.
Misschien moet je dat toch maar eens gaan begrijpen. In mijn eerste reply gaf ik al aan dat het niet makkelijk anders kan. Waarom moet ik mij verantwoorden over mijn architectuur van mijn applicatie die jij misschien wel 'ruk' kan vinden, maar ik zelf niet?
Persoonlijk had ik het overigens prettiger gevonden als je minder op je eigen oplossing stond te hameren. Respecteer gewoon dat JOUW oplossing NIET ALTIJD even makkelijk kan worden uitgevoerd! Zie het als een berg zand die je wilt verplaatsen van de ene kant van de weg naar de andere kant. Je kan een shovel gebruiken en de boel in één keer verplaatsen. Maar dat kost een hoop werk om dat te huren en een hoop tijd om de weg af te laten zetten omdat je een vergunning moet hebben. Terwijl een kruiwagen op dit moment veel eenvoudiger is, maar wat meer tijd kost.
Een advies geven is prima. Maar geef dan ook twee wegen als je oplossing een basale aanpassing is: De beste weg en de snelste weg die een hobbelpad gaat.