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.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Pass CheckboxSetField array to DropdownField?


Go to End
Reply


2 Posts   1490 Views

Avatar
AlaVive

Community Member, 42 Posts

10 November 2009 at 5:00pm

Edited: 12/11/2009 10:41am

I always feel like I'm posting to the wrong place on the forums, but I'm taking a stab at this again.

I'm using a CheckboxSetField to add multiple brand names to each PDF that's uploaded to a technical documents section of the site.

I need to be able to search the different PDF files using "Brands" as a field, but I wan to be able to pass the array of options to a dropdown, rather than a text search.

Using ComplexSearch, is there a way to pass the array from the CheckboxSetField to a dropdown?

<?php

class TechDoc extends DataObject
{
	static $db = array (
		'Name' => 'Text',
		'Brand' => 'Varchar',
		'Description' => 'Text',
		'Language' => "Enum('English, French, Spanish, Portuguese, Polish, German')"
	);
	
	static $has_one = array (
		'Attachment' => 'File',
		'TechDocPage' => 'TechDocPage'
	);
    	
	static $has_many = array(
		'TechDoc' => 'Brand'

	); 

	public function getCMSFields_forPopup()
	{
		return new FieldSet(
			new TextField('Name'),
			new TextareaField('Description'),
			new CheckboxSetField('Brand','Brand',(array ("BrandA" => "BrandA","BrandB" => "BrandB","BrandC" => "BrandC"))),
			new DropdownField('Language','Language', singleton('TechDoc')->dbObject('Language')->enumValues()),
			new FileIFrameField('Attachment')
		);
	}
	
	static $searchable_fields = array(
			'Name' => 'PartialMatchFilter',
			'Language' => 'ExactMatchFilter',
			'Description' => 'PartialMatchFilter',
	/*This does work, but I need a dropdown*/
		'Brand' => 'PartialMatchFilter'
			/*This does not work, since I can't pass it the array for the dropdown:
		'Brand' => array(
			   'title' => 'Brand',
			   'field' => 'DropdownField',
			   'filter' => 'PartialMatchFilter'
       ),*/
		);
	
	
	public function getCustomSearchContext() {
		$fields = $this->scaffoldSearchFields(array(
			'restrictFields' => array(
				'Name',
				'Brand',
				'Language',
				'Type'
				)
		));
		
		/*This seems redundant, but I'm working from the tutorial...*/
		
		$filters = array(
			'Name' => new PartialMatchFilter('Name'),
			'Brand' => new PartialMatchFilter('Brand'),
			'Language' => new ExactMatchFilter('Language'),
			'Type' => new PartialMatchFilter('Type')
			
		);
		return new SearchContext(
			$this->class, 
			$fields, 
			$filters
		);
	}

}
?>

If there's a better way to do this, I'm perfectly happy to know how I might change this ;-).

Thanks in advance.

Avatar
AlaVive

Community Member, 42 Posts

12 November 2009 at 10:40am

Edited: 12/11/2009 10:41am

I'm sure there's probably a better way to ask this-- that's part of my problem.

But, even if I find out what I need to do is impossible, it would save me some time and a boat-load of stress.

Anyone?