В приложении Silverstripe, которое я создаю, у меня есть NewsArticles
, у которых есть NewsTags
(создано с использованием silverstripe-tagfield). Я использую NewsTags
для создания виджета «Связанные новости» на боковой панели каждого NewsArticle
. Я создал действие RelatedArticles
в контроллере NewsArticle
, и все работает отлично.
Однако, чтобы использовать действие RelatedArticles
, я вынужден вызвать функцию три раза. Это не большая проблема, но я хотел бы свести к минимуму количество вызовов функции, которая выполняет несколько вызовов базы данных.
Вот урезанная версия моего файла шаблона RelatedNewsModule.ss
:
// First call to check if there are related articles
<% if $RelatedArticles %>
// second call to get the array
<% loop $RelatedArticles() %>
...
<% end_loop %>
// third call to check if there are more than one so we need navigation
<% if $RelatedArticles.Count > 1 %>
... navigation markup
<% end_if %>
<% end_if %>
Я хотел бы вызвать функцию один раз и, возможно, использовать свойства в шаблоне SilverStripe, которые будут ссылаться на две проверки и массив статей. Однако я не знаю, как это сделать.
Как лучше всего справиться с этой ситуацией?
if $RelatedArticles
иloop $RelatedArticles
, по крайней мере, для отношений $ has_many или $ many_many. В вашем случае вы будете кешировать его вручную в своем действии. См. Также docs.silverstripe.org/en/3.1/developer_guides/ производительность / - person wmk   schedule 05.02.2016