2017-02-14 18 views
2

Ich habe Schwierigkeiten, eine Variable in einer Vorlage zu erhalten, die eine GroupedList von DataObjects enthält, die eine has_one-Beziehung zu einem anderen DataObject haben.Silverstripe gruppierte Liste DataObjects - Variable von has_one in Vorlage erhalten

Beispiel: Ich habe das DataObject-Team gehört zu einer Region. Wenn ich eine gruppierte Liste der Teams erhalte, gruppiert nach der RegionID, kann ich nicht herausfinden, wie ich auf die Region.NAME in der Vorlage zugreifen kann.

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 arbeiten in der Vorlage nicht und ich versuchte, ein paar andere Dinge. Ich habe das Gefühl, dass die Lösung ziemlich offensichtlich ist, aber ich kann es nicht sehen und ich stecke fest.

Antwort

2

Als Abhilfe können Sie das erste Element der aktuellen Gruppe Elemente (aka $Children) und prüfen Sie die aktuelle Region wie diese greifen kann:

<% 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 %> 

Nebenbei bemerkt: bitte Ihre ‚$ db` Felder eher wie der Name Standard, "CamelCase" statt "GROß".

+0

Danke, das funktioniert super für meine Situation. Wenn es komplexer wird, mache ich vielleicht manuelle Schleifen, wie es Onkel Cheese vorgeschlagen hat. (Die UPPER-Case-Feldnamen sind eine Vermächtnis-Sache ...) – kiwiana

+0

Ich habe '$ Children.First.Region.NAME' abgekürzt, jetzt können Sie es ohne '<% with ..%>' verwenden –

1

So funktioniert GroupedList nicht. Es stimmt nur mit dem Feldwert überein, nicht mit der Beziehung selbst. Es scheint mir, du wärst besser dran, Regionen zu schleifen und eine innere Schleife für Teams zu schaffen, oder?

+0

Ok, danke, ich mach das statt dann ... – kiwiana

Verwandte Themen