it-swarm-ko.tech

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

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

Default Views widget for sorting

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

New version of exposed widget for sorting

10
Eugene Fidelin

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

/**
 * 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; ?>
10
Eugene Fidelin

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

13
berdyshev