2012-04-29 3 views
1

필자는 "고급 검색"도구로 사용하는보기가 있습니다.이 도구는 단순히 내가 가지고있는 노출 된 필터의 수에 의해 제한되는 관련 노드 목록을 제공합니다. 특히, 노드 제목을 필터링하는 기본 검색 상자 역할을하는 "키워드"노출 필터가 있습니다. 이제는 사용자에게 검색 결과를 더 많이 제공 할 수있는 옵션으로 노드 제목 본문을 동시에 검색하기 위해이 필터를 체크 상자 또는 유사한 것으로 토글하는 기능에 대한 요청이있었습니다 .Drupal 6 조회수 : 확인란을 사용하여 필터를 켜기/끄기로 전환 하시겠습니까?

현재 노드 제목 만 필터링하는 디스플레이와 Views Or을 사용하여 노드 제목 또는 노드 본문에 키워드가있는 노드로 결과를 제한하는보기가 있습니다. 그 자체로,이 두 가지 디스플레이는 내가 원하는 방식으로 작동합니다.

제 질문은이 두 가지 디스플레이간에 확인란이나 비슷한 것을 사용하는 방법에 대한 것입니다. 두 디스플레이 모두 시각적으로 동일하기 때문에 Views Display Tabs을 사용하고 싶지 않습니다. 유일한 차이점은 필터가 더 많거나 적은 결과를 포함하도록 구성되어있어 사용자에게 혼란을 줄 수 있습니다. 플러스 AJAX를 사용하여 일부 (대부분 작은) jQuery를 통해 뷰의 동작을 수정했다.

본질적으로보기가 제출 될 때 조건부 검사입니다. 확인란이 선택되었는지 여부에 따라 인수가 하나의 디스플레이 또는 다른 것으로 전송됩니다. 이 작업을 수행하는 방법에 대한 제안 사항은 무엇입니까?

답변

1

이 문제를 해결할 수있는 방법 중 하나는 노출 된 필터 양식에 사용자 정의 유효성 검사기를 추가하는 것입니다. 이론적으로는 값을 확인하고 요청을 다른 페이지로 적절하게 전달할 수 있습니다. 노출 된 필터는 $ _GET 변수로 URL에 표시되므로 사전 정의 된 필터가있는 특정 페이지로 사용자를 전달하는 것이 쉽습니다.

<?php 

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
    case 'views_exposed_form': 
     // Deterimine the ID so you only do this 
     // to a specific exposed filter form 
     // drupal_set_message($form['#id']); 
     if ($form['#id'] == 'views-exposed-form-api-search-page-1') { 
     // You might also want to add the checkbox FAPI item in this area 
     $form['#validate'][] = 'mymodule_api_search_validate'; // custom validate handler function name 
     } 
    break; 
    } 
} 

function mymodule_api_search_validate($form, &$form_state) { 
    // Check if the FAPI item has the specified checkbox value 
    if ($form_state['values']['options'] == 'title') { 
    // The get variables to pass to the views exposed filters 
    // You can configure what this $_GET variable should be while editing the filter 
    $query = array(
     'query' => 'the search query', 
    ); 
    drupal_goto('api/search', $query); 
    } 
} 

?> 
+0

나쁜 생각은 필터를 블록으로 노출 한 다음 가시성을 제어하여 두 가지 다른보기 결과에 표시하고 재귀 적으로 사용할 수 있다는 것입니다. –