2015-07-21 70 views
1

我正在使用SilverStripe中的博客模块。在模板中,它会循环使用博客条目功能。但是,我也在使用我正在循环访问博客的API。从另一个函数调用BlogEntries函数[SilverStripe]

<div class="blog-section"> 
    <% loop $getSlackMessage %> 
     <p id="author-tag">$UserName <span id="slackTimestamp">$Created.Format(h:i A)</span></p> 
     <p id="postDescription">$Text</p> 
    <% end_loop %> 
</div> 

<div class="blog-section"> 
    <% loop $getLatestTracks %> 
     <p id="track-name">$Name </p> 
    <% end_loop %> 
</div> 

<% loop BlogEntries %> 
     <article class="col-md-3 item" section-type="article"> 
       <% include BlogSummary %> 
     </article> 
<% end_loop %> 

所以你可以看到我在这里循环的3倍,这是因为每个博客持有人页面上有点恼人的$getSlackMessage$getLatestTracks将是可见的。这意味着当我走第2页时,我会看到我在第1页看到的同样的东西,下面有几条不同的文章。

如何合并所有这些循环并让SilverStripe将它们作为一个大循环吐出来,然后我可以通过创建时间进行排序?

如果您需要其他东西,请告诉我,谢谢。

回答

1

如果你想返回的getSlackMessagegetLatestTracks合并结果的函数,那么你可以这样写:

function consolidatedF() { 
    $slackMessages = $this->getSlackMessage(); 
    $latestTracks = $this->getLatestTracks(); 

    $resultList = new ArrayList($slackMessages->toArray()); 
    $resultList->merge($latestTracks->toArray()); 

    return $resultList; 
} 

然后循环它的模板<% loop $consolidatedF.Sort(Created, ASC) %>