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 /

Scaffolded search form shows only one field


Reply


3 Posts   1386 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 [url=http://doc.silverstripe.org/doku.php?id=searchcontext]a code example from the wiki[/url] 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 :-)