Come funzionano i filtri contestuali di Views?


9

Sto cercando di avvolgere di nuovo i miei filtri contestuali! L'ho usato un po 'di tempo fa, ma sono rimasto di nuovo perplesso. Ecco cosa sto cercando di fare:

  1. Genera una pagina del nodo del contenuto clonato con termini di tassonomia inseriti in questa pagina clonata.

es .: EXAMPLE.com/white-shoes/blue

Quando un utente raggiunge la pagina / white-shoes mostrerà la pagina del nodo originale orientata verso il colore bianco. Ora se l'utente atterra su / white-shoes / blue mostrerà la stessa pagina del nodo, ma questa volta tutto il contenuto del corpo verrà riscritto sostituendo il colore bianco con il colore blu.

In Views dovrei creare una visualizzazione di pagina con il percorso di:% /%

Ora vorrei creare un filtro contestuale per recuperare il nid. Aggiungo Content: nid come filtro contestuale. Scelgo PROVIDE A DEFAULT VALUE e inserisco questo codice PHP:

$ x = drupal_lookup_path ('source', arg (0));

$ y = esplodi ('/', $ x);

ritorna $ y 1 ;

Quel codice PHP fondamentalmente converte la parte / white-shoes dell'URL in un NID. Ma non funziona. Ho testato il codice tramite drush ev tramite il terminale e ho effettivamente ottenuto un risultato restituito, quindi so che funziona.

Faccio lo stesso per il nome del termine tassonomia e aggiungo anche un filtro contestuale. Questa volta scelgo PROVARE UN VALORE PREDEFINITO e selezionare RAW VALUE DA URL e selezionare il secondo argomento.

inserisci qui la descrizione dell'immagine

Come puoi vedere quando inserisco un PREVIEW VALUE per il filtro contestuale: AAA / BBB / CCC. Il mio valore predefinito viene ignorato. Dovrebbe afferrare il secondo argomento, ma sta ottenendo solo il 1 °. Guarda l'istruzione SQL DOVE e vedrai che sta ricevendo AAA quando dovrebbe essere BBB.

inserisci qui la descrizione dell'immagine

Quindi la domanda è: cosa sto facendo di sbagliato o esiste una soluzione migliore a ciò che voglio realizzare?


Sembra stupido, ma potresti fornire qualche dettaglio in più? Sto avendo un po 'di tempo a capire cosa stai provando, più su come stai cercando di farlo. Invece di utilizzare il valore Raw o Fornire predefinito, utilizzare l'ID contenuto dall'URL. Ciò fornirà il NID.
Kyletaylored il

ciao kyle, non ci sono Content ID dal tuo atterraggio sull'URL: / white-shoes / blue .... l'URL / blue non esiste come viene visualizzato dalle visualizzazioni. quindi non c'è nessun ID contenuto da afferrare ... deve analizzare il primo argomento dell'URL e poi convertire quell'URL in un percorso NID.
Patoshi パ ト シ il

Risposte:



5

Il filtro contestuale viene utilizzato per filtrare, l'output della vista tramite argomenti URL, inoltre è possibile passare manualmente gli argomenti in questo formato:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

dove "$ name" è il nome della tua vista (es. 'esempio_vista') e '$ display_id' è il tipo di visualizzazione della tua vista (es. 'default') e "$ arg1, $ arg2, $ arg3" sono argomenti proprio come nell'URL.

Gli argomenti URL hanno la seguente struttura:

http://example.com/arg_1/arg_2/arg_3 (arg_2 ha il componente path 2 (nella pagina delle impostazioni della vista)).

Quando il valore del filtro non è disponibile:

significa che drupal non riesce a trovare alcun filtro.

Fornisci valore predefinito:

quando il valore del filtro non è disponibile, è possibile utilizzare questa opzione per creare un filtro per l'output delle viste, questo filtro può essere un codice PHP (se il modulo filtro PHP è abilitato) o può ottenere il suo valore dagli argomenti URL -> (Valore grezzo dall'URL). La casella di testo Eccezione consente di imbrogliare il valore e visualizzare tutti i risultati.

Quando il valore del filtro è disponibile

in questo caso fai una validazione secondo le tue necessità e alcune altre opzioni, quando drupal può trovare il valore del filtro.


data la funzione views_embed_view (). come potrei caricarlo nel mio percorso secondario di / white-shoes / blue? tieni presente che / blue non esiste come generato dalle viste. quando un utente raggiunge il percorso / blue, dovrebbe analizzare il primo argomento e recuperare il NID di tale alias, quindi caricare il suo contenuto. il problema con i filtri contestuali è che non c'è modo di fornire un valore PHP per QUANDO IL VALORE DEL FILTRO È DISPONIBILE.
Patoshi パ ト シ il

@duckx, Esiste un'eccellente opzione per fornire un valore PHP quando il filtro è disponibile - VALIDATION (type: PHP Code). Con questa opzione puoi usare l'oggetto vista e fare tutto il necessario. Nel tuo caso, il /bluepercorso generato dalle viste verrebbe utilizzato anche per recuperare l'ID nodo di tale alias.
Jack-PL,
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.