Php Silverstripe管理员:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;“有一个”;导入后,下拉列表转换为普通输入字段
我与Silverstripe的管理员有一些问题。我定义了一个数据库模型(请参见下面的类定义),在我完成开发/构建之后,一切看起来都和预期的一样。当我尝试添加一个新的“包”时,所有的“有一个”字段都有一个下拉列表(见屏幕截图1)。我还建立了一个进口商进口这些软件包。运行时,除了打开软件包外,一切看起来都很好。那么“节日”是正确耦合的。您可以看到名称,并且可以选择下拉列表。另一方面,“剧团”神秘地转换为一个输入字段,该字段只显示另一个表中记录的id(参见屏幕截图2) 有人知道这里发生了什么吗?是不是有什么东西触发了我不知道的这种行为?我的代码是否有问题(是的,但与此问题有关?;-)?我已经检查了桌子的结构,那里没有可疑的东西 之前: 之后:Php Silverstripe管理员:“您必须遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他有关法律法规。”;“有一个”;导入后,下拉列表转换为普通输入字段,php,silverstripe,Php,Silverstripe,我与Silverstripe的管理员有一些问题。我定义了一个数据库模型(请参见下面的类定义),在我完成开发/构建之后,一切看起来都和预期的一样。当我尝试添加一个新的“包”时,所有的“有一个”字段都有一个下拉列表(见屏幕截图1)。我还建立了一个进口商进口这些软件包。运行时,除了打开软件包外,一切看起来都很好。那么“节日”是正确耦合的。您可以看到名称,并且可以选择下拉列表。另一方面,“剧团”神秘地转换为一个输入字段,该字段只显示另一个表中记录的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';
}
您可能不应该只依赖于管理脚手架,而应该在数据对象上使用
getCMSFields
来定制CMS中发生的事情。在您的情况下,可以简单地替换剧团
下拉列表,将其添加到您的包
类中:
function getCMSFields()
{
$fields = parent::getCMSFields();
$troupeList = Troupe::get()->map()->toArray();
$troupeSelect = DropdownField::create('TroupeID', 'Troupe')->setSource($troupeList);
$fields->replaceField('TroupeID', $troupeSelect);
return $fields;
}
这是一个极简主义的设计,我可以定制更多。我同意,无论如何,脚手架在这里不起作用会很有趣。谢谢!这就成功了。然而,这与其说是一个解决方案,不如说是一个变通办法,正如Schellmax已经暗示的那样。但对我来说,它是完美的,因为我没有时间彻底研究这个问题。在
ForeignKey
类中,为($list->count()<100)
生成了一个下拉列表,一些注释“不要为大型表构建下拉列表…可能会超过可用的PHP内存”…我怀疑这样的事情,这是有道理的。目前我没有性能问题,所以我将把它们放在…@colymba+1中,以便进一步研究这个主题。很高兴知道