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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Template Questions /

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

Generated Menu Items


Go to End


3 Posts   2390 Views

Avatar
Apophenian

Community Member, 46 Posts

28 May 2009 at 2:01pm

I want to be able to have generated menu items displayed as children of a custom page type.

These menu items wouldn't be actual children, but would point to methods in my page_controller. Is there a 'standard' or best way to do this? The easiest way I think would be to have a custom 'MenuChildren' method in my page class and refer to that in the navigation template - is there a better way?

Cheers,

Rane

Avatar
Ben Gribaudo

Community Member, 181 Posts

29 May 2009 at 12:58am

Edited: 29/05/2009 12:59am

Hello,

Do you mean that you want a given page type to have "fake" children? I've played a little with this: enough to prove the concept but not enough to go live with it.

   public function Children() {
      $children = new DataObjectSet();
      foreach ($this->Children as $childTitle => $childLink) {
         $page = new Page();
         $page->Title = //$childTitle;
         // unsure how to set child page's URL/link
         $children->push($page);
      }
      return $children;
   }

Cross-reference

Hope this helps,
Ben

Avatar
ohm

Community Member, 3 Posts

27 October 2009 at 5:39am

Edited: 27/10/2009 5:41am

For my purposes the easiest solution was to override Children, and start by invoking super::Children() and then modify the dataset, like this:

 public function Children(){
      
      $children = parent::Children(); 

       if($children) {
          foreach($children as $child) {
            if ($child instanceof TemaArtikler){
             
              $child->Overskrift = DataObject::get_one("StatiskTekst")->ArtiklerOverskrift;
              $child->MenuTitle = $child->Overskrift;
              $child->Beskrivelse = DataObject::get_one("StatiskTekst")->ArtiklerTekst; 
            }
           
          }
      }
      return $children;
    } 
}

The above code replaces the title of all "TemaArtikler" pagetypes with userspecified text from a static object.

Hope this helps.

edit: added code tags