2017-01-08 1 views
1

https://www.tripadvisor.com.ph/HotelsTextfeld automatisch auf Suchformular für Silverstripe?

Wo es heißt Geben Sie Ihre Stadt oder Ihr Hotel ein. Wenn Sie mit der Eingabe beginnen, werden unten Vorschläge angezeigt.

Ich möchte die gleiche Funktion auf meiner Suchmaske haben. Irgendwelche Ideen, wie es geht?

Hier ist mein Code:

public function Form() 
{ 
    $QualificationTypes = array("Any degree"); 
    foreach (QualificationType::get()->filter("ParentID", 0)->sort("Name") as $QualificationType) { 
     $QualificationTypes[$QualificationType->Name] = $QualificationType->Children()->sort("Name")->map()->toArray(); 
    } 


    $fields  = new FieldList(array(
     GroupedDropdownField::create("QualificationTypeID", "", $QualificationTypes)->setAttribute('placeholder','Type of degree')->setEmptyString("Any degree")->addExtraClass("chosen-select"), 
     DropdownField::create("CourseName", "", Qualification::get()->sort("Name")->map("Name","Name"))->setAttribute('placeholder','Course')->setEmptyString("Any Course")->addExtraClass("chosen-select"), 
     DropdownField::create("CityID", "", City::getCitiesWithInstitutions()->sort("Name")->map())->setAttribute('placeholder','City')->setEmptyString("Any city")->addExtraClass("chosen-select") 
    )); 
    $actions  = new FieldList(array(
     FormAction::create("doSearch")->setTitle("Find a College") 
    )); 
    $validator = ZenValidator::create(); 
    $validator->addRequiredFields(array(
     'QualificationTypeID' => 'Please select a Degree' 
    )); 
    $form  = new Form($this, 'findthem', $fields, $actions, $validator); 
    $form->addExtraClass("form-inline college-search")->setAttribute("data-toggle", "validator"); 
    $form->loadDataFrom($this->request->postVars()); 
    $form->disableSecurityToken(); 
    return $form; 
} 
+0

Sie für jedes Tutorial suchen oder versucht, etwas? Wenn du es getan hast, denke ich, dass du besser sagst, was du getan hast und auf welchem ​​Schritt du versagst. – koceeng

+1

Haben Sie den oben angegebenen Code gesehen? Das habe ich bisher mit Hilfe eines Freundes gemacht, der gerade genug Freizeit hatte, um mir zu helfen. Versuchen Sie, das Drop-down-Menü "Kurse" in ein Textfeld "Automatisch vorschlagen" zu konvertieren. – Thomas

+0

Haben Sie ein benutzerdefiniertes JavaScript, oder verlassen Sie sich ausschließlich auf Chosen für diese Funktionalität? Es lohnt sich wahrscheinlich, [wie silverstripe-tagfield] (https://github.com/silverstripe/silverstripe-tagfield/blob/master/code/TagField.php#L199-L236) [eine ähnliche Sache] (https://github.com/silverstripe/silverstripe-tagfield/blob/master/js/TagField.js#L53-L70). –

Antwort

1

Das Hotels.com Beispiel hat Ihnen ist etwas anders, was Ihr versuchen, wie Sie mehrere Felder zu tun haben, was es schwieriger, ein bitter macht.

Sagen Sie zum Beispiel, Sie hatten ein Feld "Suche nach einer Hochschule" Sie könnten etwas wie Jquery Autocomplete verwenden! und dann eine einfache SilverStripe function bauen! Das gibt Objekte basierend auf dem zurück, was der Benutzer eingibt.

Ich würde empfehlen, die Seite oben in Bezug auf SilverStripe-Controller zu lesen, wie Sie ein bisschen darüber wissen müssen, wie sie funktionieren, z. Routing und Aktionen

Hier ist ein einfaches Beispiel für die Autocomplete-Integration aussehen könnte. Eine SilverStripe-Funktion müsste die Backend-Seite behandeln.

$('.product-search').autocomplete({ 
    serviceUrl : pageURL + '/CollegeSearch', 
    minChars : 3, 
    onSearchStart : function(input) { 
     dataLayer.push({ 
      'event': 'searchKeyword', 
      'eventLabel': input.query 
     }); 
    }, 
    onSelect : function(suggestion) { 
     dataLayer.push({ 
      'event': 'searchProduct', 
      'eventLabel': suggestion.value 
     }); 
     window.location = suggestion.data; 
    } 
}); 

Und eine super einfache PHP-Funktion

public function Index() 
{ 
    if ($query = $this->request->getVar('query')) { 
     $colleges = $this->GetColleges($query); // another function that does a search 
     $results = array(); 
     if($colleges->count() > 0){ 
      foreach($colleges as $college){ 
       $results[] = array(
           'value' => $college->Title, 
           'data' => $college->AbsoluteLink() 
          ); 
      } 
     } 
     $suggestions = array('suggestions' => $results); 
     $converted = convert::array2json($suggestions); 
     return $converted; 
    } 
    return false; 
}