如何在GridField Summary中顯示來自many_many關係的標題?在GridField中顯示來自many_many關係的標題 - Silverstripe
我RelationName.Title嘗試過,但結果卻是隻有一個空場
如何在GridField Summary中顯示來自many_many關係的標題?在GridField中顯示來自many_many關係的標題 - Silverstripe
我RelationName.Title嘗試過,但結果卻是隻有一個空場
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
在不同的網格
應該有幾個解決方案:
的數據對象定義$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
定義(可能不是最好的例子,但希望你明白,儘管未經過測試)。
正是我需要的和更多 - 縮略圖功能也非常有用。謝謝 – invictus
是否也可以獲取模板中顯示的每個團隊的鏈接?這樣我就可以在每個球員旁邊爲他所在的球隊建立鏈接。我嘗試着修改你的功能(評論中的部分),但沒有成功 – invictus
你的意思是在你擁有球隊列表的球隊中:「第1隊,第2隊,第3隊「,當我按下」第3隊「時,我會得到該隊的編輯表格?我猜它是可能的,但它可能會更復雜,我需要看看那個 – Zauberfisch