Jak korzystać z filtru kontekstowego widoków LUB?

18

Po pewnym czasie przeglądania sieci i SE wydaje mi się, że nie ma dobrego rozwiązania, aby połączyć 2 contextual filtersz OR (zamiast domyślnego AND).

W tym poście wspomniano o włamaniu do PHP, a w tym poście znajdują się linki do problemu informującego o ostatniej zmianie w widokach 7.x-3.1 . Wspomina także o użyciu hook_views_query_alter(&$view, &$query)do modyfikacji widoku.

Czy ktoś ma działający przykład lub lepsze rozwiązanie?

uwe
źródło
Nie wydaje mi się, aby istniało lepsze rozwiązanie. Jak wspomniano w wątkach, które wskazałeś, najwyraźniej jest to ciągły problem. W tym tygodniu natknąłem się na ten sam problem i musiałem znaleźć obejście z załącznikami. Ale nie daje to mieszanej listy, ale dwie połączone, co nie spełnia wszystkich potrzeb.
Countzero

Odpowiedzi:

7

Wątek komentarza rozpoczynający się tutaj opisuje skuteczne obejście. MotoTribe jest połączony z tym samym wątkiem, ale w czasie jego pytania nie było żadnego działającego przykładu na tej stronie. Teraz są następujące:

W swoim module zaimplementuj hook_views_api():

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

Następnie dodaj nowy moduł do modułu o nazwie MODULENAME.views.inc i zaimplementuj hook_views_query_alter():

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

Pamiętaj również o tym zastrzeżeniu:

Najwyraźniej filtr „Treść: opublikowany (Tak)”, który jest dołączany do każdego Widoku, jest uważany za część tej samej grupy filtrów, co filtry kontekstowe (grupa 0). Aby mój widok wyświetlał tylko opublikowane węzły, które należą do którejkolwiek z grup określonych przez filtry kontekstowe (opublikowane AND (arg1 LUB arg2 OR ...)), musiałem przenieść „Treść: Opublikowane (Tak)” do nowa grupa filtrów (za pomocą okna dialogowego „I / lub przełóż”). Zauważ, że interfejs użytkownika nie wyświetlał inaczej filtru „Treść: opublikowana (tak)” po przeniesieniu go do nowej grupy (nie było żadnych innych grup), ale przeniesiony do hook_views_query_alter()niego obiekt zapytania został przeniesiony z grupy 0 do grupy 1, powodując, że kod w powyższych funkcjach nie ma już na niego wpływu.

Coredumperror
źródło
1
Lepiej przynajmniej sparafrazować znaczenie odniesień do pytania PO. Odpowiedzi tylko na link są odradzane, ponieważ linki mogą nie zostać zachowane.
Triskelion
@Triskelion: Ach, masz absolutną rację. Zredagowałem moją odpowiedź, aby to naprawić.
coredumperror
4

Istnieje moduł, który zmienia moduły obsługi widoków, aby filtry kontekstowe były używane z LUB zamiast AND: Widoki Filtry kontekstowe LUB

Sinan Erdem
źródło
Chcę utworzyć widok z zawartością od „bieżącego użytkownika” + „Treść od oflagowanych użytkowników (bieżący użytkownik oflagował za pomocą flagi follow [użytkownik])”
Umair
2

Sytuacja z filtrami kontekstowymi i grupami filtrów jest naprawdę ponura. Oto wątek „Do” na temat tego topiku, który ma takie samo rozwiązanie, jak podane przez @CoreDumpError.

https://drupal.org/node/1451218

Tutaj jest także moduł, który może pomóc w rozwiązaniu sprzecznych filtrów kontekstowych i narażonych ... Widoki Filtr Harmonizator

doublejosh
źródło