2013-10-22 54 views

回答

1

colymba的答案已經說了大部分,但除了你也可以在$summary_fields指定的方法。這允許您在GridField中顯示圖像縮略圖,或者根據需要顯示圖像縮略圖,並將它們從many_many關係的標題中拼湊出來。

class TeamMember extends DataObject { 
    private static $db = array(
     'Title' => 'Text', 
     'Birthday' => 'Date', 
    ); 
    private static $has_one = array(
     'Photo' => 'Image' 
    ); 
    private static $has_many = array(
     'Teams' => 'Team' 
    ); 
    private static $summary_fields = array(
     'PhotoThumbnail', 
     'Title', 
     'Birthday', 
     'TeamsAsString', 
    ); 
    public function getPhotoThumbnail() { 
     // display a thumbnail of the Image from the has_one relation 
     return $this->Photo() ? $this->Photo()->CroppedImage(50,50) : ''; 
    } 
    public function getTeamsAsString() { 
     if (!$this->Teams()) { 
      return 'not in any Team'; 
     } 
     return implode(', ', $this->Teams()->Column('Title')); 
     // or if one field is not enough for you, you can use a foreach loop: 
     // $teamsArray= array(); 
     // foreach ($this->Teams() as $team) { 
     //  $teamsArray[] = "{$team->ID} {$team->Title}"; 
     // } 
     // return implode(', ', $teamsArray); 
    } 
} 

替代就可以了,因爲colymba指出,還可以使用setDisplayFields在不同的網格

+0

正是我需要的和更多 - 縮略圖功能也非常有用。謝謝 – invictus

+0

是否也可以獲取模板中顯示的每個團隊的鏈接?這樣我就可以在每個球員旁邊爲他所在的球隊建立鏈接。我嘗試着修改你的功能(評論中的部分),但沒有成功 – invictus

+0

你的意思是在你擁有球隊列表的球隊中:「第1隊,第2隊,第3隊「,當我按下」第3隊「時,我會得到該隊的編輯表格?我猜它是可能的,但它可能會更復雜,我需要看看那個 – Zauberfisch

2

應該有幾個解決方案:

的數據對象定義$summary_fields一個鏈接:

private static $summary_fields = array(
    'YourFieldName', 
    'AnotherField' 
); 

或與頁面/數據對象上定義關係的GridFieldConfig

$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(  
    'FieldName' => 'GridFieldColumnName', 
    'AnotherFieldName' => 'AnotherGridFieldColumnName', 
)); 

$config是您的GridFieldConfig實例,由GridField使用。

編輯

更先進的格式/納入GridField對數據的控制,你可以使用setFieldFormatting

$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(  
    'TeamLink' => 'Edit teams' 
)); 

$config->getComponentByType('GridFieldDataColumns')->setFieldFormatting(array(
    'TeamLink' => function($value, $item) 
    { 
     // $item here would be a TeamMember instance 
     // since the GridField displays TeamMembers 

     $links = 'No teams'; 

     $teamModelAdminClass = 'TeamModelAdmin'; //change to your classname 
     $teams = $item->Teams(); // get the teams 

     if ($teams->count() > 0) 
     { 
     $links = ''; 
     $teamClass = $teams->dataClass; 

      $teamAdminURL = Config::inst()->get($teamModelAdminClass, 'url_segment'); 
      $teamEditAdminURL = 'admin/'.$teamAdminURL.'/'.$teamClass.'/EditForm/field/'.$teamClass.'/item/';  

      foreach($teams as $team) 
      { 
      $links .= '<a href="'.$teamEditAdminURL.$team->ID.'/edit">Edit '.$team->Title.'</a><br/>'; 
      } 
     } 

     return $links; 
    } 
)); 

這裏setFieldFormatting將輸出編輯鏈接到所有團隊,一個TeamMember是部分TeamLink列由setDisplayFields定義(可能不是最好的例子,但希望你明白,儘管未經過測試)。

+0

喜用不同的領域,謝謝你,但定義summary_fields不是問題。每個成員都有多個團隊,我需要把成員所在團隊的名單翻過來。但是你的第二個代碼片段是有用的:)感謝你的支持 – invictus

+1

無後顧之憂......如果你想更多地控制顯示的數據在GridField中,你可以使用'setFieldFormatting',看到答案中的編輯。 – colymba

+0

不錯。但直到現在我不知道在哪裏使用它。你有什麼我可以使用它的例子嗎? – invictus

相關問題