gpt4 book ai didi

php - Silverstripe 管理员 : "Has one" dropdown converts to ordinary input field after import

转载 作者:可可西里 更新时间:2023-10-31 22:43:42 25 4
gpt4 key购买 nike

我在 Silverstripe 的管理员方面遇到了一些问题。我定义了一个数据库模型(请参阅下面的类定义),在我进行开发/构建之后,一切看起来都符合预期。当我尝试添加一个新的“包”时,所有“有一个”字段都带有下拉列表(请参见屏幕截图 1)。我还构建了一个导入这些包的导入器。运行时,一切看起来都很好,除了打开包裹时。然后“节日”正确耦合。您可以看到名称,并且可以选择下拉列表。另一方面,“剧团”已经神秘地转换为一个输入字段,该字段仅显示另一个表中记录的 ID(参见屏幕截图 2)。

有人知道这里发生了什么吗?是否有什么东西触发了我没有意识到的这种行为?我的代码有问题吗(是的,但与此问题有关?;-))?我检查了表的结构,那里没有什么可疑的......

之前: before import

之后: after import


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';
}

剧团.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';
}

节日.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 中发生的事情。在您的情况下,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;
}

这非常简约,我还可以定制更多。

关于php - Silverstripe 管理员 : "Has one" dropdown converts to ordinary input field after import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21235458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com