[英]How to group external API json data by date in silverstripe 3 template?
我可以使用RestfulService從RestAPI讀取和顯示數據,但不能按日期值對這些數據進行分組。 我當前的代碼工作正常
$myList = ArrayList::create();
foreach ($jsonData['list'] as $result) {
$myresult = $result;
$myList->push($myresult);
}
我之前在DataObject上使用過GroupedList :: create(),但是如何將其與ArrayList一起使用。
例如當我在$ foreach中打印$ result時給出
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16')
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16')
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
我需要分組
newArray['2018-01-16'][0] = array(
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16'),
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16'),
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
);
謝謝。
鑒於您的數據如下:
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16')
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16')
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
正如Robbie Averill所述,您可以將其放入SilverStripe ArrayList中以進行處理。 當ArrayList實現SS_List接口時,您可以將ArrayList數據提供給GroupedList並按數據字段(在本例中為“日期”)分組。 在您的控制器中輸入以下內容:
/**
* @return GroupedList
**/
public function getGroupedAPIData() {
$data = ....; //get your data...
$myList = ArrayList::create($data);
$groupedList = GroupedList::create($myList);
return $groupedList;
}
注意:此GroupedList對象目前尚不知道如何對數據進行分組,我們可以使用GroupedBy
方法在模板中進行配置。 它返回另一個可以循環調用的列表$Children
:
<% loop $GroupedAPIData.GroupedBy(Date) %>
<h3>$Date</h3>
<ul>
<% loop $Children %>
<li>$Title ($ID)</li>
<% end_loop %>
</ul>
<% end_loop %>
如果您需要有關通過API消耗的數據的更多邏輯,則可以使用自定義邏輯將獲得的數據轉換為ViewableData的子類。
感謝您提供示例數據。
您可以使用嵌套的ArrayLists實現此目的。 這比僅使用PHP數組要稍微復雜一些,但這是一個示例:
$myList = ArrayList::create();
foreach ($jsonData['list'] as $result) {
// Look for an existing holder list
if (!$myList->find('Date', $result['Date'])) {
// Create one
$myList->push([
'Date' => $result['Date'],
'List' => ArrayList::create(),
]);
}
// Get the list now that we know it's there
$subList = $myList->find('Date', $result['Date']);
// Push the current result record into the grouped list
$subList->List->push($result);
}
return $myList;
然后,您可以像這樣循環輸入模板:
<% loop $GetMyList %>
<h2>{$Date.XML}</h2>
<ul>
<% loop $List %>
<li id="{$Id.ATT}">{$Title.XML}</li>
<% end_loop %>
</ul>
<% end_loop %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.