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.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

Problem with SiteTree in DOM


Go to End
Reply


8 Posts   2377 Views

Avatar
Hello_electro

Community Member, 80 Posts

23 October 2010 at 5:14pm

Edited: 23/10/2010 5:14pm

Can anyone see if maybe I am missing something. My luck a comma!

I get the following error when trying to include a site treet drop down in my File DOM.

[User Error] Uncaught Exception: Object->__call(): the method 'fortemplate' does not exist on 'SiteTree'
GET /admin
Line 724 in /home/content/28/4118128/html/sapphire/core/Object.php

THANKS!

GOLDSPONSOR.PHP


<?php
 
 
class GoldSponsor extends DataObject
{
	static $db = array (
		'CompanyName' => 'Text',
		'CompanyWebAddress' => 'Text'
	);
 
	static $has_one = array (
		'Attachment' => 'File',
		'GoldSponsorPage' => 'GoldSponsorPage'
		'GoldRelatedArticle' => 'SiteTree',
	
			
	);
 
	public function getCMSFields_forPopup()
	{
		return new FieldSet(
			new TextField('CompanyName'),
			new TextField('CompanyWebAddress'),
			new SimpleTreeDropdownField('GoldRelatedArticleID', "Related Page", 'SiteTree'),
			new FileIFrameField('Attachment')
		);
	}
}


?>

GOLDSPONSORPAGE.PHP

<?php

class GoldSponsorPage extends RightNav
{
	static $has_many = array (
		'GoldSponsors' => 'GoldSponsor'
	);
 
	public function getCMSFields()
	{
		$f = parent::getCMSFields();
		$manager = new FileDataObjectManager(
			$this, // Controller
			'GoldSponsors', // Source name
			'GoldSponsor', // Source class
			'Attachment', // File name on DataObject
			array(
				'CompanyName' => 'CompanyName', 
				'CompanyWebAddress' => 'CompanyWebAddress',
				'GoldRelatedArticle' => 'GoldRelatedArticle' 
			), // Headings 
			'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
			// Filter clause
			// Sort clause
			// Join clause
		);
                $f->addFieldToTab("Root.Content.GoldSponsor",$manager);
                return $f;
	}
}

class GoldSponsorPage_Controller extends RightNav_Controller {

}

?>

Avatar
UncleCheese

Forum Moderator, 4102 Posts

24 October 2010 at 4:04am

This happens in the CMS? That looks like the type of error you'd get on the frontend.

Is there anymore of that trace?

---------------
Silverstripe tips, tutorials, screencasts, and more. http://www.leftandmain.com

Avatar
Hello_electro

Community Member, 80 Posts

24 October 2010 at 9:53am

Edited: 24/10/2010 9:53am

It happens when I try to load the front end page, or after I create an item in the cms i get the "page says" gray box and it dumps the following message. It keeps mentioning the blog entry too, which is weird.


The page at  XXXXXX.com says:ERROR [User Error]: Uncaught Exception: Object->__call(): the method 'fortemplate' does not exist on 'BlogEntry'
IN POST /admin/getitem?ID=176&ajax=1
Line 724 in /home/content/28/4118128/html/sapphire/core/Object.php

Source
======
  715: 				
  716: 				default :
  717: 					throw new Exception (
  718: 						"Object->__call(): extra method $method is invalid on $this->class:" . var_export($config,
       true)
  719: 					);
  720: 			}
  721: 		} else {
  722: 			// Please do not change the exception code number below.
  723: 			
* 724: 			throw new Exception("Object->__call(): the method '$method' does not exist on '$this->class'",
       2175);
  725: 		}
  726: 	}
  727: 	
  728: 	//
       -----------------------------------------------------------------------------------------------------------------
  729: 	
  730: 	/**

Trace
=====
<ul>Object->__call(forTemplate,Array)
line 447 of ViewableData.php

BlogEntry->forTemplate()
line 447 of ViewableData.php

ViewableData->XML_val(PlatinumRelatedArticle)
line 1341 of TableListField.php

TableListField_Item->Fields()
line 603 of DataObjectManager.php

DataObjectManager_Item->Fields()
line 369 of ViewableData.php

ViewableData->obj(Fields)
line 590 of .cache.home.content.28.4118128.html.dataobject_manager.templates.FileDataObjectManager.ss

include(/home/content/28/4118128/html/silverstripe-cache/.cache.home.content.28.4118128.html.dataobject_manager.templates.FileDataObjectManager.ss)
line 420 of SSViewer.php

SSViewer->process(FileDataObjectManager)
line 342 of ViewableData.php

ViewableData->renderWith(FileDataObjectManager)
line 275 of ComplexTableField.php

ComplexTableField->FieldHolder()
line 266 of DataObjectManager.php

DataObjectManager->FieldHolder()
line 369 of ViewableData.php

ViewableData->obj(FieldHolder,,,1)
line 446 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 73 of .cache.home.content.28.4118128.html.sapphire.templates.TabSetFieldHolder.ss

include(/home/content/28/4118128/html/silverstripe-cache/.cache.home.content.28.4118128.html.sapphire.templates.TabSetFieldHolder.ss)
line 420 of SSViewer.php

SSViewer->process(TabSet)
line 342 of ViewableData.php

ViewableData->renderWith(TabSetFieldHolder)
line 80 of TabSet.php

TabSet->FieldHolder()
line 369 of ViewableData.php

ViewableData->obj(FieldHolder,,,1)
line 446 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 58 of .cache.home.content.28.4118128.html.sapphire.templates.TabSetFieldHolder.ss

include(/home/content/28/4118128/html/silverstripe-cache/.cache.home.content.28.4118128.html.sapphire.templates.TabSetFieldHolder.ss)
line 420 of SSViewer.php

SSViewer->process(TabSet)
line 342 of ViewableData.php

ViewableData->renderWith(TabSetFieldHolder)
line 80 of TabSet.php

TabSet->FieldHolder()
line 369 of ViewableData.php

ViewableData->obj(FieldHolder,,,1)
line 446 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 77 of .cache.home.content.28.4118128.html.sapphire.templates.Includes.Form.ss

include(/home/content/28/4118128/html/silverstripe-cache/.cache.home.content.28.4118128.html.sapphire.templates.Includes.Form.ss)
line 420 of SSViewer.php

SSViewer->process(Form)
line 342 of ViewableData.php

ViewableData->renderWith(Array)
line 1085 of Form.php

Form->forTemplate()
line 1112 of Form.php

Form->formHtmlContent()
line 384 of LeftAndMain.php

LeftAndMain->getitem(SS_HTTPRequest)
line 193 of Controller.php

Controller->handleAction(SS_HTTPRequest)
line 137 of RequestHandler.php

RequestHandler->handleRequest(SS_HTTPRequest)
line 147 of Controller.php

Controller->handleRequest(SS_HTTPRequest)
line 281 of Director.php

Director::handleRequest(SS_HTTPRequest,Session)
line 124 of Director.php

Director::direct(/admin/getitem)
line 127 of main.php

</ul>


[/code/

Avatar
UncleCheese

Forum Moderator, 4102 Posts

24 October 2010 at 11:10am

You're probably trying to render a SiteTree object on the template?? Like this, maybe?

$GoldRelatedArticle

You can't do that, of course, because there's nothing to render. $GoldRelatedArticle.Title will give you something, but not the object itself.

---------------
Silverstripe tips, tutorials, screencasts, and more. http://www.leftandmain.com

Avatar
Hello_electro

Community Member, 80 Posts

24 October 2010 at 11:51am

The weird thing is, I haven't even created a layout page yet for it. Havn't even got that far! Is the code i am using look fine? Maybe need to just start from scratch again!

Avatar
UncleCheese

Forum Moderator, 4102 Posts

24 October 2010 at 12:45pm

It's in your headings array:

'GoldRelatedArticle' => 'GoldRelatedArticle'

You can't render $GoldRelatedArticle as a column in the table. You need to choose what field you want to show. Try this:

public function getGoldTitle() {
if($page = $this->GoldRelatedArticle()) {
return $page->Title;
}
return false;
}

and change your headings array to use:

'GoldTitle' => 'Related article title'

---------------
Silverstripe tips, tutorials, screencasts, and more. http://www.leftandmain.com

Avatar
qbahamutp

Community Member, 8 Posts

25 January 2012 at 10:48pm

Edited: 25/01/2012 10:49pm

Apologies for the bump. I'm just curious about how you can make this work. I've got a similar issue going on, but it's a low-priority, really.

I'm just curious about the principle of controlling the content of DOM columns using functions.

Regarding the example that UC wrote in the above post: how does it know to refer to the getGoldTitle()function based on its array key ('GoldTitle')?
I've tried adding a function to the page's controller that always returns "foo", but I can't even get that to work.

I'm hoping someone can help me figure this one out. Thanks in advance.

Avatar
abschwoerung

Community Member, 3 Posts

8 May 2012 at 5:43am

Well, you basically tell the DOM in the 4th parameter with an array which method in the DataObject to use to display in the overview.
For example:

            new DataObjectManager(
                $this,
                'TeaserImages',
                'TeaserImage',
                array(
                    'Image' => 'Bild',
                    'getSelectedSiteTitle' => 'verlinkte Seite',
                ),
                'getCMSFields_forPopup'
            )

will call TeaserImage->getSelectedSiteTitle() for displaying a value in the second column of the DOM overview. Within the DataObject inherited class put the method and access the DataObjects values (example is for a SiteTree):

    public function getSelectedSiteTitle() {
        return $this->obj('LinkTo')->Title;
    }