하나의 드롭 다운 위젯을 사용하여 뷰에 노출 정렬을 표시하는 방법은 무엇입니까?


10

기본적으로 Drupal 7 용 Views 3.0 모듈은 두 개의 드롭 다운을 사용하여 노출 된 정렬을 표시합니다. 첫 번째 드롭 다운에서 필드 이름을 선택하고 다른 드롭 다운에서 정렬 방향을 선택하십시오.

정렬을위한 기본보기 위젯

하나의 드롭 다운에서 정렬을 노출하려면 어떻게해야합니까?

정렬을위한 노출 된 위젯의 새 버전

답변:


13

그 목적으로 더 나은 노출 필터 모듈을 사용할 수 있습니다 . 정렬 필드와 방향을 하나의 선택 목록에 결합하는 옵션이 있습니다.


다른 솔루션에 대한 감사합니다!
유진 피델 린

3
그 옵션을 찾는 데 30 분이 걸렸습니다. 보기에서 BEF 설정 => 고급 정렬 옵션 => 정렬 순서와 정렬 순서 아래에 있습니다. 감사!!!
Roger

10

다음 후크를 사용하여 작은 모듈을 만들어야합니다.

/**
 * Implements hook_form_alter().
 *
 * Alter exposed filter form in views
 */
function MODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  if (isset($form['sort_by'])) {
    // Combine sort drop-downs into one.
    $form['sorting'] = array(
      '#type' => 'select',
      '#id'   => 'sort',
      '#title' => $form['sort_by']['#title'],
    );
    foreach ($form['sort_by']['#options'] as $sort_by_key => $sort_by_title) {
      foreach ($form['sort_order']['#options'] as $sort_order_key => $sort_order_title) {
        $form['sorting']['#options'][$sort_by_key . '|' . $sort_order_key] = $sort_by_title . ' ' . $sort_order_title;
      }
    }

    // Get default value for combined sort.
    $sort_by_keys = array_keys($form['sort_by']['#options']);
    $form['sorting']['#default_value'] = $sort_by_keys[0] . '|' . $form['sort_order']['#default_value'];
  }

  // Explode combined sort field into two values that are appropriate for views.
  if (isset($form_state['input']['sorting'])) {
    $sorting = explode('|', $form_state['input']['sorting']);
    $form_state['input']['sort_by'] = $sorting[0];
    $form_state['input']['sort_order'] = $sorting[1];
  }
}

/**
 * Default preprocess function for all filter forms.
 */
function MODULE_preprocess_views_exposed_form(&$vars) {
  $form = &$vars['form'];

  // Render new created sort field.
  if (isset($form['sorting'])) {
    $form['sorting']['#printed'] = FALSE;
    $vars['sorting'] = drupal_render($form['sorting']);

    // Need to rebuild the submit button.
    $form['submit']['#printed'] = FALSE;
    $vars['button'] = drupal_render_children($form);
  }
}

그런 다음 "views / theme / views-exposed-form.tpl.php"파일을 테마 폴더에 복사하고 $ sort_by$ sort_order 위젯을 새 $ 정렬로 바꾸십시오.

찾기:

<?php if (!empty($sort_by)): ?>
  <div class="views-exposed-widget views-widget-sort-by">
    <?php print $sort_by; ?>
  </div>
  <div class="views-exposed-widget views-widget-sort-order">
    <?php print $sort_order; ?>
  </div>
<?php endif; ?>

다음으로 교체하십시오.

<?php if (!empty($sorting)): ?>
  <div class="views-exposed-widget views-widget-sort-by">
    <?php print $sorting; ?>
  </div>
<?php endif; ?>

"출판 일 오름차순"및 "출하 일 날짜"와 같은 레이블을 "최근 제품"및 "이전 제품"으로 변경하려면 어떻게합니까?
Ram
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.