【问题标题】:Silverstripe Grouped List DataObjects - get variable from has_one in templateSilverstripe 分组列表数据对象 - 从模板中的 has_one 获取变量
【发布时间】:2017-07-02 05:51:28
【问题描述】:

我正在努力在模板中获取一个变量,该模板包含一个 DataObjects 的 GroupedList,这些 DataObjects 与另一个 DataObject 具有 has_one 关系。

示例: 我的 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 在模板中不起作用,我尝试了其他一些方法。我觉得解决方案很明显,但我看不到它,我被卡住了。

【问题讨论】:

    标签: templates variables grouping silverstripe has-one


    【解决方案1】:

    这不是 GroupedList 的工作方式。它只匹配字段值,而不是关系本身。在我看来,循环区域并为团队创建内部循环会更好,对吧?

    【讨论】:

      【解决方案2】:

      作为一种解决方法,您可以获取当前组元素的第一个元素(又名$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”。

      【讨论】:

      • 谢谢,这对我的情况很有用。如果它变得更复杂,我可能会像 UncleCheese 建议的那样进行手动循环。 (大写字段名称是遗留的东西......)
      • 我已经缩短为$Children.First.Region.NAME,现在你可以在没有&lt;% with ..%&gt;的情况下使用它
      猜你喜欢
      • 2022-06-20
      • 2011-09-08
      • 2013-04-13
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      相关资源
      最近更新 更多