I would use a [% FOREACH card IN cards %] ... [% END %] block in the template and just show 'em in the order given
I do exactly that when each card is a similar layout and it's really just a case of substituting in values. But here, every card is totally different. Some have tables, others just a heading a line of text whereas others have a graph. Hence why I was thinking of a separate template file for each card.
| [reply] [d/l] |
If the cards are that different, I would keep them as separate files. This will make it easier to make changes to limited parts of the cards, and will maybe even encourage you to copy a template file for a slightly (but enough) different new card.
As switching to a different card means a reload (I guess), keeping the different cards as different templates makes sense.
| [reply] |
If the cards are that different, I would keep them as separate files.
In most cases, there is no similarity between them other than colours, font sizes and fonts.
As switching to a different card means a reload (I guess)
The cards are all displayed at the same time. One after the next. The current system is designed to be viewed on mobile and has a very constrained width on desktop so they appear one below the previous one. The refactored version may make use of the width of a desktop and display the cards in columns but, as they are all different heights, that won't be trivial.
| [reply] |
Hm, so maybe the card hash in the array cards has a field card.data and a field card.template, and then inside the loop you process the template with the data using INCLUDE? You can reference data in variables using a sigil in nested directives for this.
Hope this helps!
The way forward always starts with a minimal test.
| [reply] [d/l] [select] |
[% templatefile = card.template %]
[% INCLUDE "$templatefile" %]
Thanks - I will test doing something along those lines | [reply] [d/l] |