Come utilizzare il titolo del nodo o l'alias del percorso anziché l'id del nodo nel filtro contestuale di riferimento del nodo nelle viste?


8

Ho il nodo A con un riferimento al nodo B.

In una vista mostro tutti i nodi A a cui fa riferimento un particolare nodo B (nid: 123, titolo: nodo-B-titolo).

Invece di usare il nid nel filtro contestuale, vorrei usare il titolo del nodo. Ad esempio, anziché:

view-name/123

Mi piacerebbe usare

view-name/node-B-title

Come potrei farlo?

Risposte:


11

Ho avuto un problema molto simile e non solo ho trovato la soluzione, ma ho anche imparato nuove cose su come funziona la vista. Vorrei condividere ciò che ho imparato e anche la soluzione al tuo problema.

Quando si crea una vista con uno o più filtri contestuali, la vista deve ricevere valori di tali filtri da qualche parte. Questo può essere fatto da -

  1. Selezione dei valori del filtro di contesto dall'URL
    • In genere si avrebbe una visualizzazione di pagina per tali scopi con URL del modulo foo/%/baro foo/bar/%per singolo filtro contestuale O del modulo foo/%/bar/%o foo/bar/%/%per più filtri
    • Nel caso in cui tu abbia più filtri, il valore dell'URL che appare per primo viene mappato sul primo filtro, accanto al secondo filtro e così via.
  2. Viste consente di indicare cosa fare se i valori del filtro non sono disponibili nell'URL . Questo è in genere utilizzato per le visualizzazioni a blocchi .
    • Puoi scegliere tra diverse azioni e quindi configurare anche la scelta. Puoi scegliere tra diverse azioni e quindi configurare anche la scelta. asdfj kajsdf
  3. Un'altra cosa che ti consente di vedere è di dire cosa fare con i valori del filtro se si trovano nell'URL come descritto al punto 1 sopra. I casi d'uso tipici sono: Creazione di titoli dinamici in base ai valori del filtro, Convalida dei valori del filtro ecc.
    • Quando si convalida i valori del filtro, è possibile modificare anche i valori! (Ecco dove si trova la nostra soluzione tra l'altro). Questo è molto simile al modo in cui possiamo modificare i valori $ form nei callback di convalida del modulo drupal. inserisci qui la descrizione dell'immagine

La soluzione al tuo problema specifico consiste nell'utilizzare un codice molto simile nelle sezioni indicate dalle frecce nell'immagine sopra.

Questo link si è rivelato di grande aiuto per me. Ecco un estratto da esso:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

Questo non ha funzionato per me, ma piuttosto ha causato un errore Ajax nella vista al momento del salvataggio.
DrCord,

1

Ciò non funzionerà in tutte le circostanze, ma un approccio al problema nella domanda consiste nell'utilizzare la visualizzazione effettiva del nodo del nodo B (o del tipo di nodo B) e impostare il suo percorso come desiderato con il percorso o il modulo pathauto. Quindi utilizzare il blocco visualizzazioni per aggiungere la relazione di contenuto e la visualizzazione desiderata.

Utilizzare un filtro contestuale su NID e quindi impostare Provide default value > Content ID from URL. Quindi aggiungi il blocco visualizzazioni alla tua pagina o al tuo set di pagine.

Se il tuo contesto ti consente di utilizzare un blocco di viste sul nodo stesso e non una pagina di viste, ciò renderà molto più semplice ottenere il percorso desiderato e le visualizzazioni visualizzate.


1

Ho modificato la risposta accettata, ma volevo aggiungere qui il codice effettivo:

Usa l'opzione validata PHP sotto le opzioni di validazione nel filtro contestuale.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}

1

L'argomento view deve essere il riferimento campo del tipo di contenuto, quindi selezionare l'opzione "Fornisci argomento predefinito" e selezionare l'opzione Id Node (qualcosa del genere).

1) Aggiungi argomento "Riferimento campo X" 2) Controlla nodo ID dall'URL (nell'aggiunta argomento argomento) 3) Nella sezione di convalida, controlla il tipo di contenuto del nodo, e sul setion "Tipo di nodo" seleziona "ID nodo

Ed è fatto. :)


"ID contenuto da URL" fornisce solo il nid. Se dovessi usare un termine di riferimento, avrei un "criterio di convalida" con "nome termine convertito in ID termine". Per il riferimento al nodo non esiste un'opzione simile per tradurre il titolo in nid. Probabilmente perché i titoli non sono necessariamente unici.
Uwe

Sì è corretto, ma è necessario che l'argomento debba essere il riferimento di campo (nid), provalo.
Eleo,

1) Aggiungi argomento "Riferimento campo X" 2) Controlla nodo ID dall'URL (nell'argomento Aggiungi argomento predefinito) 3) Nella sezione di convalida, controlla il tipo di contenuto del nodo, e sul setion "Tipo di nodo" seleziona "ID nodo"
Eleo

L'URL effettivo può avere il nid e l'alias del percorso potrebbe essere il titolo del nodo. Questo funziona, vero?
SGhosh,

0

Vecchia domanda, ma l'ho trovata tramite Google e ho pensato che avrei condiviso la mia soluzione per chiunque lo trovasse in futuro:

Ora esiste un modulo chiamato safeword che sostanzialmente fa esattamente ciò che Sumeet Pareek ha suggerito: (Automaticamente) crea un campo amico degli URL.


0

Consiglierei il modulo Extended Path Aliases (path_alias_xt) . Risolve questo problema puramente essendo installato senza configurazione, a quanto pare è fondamentalmente magico. : D Non proprio, ma l'estratto della pagina del modulo esalta il modo in cui lo installi e risolve questo e altri problemi, ma non entra nel modo in cui il modulo lo fa dietro le quinte ... Oh, beh, potremmo sempre leggi il codice: D Non menziona specificamente la correzione dei percorsi delle viste, ma l'ho usato per farlo e funziona perfettamente.

Elenco dei problemi che risolve, dalla pagina del modulo:

  • Ti sei mai chiesto perché, dopo aver definito un alias come about-us per, per esempio, node / 123, le tue pagine sono ancora piene di quelle brutte schede e collegamenti generati dalla macchina come / node / 123 / edit, node / 123 / revisioni ecc. .?
  • Allo stesso modo per / tassonomia / termine /% e / utente /% collegamenti: ti aspettavi di vedere / asciuga / traccia ma hai / utente / 5 / traccia?
  • Ritieni che anche la barra degli indirizzi del tuo browser mostri quei brutti numeri anziché i tuoi alias?
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.