it-swarm-ko.tech

뷰 노출 필터에 '전체'옵션 추가

여러 항목을 선택할 수있는 조회 노출 필터가 있습니다. 다중 선택 CCK 필드의 '허용 된 값'을 기반으로합니다.

노출 된 필터는 다음과 같이 나타납니다.

Option 1
Option 2
Option 3

상단에 'All'옵션을 추가해야하므로 다음과 같습니다.

All
Option 1
Option 2
Option 3

모두 옵션을 클릭하면 Ctrl 키를 누른 상태에서 옵션 1, 2 및 3을 클릭하는 것과 같은 효과가 있습니다. 이 필드에 대해 옵션 1, 옵션 2 또는 옵션 3 값을 가진 모든 노드를 반환합니다.

위젯에 이러한 옵션을 추가하려면 어떻게해야합니까? 어떻게 든 form_alter를 통해 수행 할 수 있다고 확신하지만 방법을 알 수는 없습니다.

5
Tom Kirkpatrick

알았어 ... 금이 간 것 같아.

function mymodule_form_alter(&$form, $form_state, $form_id) { 
  if ($form_state['view']->name == 'myview') {
    // Add our custom All buttons.
    $form['myfield']['#options'] = array("-ALL-" => t("- All -")) + $form['myfield']['#options'];
    array_unshift($form['#submit'], 'mymodule_exposed_form_submit');
  }
}

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  if (!empty($form_state['values']['myfield']['-ALL-'])) {
    $options = $form['myfield']['#options'];
    unset($options['-ALL-']);
    $form_state['values']['myfield'] = $options;
  }
}

기본적으로 나는 선택의 상단에 'All'항목을 추가합니다. 그런 다음 Views 'one 앞에 내 사용자 정의 제출 핸들러를 추가합니다.

제출 핸들러에서 All 옵션이 있는지 확인하고, 찾은 경우 All 옵션을 제외한 모든 옵션이 선택되도록 선택한 옵션을 조정합니다.

작동하는 것 같습니다 :)

10
Tom Kirkpatrick

옵션으로 노출되지 않은 동일한 필터를 추가 할 수 있습니다.

Option 1
Option 2
Option 3

노출 된 필터의 "All"옵션은이 세 가지 옵션에 대한 결과 만 표시합니다.

2
yarroha

필자의 경우 (노소 용어의 노출 필터보기) -All-을 얻으려면 모든 옵션을 선택 취소해야했습니다. 왜 그런 식으로 작동하는지 모르겠습니다.

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  if (!empty($form_state['values']['myfield']['-ALL-'])) {
    $form_state['values']['myfield'] = array();
  }
}

기본적 으로이 작업을 수행 할 수는 없지만 노출 된 필터를 개선하기 위해 특별히 작성된 모듈을 사용할 수 있습니다. Better Exposed Filters 라고합니다.

1
F1234k

나는 두 가지 매우 못생긴 솔루션을 수행했습니다.

모든 값을 인쇄하도록 기본 설정되어 있다고 가정하면 디스플레이 출력 템플릿의 옵션 (views-view.tpl.php). 예

<?php if ($attachment_before): ?>
  <div class="attachment attachment-before">
  <?php $attachment_before = str_replace('<div class="view-content">',                                     
   '<div class="view-content"><div class="views-summary views-summary-unformatted"><a href="/glossary/all">All</a></div>', $attachment_before); ?>

    <?php print $attachment_before; ?>
  </div>
<?php endif; ?>

다른 방법은 본질적으로 jQuery와 동일한 기능을 수행합니다.

1
mpdonadio

노출 된 필터가 여러 개로 지정되고 선택 사항이 아닌 경우 옵션을 모두 선택하거나 선택하지 않으면 동일한 결과가 나타납니다. 한 가지 옵션은 필터 도움말 텍스트에서이를 언급하는 것입니다. 다른 옵션은 Better Exposed Filters를 설치하고 필터 기능을 변경하지 않으면 서 사용자에게보다 직관적 인 인터페이스를 제공하는 all/none 링크 선택을 활성화하는 것입니다.

1
mikeker

Tom Kirkpatrick는 정확했지만 모든 옵션을 추가하는 대신 모든 옵션을 제거하여 양식 상태 값을 비울 수도 있습니다. 이것은 기본적으로 모든 값을 표시하며 약간 더 깨끗합니다.

function mymodule_form_alter(&$form, $form_state, $form_id) { 
  if ($form_state['view']->name == 'myview') {
    // Add our custom All buttons.
    $form['myfield']['#options'] = array("-ALL-" => t("- All -")) + $form['myfield']['#options'];
    array_unshift($form['#submit'], 'mymodule_exposed_form_submit');
  }
}

function mymodule_exposed_form_submit(&$form, &$form_state) { 
  $myfield_values = $form_state->getValue('myfield');
  if (!empty($myfield_values) && isset($myfield_values['-ALL-'])) {
    $form_state->set('myfield', []);
    $form_state->setValue('myfield', []);
  }
}
1
user33560

적어도 Drupal 8 (D7에도 적용되는지 모르겠다))의 경우 더 나은 노출 필터를 사용하면 노출 된 필터에 "전체/없음 링크 선택"을 추가 할 수 있습니다. 사용중인 버전 : 8.x-3.0

이 옵션을 노출 된 필터에 추가하려면보기로 이동하여 고급 패널> 더 잘 노출 된 필터> 설정에 액세스 한 다음 각 노출 된 필터 아래에 "[FIELD_NAME]에 대한 더 많은 옵션"(FILTER LABEL : " [상표]")".

""모두 선택/없음 "추가 확인란을 선택하십시오 :

"확인란을 사용하여 노출 된 필터를 렌더링 할 때"모두 선택/없음 "링크를 추가하십시오.이 옵션을 사용하지 않으면 필터를 편집하고"다중 선택 허용 "을 확인하십시오.

!이 "모두"옵션을 선택한 상태에서 발견 한 문제는 양식에 자동 제출 기능이 설정되어있을 때 페이지를 계속 새로 고칩니다. 그러나 해당 기능이 필요하지 않으면 매력처럼 작동하는 것 같습니다 .

0
ElaAle