Ändern Sie die Standardauswahl für einen Views 2-Filter


7

Ich habe einen exponierten Filter in meiner Ansicht, mit dem Benutzer zwischen zwei verschiedenen Inhaltstypen wählen können. Der Standardwert für den exponierten Filter scheint nach dem Inhaltstyp ausgewählt zu sein, der zuerst alphabetisch zuerst angezeigt wird. Wenn ich also Benutzer zwischen den Inhaltstypen "Band" und "Song" wählen lasse, ist der Standard "Band". Ich möchte diesen Standardwert in einen anderen Inhaltstyp ändern ("Song" im Beispiel hier). Ich kann hierfür keine Option in der Ansichtsoberfläche finden. Muss ich das über machen hook_form_alter? Wenn ja, wie genau würde ich das tun?

Antworten:


5

Also habe ich versucht, wie @David Lanier es vorgeschlagen hat, aber ich konnte meinen Kopf nicht ganz darum wickeln. Also ging ich zurück zu den Drupal-Grundlagen und probierte es aus dem hook_form_alter()Ansatz aus. Nach einiger Fehlerbehebung habe ich auch einen Beitrag zum Ändern der Standardwerte für Ansichtsfilter gefunden . Ich habe den gleichen Ansatz gewählt und ihn zum Laufen gebracht. Unten ist der Code a verwendet, mit ein paar Modifikationen, um meine ortsspezifischen Sachen herauszunehmen. Ersetzen Sie wie immer "Modulname" durch den Namen Ihres Moduls.

function modulename_form_alter(&$form, $form_state, $form_id) {
 // is this the right form?
 if($form['#id'] == 'name-of-the-views-form-displayed') {
   if (empty($_GET['label-of-the-filter']))  {
    $form_state['input']['label-of-the-filter'] = 'default-value-for-filter';
   }
  }
}

Ersetzen name-of-the-views-form-displayedSie einfach den Namen des Ansichtsformulars, das Sie ändern möchten. Der einfachste Weg, dies zu finden, besteht darin, die Quelle der Ansicht im Browser zu überprüfen (ich liebe Firebug dafür), das formElement zu finden und dann das idAttribut zu ermitteln. Um den Namen des Filters und den Wert zu finden, den Sie einstellen sollten, ändern Sie die Filter und führen Sie die "Suche" durch. Schauen Sie in die Adressleiste und Sie werden die Werte sehen, die Sie hier als Parameter in der URL verwenden müssen.

Ich hoffe, dies hilft auch anderen, dieses Problem zu lösen!


Entschuldigen Sie die Thread-Nekromantie, aber ich habe Ihre Lösung ausprobiert und sie ändert tatsächlich die Vorauswahl im Eingabefeld - aber die tatsächliche Ansicht wird bereits gerendert (Nicht-AJAX-Ansicht). Am Ende wurde ein JS-Snippet in die Fußzeile der Ansicht eingefügt, das den Wert <Any> auswählt, wenn admin ausgewählt ist, und dann das Ansichtsformular sendet, um die Seite zu aktualisieren. Roh, funktioniert aber vorerst.
rot

2

Ich habe es so gemacht

function hook_form_views_exposed_form_alter(&$form, &$form_state) {

  global $user;
  $account = user_load($user->uid);
  $term = taxonomy_term_load($account->field_user_industry[LANGUAGE_NONE]['0']['tid']);

  unset($form['field_event_industry_tid']['#size']);
  if ($form['#id'] == 'views-exposed-form-events-events-pane') {
    // get the view argument if defined
    $term_filter=$_GET;
    unset($term_filter['q']);
    $term_arg = $term_filter;
    if (!empty($term_arg)) {
      $terms = $term_arg;
    }

    // change our input as required
    if (isset($terms)) {
      $form_state['input']['field_event_industry_tid'] = $terms['field_event_industry_tid'];
    }
    else{
      $form_state['input']['field_event_industry_tid'] = $term->tid;
    }
  }
}

In meinem Fall musste ich den Standardwert entsprechend der Abfrage ändern, aber wenn dies nicht der Fall ist, verwende ich den gewünschten Wert. Auf diese Weise funktioniert es perfekt!


1

Sobald der Filter verfügbar ist, sollten in den Konfigurationsoptionen für den Filter Kontrollkästchen für jeden Inhaltstyp auf Ihrer Site angezeigt werden. Diejenigen, die Sie hier überprüfen, sind diejenigen, die standardmäßig ausgewählt sind, wenn ein Endbenutzer die Ansicht sieht.

Wenn nur einige Ihrer Inhaltstypen im Formular verfügbar sein müssen und nur einige der vorausgewählten, müssen Sie Folgendes tun: Fügen Sie zwei Inhaltstypfilter hinzu:

  • Filter 1 = nur die Inhaltstypen, die verfügbar sein sollten. Setzen Sie diesen Filter nicht frei.
  • Filter 2 = der belichtete Filter. Wählen Sie hier diejenigen aus, die standardmäßig vorgewählt werden sollen.

Es ist eher so, als hätte ich einen exponierten Filter, der auf zwei Optionen eingegrenzt ist, aber ich möchte, dass der zweite standardmäßig anstelle des ersten ausgewählt wird.
Chaulky

Einer meiner obigen Vorschläge sollte immer noch für Sie funktionieren. Möglicherweise müssen Sie meinen zweiten Vorschlag mit zwei Filtern versuchen: dem ersten, um die verfügbaren Optionen einzugrenzen, dem zweiten Filter, um festzulegen, was standardmäßig ausgewählt ist.
David Lanier

Ich werde es ausprobieren, aber ich sehe nicht wirklich, wohin Sie damit gehen. Ich brauche möglicherweise mehr Klarheit, nachdem ich mit Ihren Vorschlägen experimentiert habe.
Chaulky

Wie wähle ich mithilfe eines Filters aus, welcher standardmäßig ausgewählt ist? Ich habe bereits einen Filter, der die zulässigen Inhaltstypen einschränkt, und einen zweiten, der verfügbar ist, sodass sie zwischen den beiden zulässigen auswählen können. Aber wie hilft das bei der Auswahl eines Standardwerts?
Chaulky

1

Vielleicht hast du schon die Antwort bekommen, aber hier ist, wie ich gelöst habe. Wenn Sie den Filter in der Ansicht bearbeiten, gibt es eine Option namens " Liste auf ausgewählte Elemente beschränken ". Ich habe diese Option aktiviert und der Standardwert wurde zurückgesetzt. Daher ist der Standardwert des Filters jetzt Alle (mit dem Tag Beliebig).


0

Siehe den Ende des Beitrags unter:

http://realguess.net/node/28

Wenn Sie unter Client-Geschlecht keine der Optionen auswählen und das Kontrollkästchen Optional aktivieren. Dieser exponierte Filter ist optional und verfügt über zusätzliche Optionen, damit er nicht festgelegt werden kann. Feld, wird dann die Standardauswahl sein. Wenn Sie das Element "Männlich" auswählen, wird beim Rendern der Ansicht standardmäßig "Männlich" ausgewählt.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.