我努力在模板中获取变量,该模板包含与另一个DataObject具有has_one关系的DataObjects的GroupedList。
实施例: 我有DataObject团队属于一个区域。当我得到团队的GroupedList,按RegionID分组时,我无法弄清楚如何访问模板中的Region.NAME。
class Region extends DataObject {
private static $db = array (
'NAME' => 'Varchar(128)',
'INFO' => 'Varchar(128)',
'PUBLIC' => 'Boolean'
);
public static $has_many = array(
'Teams' => 'Team'
);
}
class Team extends DataObject {
private static $db = array (
'NAME' => 'Varchar(255)',
'LEAGUE' => 'Varchar(255)',
'SORTNO' => 'Int'
);
public static $has_one = array(
'Region' => 'Region'
);
}
class TeamRegionPage extends Page {
public function getRegionGroupedTeams(){
return GroupedList::create(Team::get()->filter(array('PUBLIC' => 1))->sort('RegionID, SORTNO'));
}
}
TeamRegionPage.ss
<% loop $getRegionGroupedTeams.GroupedBy(RegionID) %>
<h2>Region name from has_one here: {$Region.NAME}</h2>
<% loop $Children %>
$NAME<br>
<% end_loop %>
$ Region.NAME在模板中不起作用,我尝试了其他一些东西。我觉得解决方案很明显,但我看不到它,而且我被卡住了。
答案 0 :(得分:3)
作为一种解决方法,您可以抓取当前组元素的第一个元素(又名$Children
)并检查当前区域,如下所示:
<% loop $getRegionGroupedTeams.GroupedBy(RegionID) %>
<h2>Region name from has_one here:
<% with $Children.First %>
$Region.NAME
<% end_with %>
</h2>
<% loop $Children %>
$NAME<br>
<% end_loop %>
<% end_loop %>
旁注:请将您的'$ db`字段命名为标准,'CamelCase'而不是'UPPERCASE'。
答案 1 :(得分:1)
这不是GroupedList的工作原理。它只匹配字段值,而不是关系本身。在我看来,你最好循环区域并为团队创建内循环,对吧?