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 /

Show search parameters in Results Page (CustomSearchContext)


Go to End
Reply


10 Posts   2180 Views

Avatar
VRoxane

Community Member, 42 Posts

8 September 2010 at 3:29am

Hi all !

Below is my search function, BienImmo being my DataObject...

public function getCustomSearchContext() {
      $locs = DataObject::get('Localite');
         if ($locs) {
            $locs = $locs->toDropdownMap('ID', 'Ville', ' - Ville - ', true);
         }

      $fields = new FieldSet(
         new CheckboxSetField(
            $name = "Loc_Ville",
            $title = "Ville(s) :",
            $source = $locs,
            $value = ""
         ),
         new TextField('PrixMin', 'Prix Min'),
         new TextField('PrixMax', 'Prix Max')
      );
      $filters = array(
         'Loc_Ville' => new ExactMatchMultiFilter('LocaliteID'),
         'PrixMin' => new GreaterThanFilter('Prix'),
         'PrixMax' => new LessThanFilter('Prix')
      );
      
      return new SearchContext(
         $this->class,
         $fields,
         $filters
      );
   }

I need to remember the search parameters in the Results Page.
How can I get those in the results page template ?

A better thing would be to re-fill the form with those parameters (checkboxes checked, fields filled....).
Would it be possible ? Is SilverStripe THIS magical ? ;)

Avatar
Martijn

Community Member, 271 Posts

8 September 2010 at 4:06am

Short version:

$Loc_Ville = $this->request->postVar('Loc_Ville') ? $this->request->postVar('Loc_Ville') : '';
$PrixMin = $this->request->postVar('PrixMin') ? $this->request->postVar('PrixMin') : '';
$PrixMax= $this->request->postVar('PrixMax') ? $this->request->postVar('PrixMax') : '';

$fields = new FieldSet(
new CheckboxSetField(
$name = "Loc_Ville",
$title = "Ville(s) :",
$source = $locs,
$value = $Loc_Ville
),
new TextField('PrixMin', $PrixMin),
new TextField('PrixMax', $PrixMax)
);

Avatar
VRoxane

Community Member, 42 Posts

8 September 2010 at 4:48am

Thanks Martijn ! ... but where do I put those lines ?

I understand it names the variables so I can access them ... but I'm a bit lost, can you explain how to use this code ?

Seems your short version is too short for my SilverStripe knowledge ! :P

Avatar
Martijn

Community Member, 271 Posts

8 September 2010 at 4:52am

Its the same FieldsSet as you posted.

Replace the FieldsSet with one I posted and put the 3 lines above it.

Avatar
VRoxane

Community Member, 42 Posts

8 September 2010 at 4:55am

I get this :

Fatal error: Call to a member function postVar() on a non-object in E:\Program Files (x86)\wamp\www\modele_Immo\mysite\code\BienImmo.php on line 54

Avatar
Martijn

Community Member, 271 Posts

8 September 2010 at 5:12am

Try this:

$Loc_Ville = '';
$PrixMin = '';
$PrixMax = '';

if(isset($this->request)){
   $Loc_Ville = $this->request->postVar('Loc_Ville');
   $PrixMin = $this->request->postVar('PrixMin');
   $PrixMax = $this->request->postVar('PrixMax');
}

Avatar
VRoxane

Community Member, 42 Posts

8 September 2010 at 5:18am

Thank you very much for replying to fast !

Okay that works I have no errors.
The titles of the textfield disapeared, though.

How do I access the parameters after the search ?
Putting $Loc_Ville in my template didn't do anything.

Avatar
VRoxane

Community Member, 42 Posts

8 September 2010 at 5:23am

I made the titles of the fields reappear with

new TextField('PrixMin', 'Prix minimum', $PrixMin),

Any idea of how to get the Villes or the Prix Min and Prix max in my results page ?

Go to Top