Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Content Editor Discussions

Forum for content editors and CMS users.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Making content on all pages editing on CMS


Go to End
Reply

20 Posts   4715 Views

Avatar
kompideal

15 June 2009 at 9:02pm Community Member, 7 Posts

Hi :)
I am searching solution for one problem I have.

I have Silverstripe 2.3.1 version. I have website there I want to place various content on one page.
For example:
I have pages named "About us" and "Solution", these pages have main content area and sidebar area. I want that I could edit these pages on CMS: various content in main area; and the same content in sidebar area in all pages and sidebar area could be editing in CMS in one page and shown for public in all pages.

I hope that I explained my problem well.
So how can I do this? Thanks for help.

Avatar
Howard

16 June 2009 at 10:26pm Community Member, 215 Posts

Yup that is a common request and easy to implement, have a look at this tutorial which will step you through it [url]http://www.ssbits.com/create-a-static-sidebar/[/url]

Avatar
SilverRay

16 June 2009 at 11:05pm Community Member, 167 Posts

Yeah, I do it like this:

1. I'll have a HomePage template, to which I add fields that I consider "global". (I will collect them under a "global" tab in the cms.)

2. On Page.php, I include the following function:

   public function callHome(){
      return DataObject::get_one('HomePage');
   }

3. This means that I can call home from every Page template (or a template based on a page type that extends from page) to show things that I've set in the "global" section on my home page in the cms. (For instance $callHome.WhateverField.)

Avatar
steve_nyhof

27 December 2009 at 2:18pm Community Member, 224 Posts

SilverRay

Could you explain a little further what you are doing here?

I want to set my footer to be global. I want that a user can edit the footer info in an editer on a tab called "Footer" - like your "Global" tab.

Please help me with the steps I need to take to make this work.

Thank you,
Steve

Avatar
SilverRay

27 December 2009 at 2:46pm (Last edited: 27 December 2009 2:48pm), Community Member, 167 Posts

OK, well, I make use of the fact that your home page is always there and has a separate page type ("HomePage.php"). Example for HomePage.php:

<?php

class HomePage extends Page {
...
   public static $db = array(
      'SomeFooter' => 'Text'
   );

   function getCMSFields() {
      $fields = parent::getCMSFields();
      $fields->addFieldToTab('Root', new TabSet('GlobalContent'));
      $fields->addFieldToTab( 'Root.GlobalContent.Footer', new TextField('SomeFooter', 'Put Footer text here.'));
      return $fields;
   }
...
}

class HomePage_Controller extends Page_Controller {
}

?>

This means I declare a variable 'SomeFooter' to put in your Footer's content, and I create a tab for the editor in which you can actually do that. Then in Page.php:

class Page_Controller extends ContentController {
...
   public function callHome(){
      return DataObject::get_one('HomePage');
   }
...
}

?>

This means that in every page template of the type 'Page' (or a type extended thereof) I can call $callHome.SomeFooter to render the content of SomeFooter for that particular page. The function callHome calls the HomePage dataobject and -in this case- its SomeFooter attribute.

HTH

Avatar
steve_nyhof

27 December 2009 at 3:18pm (Last edited: 27 December 2009 3:24pm), Community Member, 224 Posts

Thank you SilverRay!

You opened up a whole new world for me!

I will add to this post as I go along. The first thing I ran into was that I setup the $fields code after my other tab code - this removed all my tabs. So I pasted the $fields to the top, before the page tabs and they all came back.

I have added the editor ...
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root', new TabSet('GlobalContent'));
$fields->addFieldToTab( 'Root.GlobalContent.FooterContent', new HtmlEditorField('SomeFooter', 'Use the editer below to update your footer content'));

To be continued...

The backend all seems fine. The values are saving and all if fine.

Onto the HomePage.ss file...

Should that just be a duplicate of the Page.ss file? I'm getting this error...

[Warning] file_get_contents() [function.file-get-contents]: Filename cannot be empty
GET /

Line 277 in /home/landingp/public_html/sapphire/core/SSViewer.php

Avatar
steve_nyhof

27 December 2009 at 3:26pm Community Member, 224 Posts

My Home Page (from HomePage.ss) is not showing up in the Behavior tab ??

Where is this function being called - callHome ?

public function callHome(){
return DataObject::get_one('HomePage');
}

Avatar
steve_nyhof

27 December 2009 at 3:39pm Community Member, 224 Posts

I can't seem to get my Home Page to show up - any ideas based on the error I'm getting?

Go to Top