James Cremona
James Cremona

Reputation: 13

Add CMS menu item with fields in Silverstripe 3.6

Still a newbie in Silverstripe. I am experimenting with the CMS and I would like to create a new CMS menu with text fields in it. I managed to add a CMS menu item with a gridfield in it to add data objects but what I require is to have text fields directly inside the CMS menu item without creating a Data Object (similar to the Settings menu as shown in the image below)

Can someone guide me in what I need to extend and how to set the thing up? Many thanks in advance.

Upvotes: 0

Views: 82

Answers (1)

Gavin Bruce
Gavin Bruce

Reputation: 1809

You can extend the settings section. The following example adds a tab called Social Media under the settings section and 2 fields FacebookURL and TwitterURL. You can change this to any fields / tabs that you want.

**mysite/_config/extensions.yml

---
Name: mysiteextensions
After: 'framework/*','cms/*'
---

SiteConfig:
  extensions:
    - SiteConfigDecorator

mysite/code/extensions/SiteConfigDecorator

<?php
class SiteConfigDecorator extends DataExtension {

    private static $db = array(
        'FacebookURL' => 'Varchar(200)',
        'TwitterURL' => 'Varchar(200)'
    );

    private static $has_one = array(
        'FooterQuoteButtonPage' => 'SiteTree'
    );

    public function updateCMSFields(FieldList $fields) {
        $fields->addFieldToTab('Root.SocialMedia', TextField::create('FacebookURL', 'Facebook URL'));
        $fields->addFieldToTab('Root.SocialMedia', TextField::create('TwitterURL', 'Twitter URL'));

    }

    function __construct() {
        parent::__construct();
    }

}

To access these fields in the templates, you use $SiteConfig.FIELDNAME. In this case it would be $SiteConfig.FacebookURL and $SiteConfig.TwitterURL

Upvotes: 0

Related Questions