Silverstripe 分组列表数据对象 - 从模板中的 has_one 获取变量
Silverstripe Grouped List DataObjects - get variable from has_one in template
我正在努力获取模板中的变量,该模板包含与另一个 DataObject 具有 has_one 关系的 DataObjects 的 GroupedList。
示例:
我的 DataObject Team 属于一个区域。当我获得按 RegionID 分组的团队的 GroupedList 时,我不知道如何访问模板中的 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 在模板中不起作用,我尝试了其他一些方法。我觉得解决方案很明显,但我看不到它,我被卡住了。
这不是 GroupedList 的工作方式。它只匹配字段值,而不匹配关系本身。在我看来,你最好不要循环区域并为团队创建一个内部循环,对吗?
作为变通方法,您可以获取当前组元素的第一个元素(又名 $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'。
我正在努力获取模板中的变量,该模板包含与另一个 DataObject 具有 has_one 关系的 DataObjects 的 GroupedList。
示例: 我的 DataObject Team 属于一个区域。当我获得按 RegionID 分组的团队的 GroupedList 时,我不知道如何访问模板中的 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 在模板中不起作用,我尝试了其他一些方法。我觉得解决方案很明显,但我看不到它,我被卡住了。
这不是 GroupedList 的工作方式。它只匹配字段值,而不匹配关系本身。在我看来,你最好不要循环区域并为团队创建一个内部循环,对吗?
作为变通方法,您可以获取当前组元素的第一个元素(又名 $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'。