Jump to:

5452 Posts in 1673 Topics by 1197 members

Customising the CMS

SilverStripe Forums » Customising the CMS » Can't make the SearchForm work properly

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

Page: 1
Go to End
Author Topic: 1226 Views
  • Mysth-R
    Avatar
    Community Member
    3 Posts

    Can't make the SearchForm work properly Link to this post

    Hi,

    I am trying to make a searchForm in my website, but on some keywords, it doesn't work properly.
    Here is the structure :

    Agence.php
    AgenceParis.php
    Page.php
    Ville.php

    The search form is displayed on the home page.

    1 Agence can have many AgenceParis and many Ville.
    1 AgenceParis can have one Agence and many Ville.
    1 Ville can have one Agence and one AgenceParis.

    _______________> Ville
    Agence / /
    \ _____> AgenceParis /

    In the Agence.php I defined :

       static $has_many = array (
          'Villes'=>'Ville',
          'AgencePariss'=>'AgenceParis',
       );

       static $searchable_fields = array(
       'Ville.Nom',
    //           'Ville.codepostal',
              'AgenceParis.InfoBulle'
    );

    In the AgenceParis.php :

    static $has_many = array (
          'Villes'=>'Ville',
       );

       static $has_one = array (
             'MyAgence'=>'Agence'
       );
       static $searchable_fields = array(
       'Ville.Nom',
       'AgenceParis.InfoBulle'
    //           'Ville.codepostal'
    );

    In the Ville.php :

       static $has_one = array (
             'MyAgencePage'=>'Agence',
             'MyAgenceParisPage'=>'AgenceParis'
       );

       static $searchable_fields = array(
       'Ville.Nom',
    //           'Ville.codepostal'
    );

    And now this is how I define the search engine in Page.php :

    function SearchForm() {
          $context = singleton('Ville')->getDefaultSearchContext();
          $fields = $context->getSearchFields();
          $actions = new FieldSet(new FormAction('doSearch', 'ok'));
          $form = new SearchForm($this, "SearchForm", $fields, $actions);
          return $form;
       }

       public function doSearch($data, $form) {
          $context = singleton('Ville')->getDefaultSearchContext();
          $results = $context->getResults($data);
          return $this->customise(array(
             'Results' => $results
          ))->renderWith( array ('Page_results', 'Page'));
       }

    To resume.
    I got many Agences which owns many Villes. (cities)
    But for Paris, I got severals Agences. So for the Agences named Paris I got several AgenceParis which each owns Villes (cities).

    When I do a search on a city of an agency the result is ok
    (ex: Aubagne dépend de l'agence "Marseille") Aubagne is the city and the keyword and Marseille is the Agency)

    When I do a search on a AgenceParis of an agency, the result is also ok
    (ex : Versailles & alentours dépend de l'agence "Paris et Ile de France") Versaille & alentours is the AgenceParis, Versaille is the keyword and Paris et Ile de France is the Agency
    But when I do a search on a city of an AgenceParis, this look like :
    (ex : Elancourt dépend de l'agence "" and this link points to http:///) elancourt is a ville wich depend on a Agence Paris.

    I don't really know what is wrong in my code.
    Thank you for helping me.

    Erwan.

  • Mysth-R
    Avatar
    Community Member
    3 Posts

    Re: Can't make the SearchForm work properly Link to this post

    Well, I solved my problem

    The problem was in the template. Adding a condition to display AgenceParis when Agence = "" did it.
    Thank you Digo who helped me on IRC.

    Erwan.

    1226 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.