2016-08-13 2 views
0

검색 양식을 표시하는 코드가있는 SilverStripe 사이트가 있습니다. for를 사용하면 3 가지를 기반으로 무언가를 검색 할 수 있습니다. 문제는, 결과를 별도의 페이지에 올바르게 표시하는 방법을 모르겠습니다.별도의 페이지에 검색 결과 표시

내 코드 :

class InstitutionSearchPage extends Page { 
} 

class InstitutionSearchPage_Controller extends Page_Controller { 

    private static $allowed_actions = array(
     'Search' 
    ); 

    public function Form() { 
     $fields = new FieldList(array(
      DropdownField::create('DegreeType', 'Degree', QualificationType::get()->filter('ParentID', 0)->map()), 
      DropdownField::create('Course', 'Course', Qualification::get()->map()), 
      DropdownField::create('City', 'City', City::get()->map()), 
     )); 
     $actions = new FieldList(array(
      FormAction::create('Search')->setTitle('Find a College') 
     )); 
     $validator = ZenValidator::create(); 
     $validator->addRequiredFields(array(
      'DegreeType' => 'Please select a Degree', 
      'Course' => 'Please select a course', 
      'City' => 'Please select a city', 
     )); 
     $form = new Form($this, 'Search', $fields, $actions, $validator); 
     $form->setLegend('Criteria')->addExtraClass('form-horizontal')->setAttribute('data-toggle', 'validator'); 

     // Load the form with previously sent data 
     $form->loadDataFrom($this->request->postVars()); 
     return $form; 
    } 

    public function Search() { 
     return array('Content' => print_r($this->getRequest()->postVars(), true)); 
    } 
} 

그것은 같은 페이지에 결과를 표시하는 것 같지만 나에게 이상한 데이터의 무리를 준다. 예를 들어, 양식을 테스트했을 때 이것을 받았습니다 : Array ([DegreeType] => 53 [Course] => 1 [City] => 1 [SecurityID] => 02718d0283e27eeb539eff19616e0b23eadd6b94 [action_Search] => Find a College)

결과는 다른 데이터와 함께 조직 된 목록이어야합니다.

+0

검색 결과 함수는'return array ('Content'=> print_r ($ this-> getRequest() -> postVars(), true))'를 반환합니다. 즉, 검색 양식을 제출 한 필드를 침을 뱉어 버리는 것입니다. 테스트 예제는 제대로 수행하고있는 것처럼 보입니다. – 3dgoo

+0

결과의 DataList를 반환하고 템플릿의 내용을 반복하려면 '검색'기능을 업데이트해야합니다. 다음은이 작업을 수행하는 방법을 보여주는 좋은 SilverStripe 강의입니다. https://www.silverstripe.org/learn/lessons/building-a-search-form – 3dgoo

답변

0

폼이 검색 기능에 게시되고 템플릿에 의해 선택 될 포스트 바가있는 배열의 print_r을 반환하기 때문에 사용자가보고있는 것이 예상되는 동작이라고 생각합니다.

그렇지 않으면 양식을 처리하는 Silverstripe 기본 방법과 일치하지 않는 많은 것이 있습니다. 여기를 보시고 그에 따라 양식을 변경하십시오. https://docs.silverstripe.org/en/3.4/tutorials/forms/

예를 들어 양식과 기능이 동일한 경우 (또는 경우에 따라 양식 이름으로 기능 이름을 변경하십시오). 그런 다음 action 함수를 구현하십시오.