Come utilizzare un filtro contestuale di viste OPPURE?


18

Dopo aver esplorato la rete e SE per un po 'mi sembra che non ci sia una buona soluzione per combinare 2 contextual filterscon OR (piuttosto che con AND predefinito).

Questo post menziona un hack PHP e questo post contiene alcuni collegamenti a un problema che indica una recente modifica delle viste 7.x-3.1 . Indica anche l'uso hook_views_query_alter(&$view, &$query)per modificare la vista.

Qualcuno ha un esempio funzionante o una soluzione migliore?


Non credo che al momento esista una soluzione migliore. Come detto nei thread che hai indicato, a quanto pare è un problema in corso. Questa settimana mi sono imbattuto nello stesso problema e ho dovuto trovare una soluzione alternativa con gli allegati. Ma poi, non fornisce un elenco misto ma due collegati, che non soddisfano tutte le esigenze.
Countzero,

Risposte:



7

Il thread di commenti che inizia qui descrive una soluzione efficace. MotoTribe si collegava allo stesso thread, ma al momento della sua domanda non c'erano esempi funzionanti su quella pagina. Ora c'è, come segue:

Nel tuo modulo, implementa hook_views_api():

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

Quindi aggiungi un nuovo file al tuo modulo chiamato MODULENAME.views.inc e implementa hook_views_query_alter():

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

Inoltre, fai attenzione a questo avvertimento:

Apparentemente, il filtro "Contenuto: pubblicato (Sì)" fornito con ogni vista è considerato parte dello stesso gruppo di filtri dei filtri contestuali (gruppo 0). Quindi, al fine di rendere la mia visualizzazione visualizzare solo i nodi pubblicati che appartengono a uno dei gruppi specificati dai filtri contestuali (pubblicato AND (arg1 OR arg2 OR ...)), ho dovuto spostare il "Contenuto: Pubblicato (Sì)" in un nuovo gruppo di filtri (utilizzando la finestra di dialogo "And / Or, Rearrange"). Si noti che l'interfaccia utente non ha visualizzato il filtro "Contenuto: pubblicato (Sì)" in modo diverso dopo che l'ho spostato in un nuovo gruppo (non c'erano altri gruppi), ma nell'oggetto query che viene passato in hook_views_query_alter()esso si è spostato dal gruppo 0 al gruppo 1, facendo sì che il codice nelle funzioni sopra non influisca più su di esso.


1
È meglio parafrasare almeno la pertinenza dei riferimenti alla domanda del PO. Le risposte ai soli link sono sconsigliate perché i link potrebbero non persistere.
Triskelion

@Triskelion: Ah, hai assolutamente ragione. Ho modificato la mia risposta per risolverlo.
coredumperror,

4

Esiste un modulo che modifica i gestori di Views per creare filtri contestuali da utilizzare con OR anziché AND: Views Filtri contestuali OR


Voglio creare una vista con il contenuto di "utente corrente" + "Contenuto di utenti contrassegnati (l'utente corrente ha contrassegnato utilizzando il flag follow [utente])"
Umair

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.