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.

Data Model Questions /

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

Problems with Object::useCustomClass


Go to End


5 Posts   6598 Views

Avatar
briansohn

Community Member, 5 Posts

8 January 2009 at 1:48pm

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

Avatar
Hamish

Community Member, 712 Posts

9 January 2009 at 10:50am

Never tried that before, but see if this works:

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

Avatar
briansohn

Community Member, 5 Posts

10 January 2009 at 7:52am

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.

Avatar
briansohn

Community Member, 5 Posts

10 January 2009 at 12:25pm

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.

Avatar
Hamish

Community Member, 712 Posts

10 January 2009 at 7:45pm

Edited: 10/01/2009 7:45pm

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 :)