Jump to:

3448 Posts in 1062 Topics by 738 members

Data Model Questions

SilverStripe Forums » Data Model Questions » Problems with Object::useCustomClass

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

Page: 1
Go to End
Author Topic: 3439 Views
  • briansohn
    Avatar
    Community Member
    5 Posts

    Problems with Object::useCustomClass Link to this post

    Hello,

    I am trying to override a function in the LeftAndMain class in the 'cms' module.

    I have put the following in mysite/_config.php

    Object::useCustomClass('LeftAndMain', 'CustomLeftAndMain');

    I have extended the LeftAndMain class in CustomLeftAndMain class and have overridden the getSiteTreeFor() function but it has no effect.

    Any help would be greatly appreciated.

    Thanks!

    Brian Sohn

  • Hamish
    Avatar
    Community Member
    712 Posts

    Re: Problems with Object::useCustomClass Link to this post

    Never tried that before, but see if this works:

    Object::useCustomClass('LeftAndMain', 'CustomLeftAndMain', true);

  • briansohn
    Avatar
    Community Member
    5 Posts

    Re: Problems with Object::useCustomClass Link to this post

    Hey Hamish,

    Thanks for the feedback. I have tried the 'true' flag and it still doesn't work. If you come across anything give me a shout. I'll keep looking back to this thread.

    Thanks.

  • briansohn
    Avatar
    Community Member
    5 Posts

    Re: Problems with Object::useCustomClass Link to this post

    I was looking through the Object class and it looks like only classes that are created by using the Object::create() static method can be replaced with custom classes.

    for example in the Sapphire folder,

    Member
    MemberLoginForm

    can be replaced with a custom class.

  • Hamish
    Avatar
    Community Member
    712 Posts

    Re: Problems with Object::useCustomClass Link to this post

    I don't have a solution for the applying the custom class, but if you want to override the getSiteTreeFor method for the main CMS editor then this might work:

    1. Create a new CustomCMSMain class that extends CMSMain with your new getSiteTreeFor method.

    2. Edit your _config.php to direct cms requests to your new CMSMain class:

    Director::addRules(100,array('admin/cms//$Action/$ID/$OtherID' => 'CustomCMSMain'));

    (I think priorities go from high to low... so this should override the '50' in /cms/_config.php)

    3. It might cause a double-up in the menu, so you might have to add this to the _config.php file too:

    CMSMenu::remove_menu_item("CMSMain");

    Let me know if this works

    3439 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.