在Silverstripe CMS中添加新的菜单项

时间:2017-10-19 08:29:38

标签: content-management-system silverstripe

我正在尝试在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';

}

截图:

First page

Second page after click on ID

4 个答案:

答案 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

在管理员的设置链接下,现在会有一个名为页脚的标签,其中包含这些字段。

此代码未经过测试但应该可以使用。