Wie kann eine exponierte Sortierung in Ansichten mit einem Dropdown-Widget angezeigt werden?

10

Standardmäßig verwendet das Views 3.0-Modul für Drupal 7 zwei Dropdown-Listen, um die exponierte Sortierung anzuzeigen. Erstes Dropdown-Menü zur Auswahl des Feldnamens und anderes zur Auswahl der Sortierrichtung.

Widget "Standardansichten" zum Sortieren

Wie kann ich eine Sortierung in einem Dropdown-Menü anzeigen?

Neue Version des exponierten Widgets zum Sortieren

Eugene Fidelin
quelle

Antworten:

13

Zu diesem Zweck können Sie das Modul Besser belichtete Filter verwenden. Es hat eine solche Option, Sortierfeld und Richtungen in einer Auswahlliste zu kombinieren.

berdyshev
quelle
Danke für andere Lösung!
Eugene Fidelin
3
Ich habe 30 Minuten gebraucht, um diese Option zu finden. In Ihrer Ansicht finden Sie es unter BEF-Einstellungen => Erweiterte Sortieroptionen => Sortierreihenfolge mit Sortieren nach kombinieren. Vielen Dank!!!
Roger
10

Sie müssen ein kleines Modul mit folgenden Hooks erstellen:

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

Dann müssen Sie die Datei "views / theme / views-exponed-form.tpl.php" in Ihren Themenordner kopieren und die Widgets $ sort_by und $ sort_order durch neue $ sorting ersetzen

Finden:

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

Ersetzen mit:

<?php if (!empty($sorting)): ?>
  <div class="views-exposed-widget views-widget-sort-by">
    <?php print $sorting; ?>
  </div>
<?php endif; ?>
Eugene Fidelin
quelle
Wie ändere ich die Bezeichnung beispielsweise "Datum der Veröffentlichung aufsteigend" und "Datum der Veröffentlichung absteigend" in "Neueste Produkte" und "Ältere Produkte"?
Ram