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.

General Questions

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

HTMLText Area & Adding Tab in Admin Manage Area


Reply

5 Posts   2634 Views

Avatar
ckd

6 July 2009 at 2:37pm Community Member, 18 Posts

I am having a great deal of trouble in adding some HTMLText areas on my pages. Have read the tutorials and viewed the related Forum Topics, however, it still does not work with respect to no Tab appearing in the Admin Area. Any help would be greatly appreciated. The code I am using in mysite/code/Page.php is:

<?php

class Page extends SiteTree {
   
   static $db = array(
   'AboutContent' => 'HTMLText'
   );
   
   static $has_one = array(
   );
   
}

class Page_Controller extends ContentController {
   
   public function init() {
      parent::init();

      // Note: you should use SS template require tags inside your templates
      // instead of putting Requirements calls here. However these are
      // included so that our older themes still work
      Requirements::themedCSS("layout");
      Requirements::themedCSS("typography");
      Requirements::themedCSS("form");
      
   }
   
   /**
    * Site search form
    */
   function SearchForm() {
      $searchText = isset($_REQUEST['Search']) ? $_REQUEST['Search'] : 'Search';
      $fields = new FieldSet(
       new TextField("Search", "", $searchText)
       );
      $actions = new FieldSet(
       new FormAction('results', 'Search')
       );

       return new SearchForm($this, "SearchForm", $fields, $actions);
   }
   
   /**
    * Process and render search results
    */
   function results($data, $form){
       $data = array(
       'Results' => $form->getResults(),
       'Query' => $form->getSearchQuery(),
       'Title' => 'Search Results'
       );

       return $this->customise($data)->renderWith(array('Page_results', 'Page'));
   }

   /**
    * Address Details
    */
   function getCMSFields(){
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Content.About', new HtmlEditorField ( $name = "AboutContent", $title = "About" ), 'Content' );
return $fields;
}

}   

?>

The code I am using in templates\Page.ss is:

<div id="about"><!-- about -->
$AboutContent
</div><!-- /about -->

I have run /db/build?flush=1 and tried many other variations of the code based on information from the forums and tutorials but having no joy. Any ideas on what the issue could be?

Avatar
Willr

6 July 2009 at 3:07pm Forum Moderator, 5511 Posts

Your function getCMSFields() is in the wrong class. It needs to be in the extends Page {} bit (referred to as the model) rather then the extends Page_Controller {} class where it is currently (referred to as the controller)

Avatar
ckd

6 July 2009 at 3:30pm Community Member, 18 Posts

Thank you for your help. The tab has appeared, think I am almost there! However, for some reason when I click on it, it is not editable, just a blank white area with no editable regions. Is there any other code that I may have neglected to add?

My Page.php code now looks like this:

<?php

class Page extends SiteTree {
   
   static $db = array(
   'AboutContent' => 'HTMLText'
   );
   
   static $has_one = array(
   );
   
   function getCMSFields(){
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Content.About', new HtmlEditorField ( $name = "AboutContent", $title = "About" ), 'Content' );
return $fields;
}

}

class Page_Controller extends ContentController {
   
   public function init() {
      parent::init();

      // Note: you should use SS template require tags inside your templates
      // instead of putting Requirements calls here. However these are
      // included so that our older themes still work
      Requirements::themedCSS("layout");
      Requirements::themedCSS("typography");
      Requirements::themedCSS("form");
      
   }
   
   /**
    * Site search form
    */
   function SearchForm() {
      $searchText = isset($_REQUEST['Search']) ? $_REQUEST['Search'] : 'Search';
      $fields = new FieldSet(
       new TextField("Search", "", $searchText)
       );
      $actions = new FieldSet(
       new FormAction('results', 'Search')
       );

       return new SearchForm($this, "SearchForm", $fields, $actions);
   }
   
   /**
    * Process and render search results
    */
   function results($data, $form){
       $data = array(
       'Results' => $form->getResults(),
       'Query' => $form->getSearchQuery(),
       'Title' => 'Search Results'
       );

       return $this->customise($data)->renderWith(array('Page_results', 'Page'));
   }

}   

?>

and Page.ss is:

<div id="about"><!-- about -->
$AboutContent
</div><!-- /about -->

Avatar
banal

6 July 2009 at 6:32pm Community Member, 901 Posts

Your constructor call for the HtmlEditorField is wrong.
It should look like this:

new HtmlEditorField ("AboutContent", "About" )

Avatar
ckd

6 July 2009 at 7:55pm Community Member, 18 Posts

I changed the contructor call code as you recommended, rebuilt the db but still no change. I did notice that after rebuilding, an extra 'Page not found' appears above 'Home' at the top of the Site Content & Structure menu tree in the admin area. This appears every time I rebuild the db for some reason.