Silverstripe Version: 4.1
I have found away to do this with a controller function but I thought it was worth asking for my own understanding.
In the controller I made an array keyed with a category id:
$urls[$category->ID] = $page->URLSegment;
And sent it to the template with $this->customise([‘Urls’] => $urls)
In the template I did:
<% loop $Categories %>
<div class="col-12 col-sm-6 d-flex">
<a href="/$Top.getUrl($ID)" class="category-block">
<div class="category-icon">$IconSVG.RAW</div>
<div class="category-content">
<div class="category-title">$Title</div>
<div class="d-none d-lg-block">$Content</div>
</div>
</a>
</div>
<% end_loop %>
I’m looping the categories objects and I had hoped to access the SUrls array with the $ID of the current $Categories but I couldn’t get it done so I wrote that getUrl function in the controller to return it out of the array…
I tried $Top.$Urls.{$ID} and $Top.$Urls.${$ID}.
Obviously in php it’s simply:
echo $Urls[$ID]