Bagaimana cara menampilkan sortir dalam tampilan menggunakan satu widget drop-down?


10

Secara default modul Views 3.0 untuk Drupal 7 menggunakan dua drop-down untuk menampilkan sortir yang terbuka. Drop-down pertama untuk memilih nama bidang, dan yang lainnya - untuk memilih arah sortir.

Widget Tampilan Default untuk pengurutan

Bagaimana saya bisa memaparkan pengurutan dalam satu drop-down?

Versi baru widget terbuka untuk pengurutan

Jawaban:


13

Anda dapat menggunakan modul filter yang lebih baik untuk tujuan itu. Ini memiliki opsi untuk menggabungkan bidang sortir dan arah dalam satu daftar pilih.


Thanx untuk solusi lain!
Eugene Fidelin

3
Butuh waktu 30 menit untuk menemukan opsi itu. Pada tampilan Anda, Anda akan menemukannya di bawah pengaturan BEF => Opsi pengurutan lanjutan => Kombinasikan urutan pengurutan dengan urutkan berdasarkan. Terima kasih!!!
Roger

10

Anda perlu membuat modul kecil dengan kait berikut:

/**
 * 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);
  }
}

Maka Anda perlu menyalin file "views / theme / views-exposed-form.tpl.php" ke folder tema Anda dan ganti widget $ sort_by dan $ sort_order dengan $ sorting baru

Temukan:

<?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; ?>

Ubah dengan:

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

Bagaimana cara saya mengubah label misalnya "Date de publikasi ascending" dan "Date de publikasi descending" menjadi "Recent Prodcuts" dan "Older Products"?
Ram
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.