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.

Customising the CMS /

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

Customize LinkForm


Go to End
Reply


2 Posts   709 Views

Avatar
hemant.chakka

Community Member, 1 Post

1 May 2014 at 7:33pm

I am trying to customize the LinkForm that popup when one clicks the link icon on the Html Editor, following is the code I am using to extend the form :


function updateLinkForm($form) {				
        $fields=$form->Fields();
        $linkType=$fields->dataFieldByName('LinkType');
        if($linkType!=null) {
            Requirements::javascript('dataobject_lightbox_linker/javascript/HtmlEditorToolbarAdditions.js');
            $source=$linkType->getSource();
			$source['DataObjectLightbox']='Lightbox Linker';
			$source['largeImage']=_t('ImageViewer.LINKLARGEIMAGE', 'An Original Size Image');
			$source['video']='A Youtube Video';
            $linkType->setSource($source);
			$currentPageID;	
			if($this->owner->controller->currentPageID() >= 1){
				$currentPageID = $this->owner->controller->currentPageID();
			} else {
				$currentPageID = 0;	
			}	
			//checking if any ModelBox DataObjects exist for this page and fetching them if they do
			if($dataObjects = DataObject::get('ModelBoxDataObject', 'ParentID=' . $currentPageID)){
				$mdls = array();
				if($dataObjects->count()){
					$mdls['0'] = 	'Choose a Model Box To Link to';
					foreach ($dataObjects as $dataObject){
						$mdls[$dataObject->ID] = $dataObject->Name;
					}
				}else{
					$mdls['0'] = 	'No ModelBox(s) for this page';	
				}
				//modelbox DO are avaiable - setup the dropdown
				$linkerField = new DropdownField(
					'DataObjectLightbox', 
					'Model Box',
					$mdls
				);   
			} else {
				//no resources for this page - setup an empty dropdown and inform the user none exist
				$linkerField = new DropdownField(
					'DataObjectLightbox',
					'Model Box',
					array(
						'0' => 'No ModelBox(s) for this page'	  
					)
				);
			}
			//insert the DropdownField
			$fields->insertBefore($linkerField, 'Description');
			$fields->insertBefore(new TextField('shadowboxWidth','Width', 490), 'Description');
			$fields->insertBefore(new TextField('shadowboxHeight', 'Height', 418), 'Description');
			//large image
			//$imageField=new TreeDropdownField('largeImage', _t('ImageViewer.IMAGE', 'Image'), 'File', 'Filename', 'Name');
			$imageField = new TreeDropdownField('largeImage', _t('HtmlEditorField.PAGE', "Page"),'SiteTree', 'ID', 'MenuTitle', true);
			$fields->insertBefore($imageField,'Description');
			//Youtube link
			$fields->insertBefore(new TextField('video', 'Youtube Video Link'),'Description');
        }   
        return $form;
    }

but there is some issue when these 2 lines of code is present,but when I comment out these 2 lines everything is fine, so it happens whenever I try to insert TreeDropdownField in the form :

$imageField = new TreeDropdownField('largeImage', _t('HtmlEditorField.PAGE', "Page"),'SiteTree', 'ID', 'MenuTitle', true);
$fields->insertBefore($imageField,'Description');

I get the following error:


( ! ) Fatal error: Call to a member function FormAction() on a non-object in C:\wamp\www\sitetuners\framework\forms\FormField.php on line 161
Call Stack
#	Time	Memory	Function	Location
1	0.0008	748128	{main}( )	..\main.php:0
2	1.2308	23704016	Director::direct( )	..\main.php:189
3	1.2512	25889528	Director::handleRequest( )	..\Director.php:152
4	1.2576	26056992	AdminRootController->handleRequest( )	..\Director.php:360
5	1.2975	29014360	LeftAndMain->handleRequest( )	..\AdminRootController.php:93
6	1.2975	29014360	Controller->handleRequest( )	..\LeftAndMain.php:441
7	1.7125	41963336	RequestHandler->handleRequest( )	..\Controller.php:153
8	1.7160	42019560	RequestHandler->handleRequest( )	..\RequestHandler.php:222
9	1.7655	45562848	RequestHandler->handleRequest( )	..\RequestHandler.php:222
10	1.7662	45566848	RequestHandler->handleAction( )	..\RequestHandler.php:200
11	1.7662	45567264	Form->forTemplate( )	..\RequestHandler.php:288
12	1.7662	45567792	ViewableData->renderWith( )	..\Form.php:1319
13	1.7835	48678720	SSViewer->process( )	..\ViewableData.php:336
14	1.8541	48695248	SSViewer->includeGeneratedTemplate( )	..\SSViewer.php:1019
15	1.8609	49264736	include( 'C:\wamp\www\sitetuners\silverstripe-cache\HEMANT-VAIO\.cache.framework.templates.Includes.Form.ss' )	..\SSViewer.php:952
16	1.9445	49756744	SSViewer_DataPresenter->XML_val( )	..\.cache.framework.templates.Includes.Form.ss:63
17	1.9445	49757240	SSViewer_DataPresenter->__call( )	..\.cache.framework.templates.Includes.Form.ss:63
18	1.9445	49757672	SSViewer_Scope->__call( )	..\SSViewer.php:524
19	1.9445	49758136	call_user_func_array ( )	..\SSViewer.php:178
20	1.9445	49758624	ViewableData->XML_val( )	..\SSViewer.php:178
21	1.9445	49758672	ViewableData->obj( )	..\ViewableData.php:438
22	1.9445	49758800	FormField->FieldHolder( )	..\ViewableData.php:363
23	1.9445	49759600	ViewableData->renderWith( )	..\FormField.php:603
24	1.9447	49761800	SSViewer->process( )	..\ViewableData.php:336
25	1.9456	49763128	SSViewer->includeGeneratedTemplate( )	..\SSViewer.php:1019
26	1.9475	49807528	include( 'C:\wamp\www\sitetuners\silverstripe-cache\HEMANT-VAIO\.cache.framework.templates.forms.CompositeField_holder.ss' )	..\SSViewer.php:952
27	2.2924	50147624	SSViewer_DataPresenter->XML_val( )	..\.cache.framework.templates.forms.CompositeField_holder.ss:57
28	2.2924	50148120	SSViewer_DataPresenter->__call( )	..\.cache.framework.templates.forms.CompositeField_holder.ss:57
29	2.2924	50148552	SSViewer_Scope->__call( )	..\SSViewer.php:524
30	2.2924	50149016	call_user_func_array ( )	..\SSViewer.php:178
31	2.2924	50149504	ViewableData->XML_val( )	..\SSViewer.php:178
32	2.2924	50149552	ViewableData->obj( )	..\ViewableData.php:438
33	2.2924	50149680	FormField->FieldHolder( )	..\ViewableData.php:363
34	2.2925	50150488	ViewableData->renderWith( )	..\FormField.php:603
35	2.2926	50152688	SSViewer->process( )	..\ViewableData.php:336
36	2.2936	50154008	SSViewer->includeGeneratedTemplate( )	..\SSViewer.php:1019
37	2.2956	50195704	include( 'C:\wamp\www\sitetuners\silverstripe-cache\HEMANT-VAIO\.cache.framework.templates.forms.FormField_holder.ss' )	..\SSViewer.php:952
38	2.2963	50197568	SSViewer_DataPresenter->XML_val( )	..\.cache.framework.templates.forms.FormField_holder.ss:31
39	2.2963	50198064	SSViewer_DataPresenter->__call( )	..\.cache.framework.templates.forms.FormField_holder.ss:31
40	2.2963	50198488	SSViewer_Scope->__call( )	..\SSViewer.php:524
41	2.2963	50198952	call_user_func_array ( )	..\SSViewer.php:178
42	2.2963	50199440	ViewableData->XML_val( )	..\SSViewer.php:178
43	2.2964	50199488	ViewableData->obj( )	..\ViewableData.php:438
44	2.2964	50199616	TreeDropdownField->Field( )	..\ViewableData.php:363
45	2.2979	50203424	ViewableData->renderWith( )	..\TreeDropdownField.php:221
46	2.2981	50205624	SSViewer->process( )	..\ViewableData.php:336
47	2.2991	50206944	SSViewer->includeGeneratedTemplate( )	..\SSViewer.php:1019
48	2.3011	50244264	include( 'C:\wamp\www\sitetuners\silverstripe-cache\HEMANT-VAIO\.cache.framework.templates.forms.TreeDropdownField.ss' )	..\SSViewer.php:952
49	2.3017	50246168	SSViewer_DataPresenter->XML_val( )	..\.cache.framework.templates.forms.TreeDropdownField.ss:22
50	2.3017	50246664	SSViewer_DataPresenter->__call( )	..\.cache.framework.templates.forms.TreeDropdownField.ss:22
51	2.3017	50246880	SSViewer_Scope->__call( )	..\SSViewer.php:524
52	2.3017	50247344	call_user_func_array ( )	..\SSViewer.php:178
53	2.3017	50247832	ViewableData->XML_val( )	..\SSViewer.php:178
54	2.3017	50247880	ViewableData_Customised->obj( )	..\ViewableData.php:438
55	2.3017	50247928	ViewableData->obj( )	..\ViewableData.php:641
56	2.3017	50248472	call_user_func_array ( )	..\ViewableData.php:363
57	2.3017	50248792	FormField->Link( )	..\ViewableData.php:363

Can anyone help what is wrong with the above code and how I can insert the TreeDropdownField in the LinkForm?? Thanks

Avatar
guywatson

Community Member, 16 Posts

1 September 2014 at 6:09pm

I ran into a similar issue. I solved it by setting the form for each field. For example try
$imageField->setForm($form);

Also do that to any other offending form fields

Cheers