我遇到了Silverstripe管理员的一些问题。我定义了一个数据库模型(参见下面的类定义),在我执行dev / build之后,所有内容都按预期显示。当我尝试添加一个新的“包”时,所有“有一个”字段都有一个下拉(见屏幕截图1)。我还建立了一个导入这些包的导入器。运行时,除了打开包装外,一切都很好看。然后'节'正确耦合。您可以看到名称,然后可以选择下拉列表。另一方面,“Troupe”神秘地转换为输入字段,仅显示另一个表中记录的id(参见屏幕截图2)。
有谁知道这里发生了什么?有什么东西可以触发我不知道的这种行为吗?我的代码有问题(是的,但与这个问题有关吗?;-))?我检查了桌子的结构,没有什么可疑的......
在:
在:
Package.php
class Package extends DataObject {
public static $db = array(
'Number' => 'Int',
'Title' => 'Varchar(255)',
'Description' => 'HTMLText',
'Credits' => 'HTMLText',
);
public static $has_many = array(
'Events' => 'Event',
);
public static $many_many = array(
'Genres' => 'Genre',
);
public static $has_one = array(
'Festival' => 'Festival',
'Troupe' => 'Troupe',
);
}
class PackageAdmin extends ModelAdmin {
public static $managed_models = array('Package'); // Can manage multiple models
static $url_segment = 'packages'; // Linked as /admin/packages/
static $menu_title = 'Packages';
}
Troupe.php
class Troupe extends DataObject {
public static $db = array(
"Name" => "Varchar(255)",
"Description" => "HTMLText",
"Url" => "Varchar(255)",
);
public static $has_many = array(
'Packages' => 'Package.Troupe',
);
}
class TroupeAdmin extends ModelAdmin {
public static $managed_models = array('Troupe','Package'); // Can manage multiple models
static $url_segment = 'troupes'; // Linked as /admin/troupes/
static $menu_title = 'Troupes';
}
Festival.php
class Festival extends DataObject {
public static $db = array(
'Name' => 'Varchar(255)',
'Description' => 'HTMLText'
);
public static $has_many = array(
'Packages' => 'Package.Festival'
);
}
class FestivalAdmin extends ModelAdmin {
public static $managed_models = array('Festival','Package'); // Can manage multiple models
static $url_segment = 'festivals'; // Linked as /admin/festivals/
static $menu_title = 'Festivals';
}
答案 0 :(得分:6)
您可能不仅应该依赖于管理脚手架,而且还要在DataObjects上使用getCMSFields
来自定义CMS中发生的事情。在您的情况下,只需简单替换Troupe
下拉列表即可,将其添加到Package
类:
function getCMSFields()
{
$fields = parent::getCMSFields();
$troupeList = Troupe::get()->map()->toArray();
$troupeSelect = DropdownField::create('TroupeID', 'Troupe')->setSource($troupeList);
$fields->replaceField('TroupeID', $troupeSelect);
return $fields;
}
这是极简主义的,我可以定制更多。