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.

Data Model Questions

Problems with Object::useCustomClass


Reply

5 Posts   3474 Views

Avatar
briansohn

8 January 2009 at 1:48pm Community Member, 5 Posts

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

9 January 2009 at 10:50am Community Member, 712 Posts

Never tried that before, but see if this works:

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

Avatar
briansohn

10 January 2009 at 7:52am Community Member, 5 Posts

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

10 January 2009 at 12:25pm Community Member, 5 Posts

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

10 January 2009 at 7:45pm (Last edited: 10 January 2009 7:45pm), Community Member, 712 Posts

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