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 /

Customize LinkForm


Reply


2 Posts   368 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