我正在尝试在Silverstripe CMS中创建一个新菜单项。我还是不明白。我不知道我做错了什么。关于Silverstripe 3.6。
我也试过" / dev / build"和" dev / build?flush = 1"。但没有结果。
Footerinfos.php(mysite / code /)
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 / code /)
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';
}
截图:
答案 0 :(得分:0)
模板中包含哪些内容?只需简单地调用$FooterInfo
或<%loop $ FooterInfo%>`就行了,因为你的基页类需要知道它。您可以像这样在页面库中添加一个方法:
class Page extends SiteTree
{
public function FooterInfo()
{
return FooterInfo::get();
}
}
在每个页面上返回页脚信息。
除非您实际使用DataExtension作为DataExtension并将其应用于Page。
在这种情况下,请提供告诉清单应用数据扩展名的配置(例如您的config.yml
)
从它的外观来看,我认为你希望FooterInfo
扩展DataObject
,而不是DataExtension
。
答案 1 :(得分:0)
我相信从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 ::现在为您的DataObject
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 / build,您应该在Settings选项卡中看到一个名为Footer的新选项卡,其中包含您的新字段。
更新3 ::也许您可以在DataObject中尝试这个:
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;
}
***免责声明:上述代码未经过测试。
答案 2 :(得分:0)
参考上面的回答,$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)
);
}
答案 3 :(得分:0)
您可能最好使用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>
然后你会使用`&lt;%include Footer%&gt;
这通常会出现在 themes / themename / templates / Page.ss 文件中。
不要忘记使用您的主题文件夹更改 themename 。
在管理员的设置链接下,现在会有一个名为页脚的标签,其中包含这些字段。
此代码未经过测试但应该可以使用。