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.

Widgets /

Discuss SilverStripe Widgets.

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

TreeDropdownField doesn't work with widget


Go to End
Reply


12 Posts   6615 Views

Avatar
snaip

Community Member, 180 Posts

28 January 2009 at 9:01am

Edited: 28/01/2009 9:04am

static $db = array(
               'File' => 'Text'
		
);

function getCMSFields(){
	  
		return new FieldSet(
			new TreeDropdownField('File','Image file name','File')

		);		  	  
};

i have the error: "Error getting data"

this solution doesn't work too
http://www.silverstripe.org/archive/show/118008

Avatar
dio5

Community Member, 501 Posts

28 January 2009 at 9:16am

Yes, TreeDropdownFields don't work in widgets (yet).

Perhaps you can use a regular dropdownfield instead?

Avatar
snaip

Community Member, 180 Posts

28 January 2009 at 9:34am

:(
DropdownField works good but i have folder tree like this:

+warsaw
- castle_image.jpg
- wisla_river.jpg

+krakow
- castle_image.jpg
- mariacki_church_jpg
- wisla_river.jpg

so i have to create two DropdownField to select full URL to the file
one for Folder
second for Image file

i don't want to list all the image files in DropdownField, if i select Warsaw folder i want to list only this files which are in the Warsaw folder

is there any method to create it ?

Avatar
UncleCheese

Forum Moderator, 4102 Posts

28 January 2009 at 10:18am

The TreeDropdownField doesn't work with much. I created a SimpleTreeDropdownField, which is just a regular dropdown menu organized hierarchically. No javascript. Let me know if you want the code. You could use that to ajax-update your second dropdown menu for the files.

Avatar
snaip

Community Member, 180 Posts

28 January 2009 at 10:28am

UncleCheese yes please

Avatar
snaip

Community Member, 180 Posts

28 January 2009 at 10:57am

ok i have alternative version, maybe it is not very beautiful but i have something like a hierachy

new DropdownField('File_name','Select image:',DataObject::get("File")->toDropdownMap('Filename','Filename'))

Avatar
UncleCheese

Forum Moderator, 4102 Posts

28 January 2009 at 11:21am

Try this for the folder part:


<?php

class SimpleTreeDropdownField extends DropdownField
{
	function __construct( $name, $title, $className = "Folder", $value = null, $form = null, $emptyString = null) 
	{
		$this->className = $className;
		$optionArray = $this->getHierarchy(0);
		parent::__construct( $name, $title, $optionArray, $value, $form, $emptyString );
	}
	
	private function getHierarchy($parentID, $level = 0)
	{
		$options = array();		
		if($children = DataObject::get($this->className, "ParentID = $parentID")) {
			foreach($children as $child) {
				$indent="";
				for($i=0;$i<$level;$i++) $indent .= "&nbsp;&nbsp;";
				$options[$child->ID] = $indent.$child->Title;
				$options += $this->getHierarchy($child->ID, $level+1);
			}
		}
		return $options;
	}
}


?>

Avatar
snaip

Community Member, 180 Posts

28 January 2009 at 9:37pm

ok, where i should put this code ?

ImageWidget.php

class ImageWidget extends Widget {

[...]

return new FieldSet(
  new DropdownField('File_name','Image file: ',$this->getHierarchy)
)

[...]

}


class SimpleTreeDropdownField extends DropdownField {

}

doesn't work

class ImageWidget extends Widget {

[...]

return new FieldSet(
  new DropdownField('File_name','Image file: ',$this->getHierarchy)
)

[...]

}


class SimpleTreeDropdownField extends ImageWidget {

}

i get:

Fatal error: Declaration of SimpleTreeDropdownField::__construct() must be compatible with that of DataObjectInterface::__construct() in /home/wilgocki/domains/wilgocki.net/public_html/silverstripe/widgets_ImageWidget/ImageWidget.php on line 94

my previous code works but i need to wrap words after 50 chars (http://www.silverstripe.org/customising-the-cms/show/253177?showPost=253177)

new DropdownField('File_name','Select image:',DataObject::get("File")->toDropdownMap('Filename',wordwrap('Filename', 50, "\n", 1))) 

Go to Top