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.

Data Model Questions /

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

Scaffolded search form shows only one field


Go to End
Reply


3 Posts   1421 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 :-)