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