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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

Data Model Questions /

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

Scaffolded search form shows only one field


Go to End


3 Posts   1970 Views

Avatar
Euphemismus

Community Member, 82 Posts

7 November 2009 at 1:19am

Hi folks,

at the moment I'm working on some portal and encountered a problem with scaffolded search forms. I'm using a code example from the wiki to create a search form in my application.
Everything works fine, except the fact that I only get one field for the search. As far as I understood the magic, there should be one search field per defined (whitelist) field in my getCustomSearchField() method.
I did some debug on the $fields with Debug::dump() which showed me a larger object structure where I could only find the "title" and some recursions, but not the other defined fields.
I double-checked my database declarations in the model and all fields are there, icluding the correct data types.

Any ideas?

code:

	public function getCustomSearchContext()
	{
		$fields = $this->scaffoldSearchFields( array(
						'restrictFields' => array(
													'Title',
													'Content',
													'Instrument',
													'Plz',
													'Location',
													'Ambition',
													'ExpiryDate'
												)
					)
				);

		$filters = array(
					'Title' => new PartialMatchFilter( 'Title' ),
					'Content' => new PartialMatchFilter( 'Content' ),
					'Instrument' => new ExactMatchFilter( 'Instrument' ),
					'Plz' => new PartialMatchFilter( 'Plz' ),
					'Location' => new ExactMatchFilter( 'Location' ),
					'Ambition' => new ExactMatchFilter( 'Ambition' ),
					'ExpiryDate' => new LessThanFilter( 'ExpiryDate' ),
				);

		return new SearchContext(
					$this->class,
					$fields,
					$filters
				);
	}

Avatar
AlaVive

Community Member, 42 Posts

7 November 2009 at 7:28am

I just came across this problem yesterday. You have to declare the searchable fields first in your controller. (At least, that's what worked for me-- someone else may offer a cleaner explanation):


static $searchable_fields = array(
   'Title' => 'PartialMatchFilter',
   'Content' => 'PartialMatchFilter',
   'Instrument' => 'ExactMatchFilter',
   'Plz' => 'PartialMatchFilter',
   'Location' => 'PartialMatchFilter',
   
   ); 

(etc., etc...)

Does this help?

Avatar
Euphemismus

Community Member, 82 Posts

7 November 2009 at 9:21pm

Edited: 09/11/2009 10:18pm

Hi AlaVive,

it worked! I tested it with the additional $searchable_fields array - that did the trick.
So I will comment on the tutorial mentioned above, that the definition of searchable fields is needed (SS 2.3.3).
Thank you :-)