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

Hiding pages in the CMS tree?


3 Posts   1226 Views


12 February 2009 at 1:23pm Community Member, 39 Posts

I have a site with over 6000 pages of products, and I'm successfully using the modeladmin to deal with them appropriately, however, this amount of pages really shows down the CMS when I want to edit single blog/news items on the site.

Is there a way to remove them from the site tree in the CMS part, so that that admin area loads quicker and I can just deal with the products using Modeladmin only?

Carbon Crayon

12 February 2009 at 2:40pm Community Member, 598 Posts

Hi a-tech

this thread might help:

It's not be exactly what ur looking for but might have some clues :)


12 February 2009 at 5:35pm Community Member, 39 Posts

thanks aram,

I got some help from sam minnee on this and Works a treat!!

LeftAndMain::getSiteTreeFor() does most of the work - this is called in other places, passing "SiteTee", "Folder", or "Group" as necessary.
It's called by CMSMain::SiteTreeAsUL().

It's currently like this:

      $obj = $rootID ? $this->getRecord($rootID) : singleton($className);
      $obj->markPartialTree(30, $this);
      if($p = $this->currentPage()) $obj->markToExpose($p);

You can probably change it to have a call to setMarkingFilter. I woudl recommend that you make this change by duplicating the whole LeftAndMain::getSiteTreeFor() in either CMSMain, or your own custom subclass of LeftAndMain.

      $obj = $rootID ? $this->getRecord($rootID) : singleton($className);
-->    $obj->setMarkingFilter('ShowInCMS', 1);
      $obj->markPartialTree(30, $this);
      if($p = $this->currentPage()) $obj->markToExpose($p);

This means that the tree will only show objects where $dataObj->ShowInCMS = 1;

public $ShowInCMS = 1; // on Page.php

public $ShowInCMS = 0; // on the class to exclude from the CMS.