在Silverstripe CMS中添加新的菜单项
我正在尝试在Silverstripe CMS中创建一个新的菜单项。我还是不明白。我不知道我做错了什么。这是关于Silverstripe 3.6。在Silverstripe CMS中添加新的菜单项
我也试过“/ dev/build”和“dev/build?flush = 1”。但没有结果。
Footerinfos.php(mysite的/代码/)
class FooterInfos extends ModelAdmin {
public static $managed_models = array('FooterInfo');
static $url_segment = 'footerinfo';
static $menu_icon = 'framework/admin/images/menu-icons/network.png';
static $menu_title = 'Footer';
}
Footerinfo.php(mysite的/代码/)
class FooterInfo extends DataExtension {
static $db = array(
'FooterHead1' => 'Varchar(255)',
'FooterHead2' => 'Varchar(255)',
'FooterHead3' => 'Varchar(255)',
'FooterText1' => 'HTMLText',
'FooterText2' => 'HTMLText',
'FooterText3' => 'HTMLText',
);
function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root', new TabSet('Footer'));
$fields->addFieldToTab('Root.Footer', new TextField('FooterHead1', 'Footer - Kop 1'));
$fields->addFieldToTab('Root.Footer', $h1=new HTMLEditorField('FooterText1', 'Footer - Tekst 1'));
$fields->addFieldToTab('Root.Footer', new TextField('FooterHead2', 'Footer - Kop 2'));
$fields->addFieldToTab('Root.Footer', $h2=new HTMLEditorField('FooterText2', 'Footer - Tekst 2'));
$fields->addFieldToTab('Root.Footer', new TextField('FooterHead3', 'Footer - Kop 3'));
$fields->addFieldToTab('Root.Footer', $h3=new HTMLEditorField('FooterText3', 'Footer - Tekst 3'));
$h1->setRows(7);
$h2->setRows(7);
$h3->setRows(7);
return $fields;
}
}
更新14:53U:
它具有现在可以创建一个菜单项。 只有我不知道这些字段是否可以立即显示,而不是选择菜单。因此,与“设置”菜单一样,这些字段将立即显示。
我不能马上看到字段。只有一个ID列表。如果您点击该ID,则只能看到这些字段。这不是这个意图。它一定是所有的领域马上。因为不超过1个页脚。
我已经翻译一下代码成我的语言;)
Voettekst.php
class VoetTekst extends DataObject {
static $db = array(
'VoetKop1' => 'Varchar(255)',
'VoetKop2' => 'Varchar(255)',
'VoetKop3' => 'Varchar(255)',
'VoetTekst1' => 'HTMLText',
'VoetTekst2' => 'HTMLText',
'VoetTekst3' => 'HTMLText',
);
public function getCMSFields() {
return FieldList::create(
TextField::create('VoetKop1', 'Footer - Kop 1'),
HTMLEditorField::create('VoetTekst1', 'Footer - Tekst 1')->setRows(7),
TextField::create('VoetKop2', 'Footer - Kop 2'),
HTMLEditorField::create('VoetTekst2', 'Footer - Tekst 2')->setRows(7),
TextField::create('VoetKop3', 'Footer - Kop 3'),
HTMLEditorField::create('VoetTekst3', 'Footer - Tekst 3')->setRows(7)
);
}
}
VoettekstAdmin.php
class VoettekstAdmin extends ModelAdmin {
private static $managed_models = array('Voettekst');
private static $url_segment = 'voettekst';
private static $menu_icon = 'framework/admin/images/menu-icons/16x16/network.png';
private static $menu_title = 'Voettekst';
}
截图:
什么是您的模板?只需简单地调用$FooterInfo
或<%循环$ FooterInfo%>`将不起作用,因为您的基页类需要知道它。你可以像这样在页面底部添加一个方法:
class Page extends SiteTree
{
public function FooterInfo()
{
return FooterInfo::get();
}
}
返回每页上的页脚信息。
除非您实际上将DataExtension用作DataExtension并将其应用于Page。
在这种情况下,请提供你的配置,告诉清单申请数据扩展(例如你的config.yml
)
从外观上来看,虽然,我想你想FooterInfo
延长DataObject
,不DataExtension
。
我相信开始SS3 *前进是“私人”需要的东西,所以也许尝试改变你的代码:
class FooterInfoAdmin extends ModelAdmin {
private static $managed_models = array('FooterInfo');
private static $url_segment = 'footerinfo';
private static $menu_icon = 'framework/admin/images/menu-icons/network.png';
private static $menu_title = 'Footer';
}
***以上回答您的固定第一个问题......
更新1 ::现在你的数据对象
class FooterInfo extends DataObject {
static $db = array(
'FooterHead1' => 'Varchar(255)',
'FooterHead2' => 'Varchar(255)',
'FooterHead3' => 'Varchar(255)',
'FooterText1' => 'HTMLText',
'FooterText2' => 'HTMLText',
'FooterText3' => 'HTMLText',
);
public function getCMSFields() {
return new FieldList(
TextField::create('FooterHead1', 'Footer - Kop 1'),
HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7),
TextField::create('FooterHead2', 'Footer - Kop 2'),
HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7),
TextField::create('FooterHead3', 'Footer - Kop 3'),
HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7)
);
}
}
更新2 ::这是一个新的更新来解释我怎么会重做你在做什么,这样一个小的任务,并不真正需要由ModelAdmin管理。
我会扩展SiteConfig来管理您的页脚内容。其他人可能不同意,但对我来说,任何“网站范围”的内容都应该在中心位置进行管理,SiteConfig是完美的位置。这样你甚至不需要一个全新的DataObject或新的ModelAdmin。请参见下面的代码:在一个新的文件
地方叫SiteConfigExtension.php
:
class SiteConfigExtension extends DataExtension
{
private static $db = [
'FooterHead1' => 'Varchar(255)',
'FooterHead2' => 'Varchar(255)',
'FooterHead3' => 'Varchar(255)',
'FooterText1' => 'HTMLText',
'FooterText2' => 'HTMLText',
'FooterText3' => 'HTMLText',
];
public function updateCMSFields(FieldList $fields){
$fields->addFieldToTab('Root.Footer', TextField::create('FooterHead1', 'Footer - Kop 1'));
$fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7));
$fields->addFieldToTab('Root.Footer', TextField::create('FooterHead2', 'Footer - Kop 2'));
$fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7));
$fields->addFieldToTab('Root.Footer', TextField::create('FooterHead3', 'Footer - Kop 3'));
$fields->addFieldToTab('Root.Footer', HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7));
}
}
然后在您的config.yml
地址:
SiteConfig:
extensions:
- SiteConfigExtension
然后,运行的/ dev /建造,你应该看到一个新的在设置选项卡中,您可以使用新字段称为页脚。
更新3 ::也许你可以在你的数据对象试试这个:
public function getCMSFields()
{
$fields = new FieldList(
new TabSet(
"Root",
$tabMain = new Tab(
TextField::create('FooterHead1', 'Footer - Kop 1'),
HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7),
TextField::create('FooterHead2', 'Footer - Kop 2'),
HTMLEditorField::create('FooterText2', 'Footer - Tekst 2')->setRows(7),
TextField::create('FooterHead3', 'Footer - Kop 3'),
HTMLEditorField::create('FooterText3', 'Footer - Tekst 3')->setRows(7)
),
),
new HiddenField('ID')
);
$this->extend('updateCMSFields', $fields);
return $fields;
}
***免责声明:上面的代码没有进行测试。
参照您的上述回答,$fields = parent::getCMSFields();
用于页面,而不是数据对象。
更简单的方法是使用以下命令:
function getCMSFields() {
$fields = singleton($this->ClassName)->getFrontendFields();
return $fields;
}
如果你想要更多的控制,你可以使用类似:
function getCMSFields() {
return FieldList::create(
TextField::create('FooterHead1', 'Footer - Kop 1'),
HTMLEditorField::create('FooterText1', 'Footer - Tekst 1')->setRows(7)
);
}
我经常在我的DataObjects中使用'$ fields = parent :: getCMSFields()',因为这会调用脚手架,然后我不必手动创建每个字段。 – wmk
你可能会更好使用SiteConfig
关闭这是你只真的需要一个页脚。数据对象用于多个记录。
的mysite /代码/ CustomSiteConfig.php
class CustomSiteConfig extends DataExtension {
private static $db = array(
'VoetKop1' => 'Varchar(255)',
'VoetKop2' => 'Varchar(255)',
'VoetKop3' => 'Varchar(255)',
'VoetTekst1' => 'HTMLText',
'VoetTekst2' => 'HTMLText',
'VoetTekst3' => 'HTMLText'
);
public function updateCMSFields(FieldList $fields) {
$fields->addFieldsToTab('Root.Footer', array(
TextField::create('VoetKop1', 'Footer - Kop 1'),
HTMLEditorField::create('VoetTekst1', 'Footer - Tekst 1')->setRows(7),
TextField::create('VoetKop2', 'Footer - Kop 2'),
HTMLEditorField::create('VoetTekst2', 'Footer - Tekst 2')->setRows(7),
TextField::create('VoetKop3', 'Footer - Kop 3'),
HTMLEditorField::create('VoetTekst3', 'Footer - Tekst 3')->setRows(7)
));
}
}
的mysite/_config/extensions.yml
SiteConfig:
extensions:
- CustomSiteConfig
现在,在您的模板,你可以使用$SiteConfig.variable
访问的变量。要抓住你可以使用的第一个标题$SiteConfig.VoetKop1
这通常会在模板中包含。
主题/ THEMENAME /模板/包括/ Footer.ss
<div class="row">
<div class="medium-4 small-12 columns">
<h5>$SiteConfig.VoetKop1</h5>
<div class="typography">$SiteConfig.VoetTekst1</div>
</div>
<div class="medium-4 small-12 columns">
<h5>$SiteConfig.VoetKop2</h5>
<div class="typography">$SiteConfig.VoetTekst2</div>
</div>
<div class="medium-4 small-12 columns">
<h5>$SiteConfig.VoetKop3</h5>
<div class="typography">$SiteConfig.VoetTekst3</div>
</div>
</div>
那么你可以使用'<%包括页脚%>
这通常会发生在主题/ THEMENAME/templates/Page.ss文件。
不要忘了更改主题名称与您的主题文件夹。
在设置链接管理员,现在将有一个标签页脚与这些字段。
此代码未经测试,但它应该工作。
我也曾这样做过。但我不想。由于内容管理员无法自定义其他网站配置设置。但他们可能会调整页脚。这就是为什么它必须分开。 – WillieBoy
您可以使用http://api.silverstripe.org/en/3.6/class-Member.html#_inGroup向不同的用户显示不同的字段。 –
@Simon Erkelens对你的DataObject也是正确的......但我不认为这是你的主要问题... –
This Works!只有我想知道这些字段是否可以立即显示,而不是选择菜单。因此,与“设置”菜单一样,这些字段将立即显示。 – WillieBoy
是的,一旦你点击左边(CMS内部)的脚注链接/选项卡(modeladmin),你应该立即看到所有6个字段。我不相信你应该为它们创建一个标签,除非你开始添加越来越多,并且需要开始将它们分离到不同的标签中,这样你的用户就可以更容易地知道去哪里编辑东西。 –