it-swarm.com.de

Wie verwende ich einen Ansichtskontextfilter ODER?

Nach einer Weile im Internet und in SE scheint es mir keine gute Lösung zu geben, 2 contextual filters Mit OR (anstelle des Standard-AND) zu kombinieren.

Dieser Beitrag erwähnt einen PHP-Hack und dieser Beitrag enthält einige Links zu einem Problem , der eine kürzlich erfolgte Änderung in Ansichten 7.x-) angibt. 3.1 . Außerdem wird die Verwendung von hook_views_query_alter(&$view, &$query) zum Ändern der Ansicht erwähnt.

Hat jemand ein funktionierendes Beispiel oder eine bessere Lösung?

17
uwe

Versuchen Sie den Patch in dieser Ausgabe: Filterwert aus einem Argument ziehen

Sie können den Wert vom Kontextfilter an den "normalen Filter" übergeben. Dort können Sie Ihre fortgeschrittenen Bedingungen erfüllen.

7
mojzis

Der Kommentarthread ab hier beschreibt eine effektive Problemumgehung. MotoTribe hat mit demselben Thread verlinkt, aber zum Zeitpunkt seiner Frage gab es auf dieser Seite kein funktionierendes Beispiel. Nun gibt es wie folgt:

Implementieren Sie in Ihrem Modul hook_views_api():

function MODULENAME_views_api() {
  return array(
    'api' => 3,
  );
}

Fügen Sie dann Ihrem Modul eine neue Datei mit dem Namen MODULENAME.views.inc hinzu und implementieren Sie hook_views_query_alter():

function MODULENAME_views_query_alter(&$view, &$query) {
  if ($view->name == 'whatever_your_view_is_called') {
    $query->where[0]['type'] = 'OR';
  }
}

Beachten Sie auch diese Einschränkung:

Anscheinend wird der Filter "Inhalt: Veröffentlicht (Ja)", der mit jeder Ansicht geliefert wird, als Teil derselben Filtergruppe wie die Kontextfilter (Gruppe 0) betrachtet. Damit meine Ansicht nur veröffentlichte Knoten anzeigt, die zu einer der durch Kontextfilter angegebenen Gruppen gehören (veröffentlichtes AND (arg1 OR arg2 OR ...)) musste ich den "Inhalt: Veröffentlicht (Ja)" in eine neue Filtergruppe verschieben (unter Verwendung von "Und/Oder Neu anordnen"). Beachten Sie, dass die Benutzeroberfläche den Filter "Inhalt: Veröffentlicht (Ja)" nicht anders angezeigt hat, nachdem ich ihn in eine neue Gruppe verschoben habe (es gab keine anderen Gruppen), sondern in dem Abfrageobjekt, an das übergeben wird hook_views_query_alter() es wurde von Gruppe 0 in Gruppe 1 verschoben, wodurch der Code in den obigen Funktionen keine Auswirkungen mehr hat.

7
coredumperror

Es gibt ein Modul, das die Handler von Ansichten ändert, um Kontextfilter für die Verwendung mit OR anstelle von AND: Ansichten Kontextfilter ODER zu erstellen

4
Sinan Erdem

Die Situation mit Kontextfiltern und Filtergruppen ist in der Tat trostlos. Hier ist ein Thread zu D.o über dieses Topic, das die gleiche Lösung wie von @CoreDumpError angegeben hat.

https://drupal.org/node/1451218

Hier ist auch ein Modul, das helfen kann, widersprüchliche kontextbezogene und exponierte Filter zu lösen ... Views Filter Harmonizer

2
doublejosh