it-swarm.it

Come posso creare una vista di nodi figlio in base alla relazione di menu?

Supponi di avere le seguenti pagine in una struttura di menu:

  • Progetti
    • Project One
    • Progetto due
    • Progetto tre

Sto cercando un modo per creare una vista che verrà incorporata nella pagina Progetto (padre) che mostrerà una foto, titolo e testo (riepilogo) dalle pagine figlio.

La relazione tra padre e figlio è definita nella struttura del menu.

So di poter usare il riferimento al nodo, ma ciò significherebbe che ogni volta che qualcuno crea una pagina dovrebbe definire la relazione di menu e quindi la relazione di riferimento del nodo.

Inoltre so che potrei creare un altro tipo di contenuto, ma penso che questo sia eccessivo poiché tutte le pagine di contenuto sembrano uguali.

17
Camsoft

Una soluzione consiste nell'utilizzare i termini tassonomici per definire le relazioni e quindi utilizzare modulo Menu tassonomia per tradurre tali relazioni termini in voci di menu. È quindi possibile utilizzare modulo Pagina personalizzata e i moduli contestuali per controllare informazioni e regioni su tutte le pagine se non si desidera utilizzare i pannelli.

4
Adam S

Puoi fare esattamente questo usando i moduli Menu Node API e Menu Node .

Crea una vista con il tipo di contenuto richiesto e scegli un filtro contestuale di "Menu: ID collegamento menu" (disponibile solo con i moduli sopra installati).

In "Quando il valore del filtro non è disponibile", seleziona "Fornisci valore predefinito" e scegli "Codice PHP".

Lo farà il seguente frammento, quindi esponi un blocco dalla vista e sei lì:

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}
16
Emile Kott

Node Hierarchy Module consente questo tipo di relazione, oltre a fornire un'integrazione delle viste.

La gerarchia dei nodi consente ai nodi di essere figli di altri nodi creando una gerarchia di contenuti ad albero. Il modulo offre:

  • Creazione in 1 clic di menu gerarchici
  • Pangrattato gerarchico
  • URL gerarchici automatici usando Pathauto (e modulo token)

    (es .: q = aboutus/storia/inizio).

  • Creazione automatica di menu gerarchici, se desiderato.
  • Integrazione di Views opzionale.
  • Opzionale Node Accesso all'integrazione.
4
CCMonkey

Forse questo è cambiato per D7/Views 3, ma non è necessario alcun PHP per ottenere il comportamento desiderato:

  1. installa menu_views , menu_node e menu_node_views moduli.
  2. creare una nuova vista di tipo "albero dei menu"
  3. aggiungi campi "Menu: titolo collegamento" e "Menu: descrizione"
  4. Aggiungi filtro/argomento contestuale "Menu: Node ID"; Fornisci il valore predefinito "Content ID dall'URL"
  5. Aggiungi relazione "Menu: ID collegamento menu principale"

ecco. non dovrebbe funzionare , ma funziona.

Funziona bene solo con i nodi, ma il vantaggio di utilizzare i collegamenti di menu sulla gerarchia dei nodi è che non sei limitato alla costruzione della navigazione attorno ai nodi. Potresti anche includere collegamenti esterni nella tua vista.

2
aaronbauman

C'è un modulo relativamente nuovo Menu Viste Node Filtro bambini che sembra fare esattamente quello che vuoi:

Questo modulo aggiunge un filtro contestuale a Views che recupererà i nodi figlio di un nodo in base alla struttura di un menu.

2
nwellnhof

Se si utilizza la traduzione di entità e il nodo è collegato a menu diversi, ecco un adattamento del codice che filtra sulla lingua corrente. È necessario copiarlo come PHP per il filtro contestuale (ID collegamento menu principale) nella vista come spiegato nelle altre risposte

 if (function_exists('menu_node_get_links')) {
global $language;
$lang = $language->language;
$node = node_load(intval(arg(1)));
if (isset($node->menu_node_links)) {
  foreach ($node->menu_node_links as $mlid => $data) {  
    if ($lang == $data->language) {
      return($mlid);
    }
  }
}
  }
0
bendev

La risposta di Emile è corretta, ma ho dovuto incollare il menzionato PHP in un filtro contestuale del tipo " Menu: ID collegamento menu principale ".

if (function_exists('menu_node_get_links')){  
   $node = node_load(intval(arg(1)));  
   if (isset($node->menu_node_links)){
      foreach($node->menu_node_links as $mlid=>$data){  
         return $mlid;
      }  
   }
}
0
cptstarling

Hai preso in considerazione l'utilizzo di Node Reference a questo scopo?

  1. Fornire un campo di riferimento nodo al tipo di contenuto che si desidera visualizzare.
  2. Utilizzare quel campo come filtro contestuale nella vista (valore predefinito: Content ID dall'URL ).
  3. Aggiungi questa visualizzazione come blocco al contenuto. Il nodo in cui viene visualizzato verrà visualizzato come genitore dei nodi che fanno riferimento ad esso, ad esempio.

In questo modo puoi ottenere un risultato simile come probabilmente stai cercando.

0
cptstarling

Dal coda di emissione di Menu Node Views abbiamo questa bella soluzione:

  • aggiungere un filtro contestuale con "ID collegamento menu principale",
  • seleziona "Fornisci valore predefinito"
  • seleziona 'codice php personalizzato'
  • inserisci il seguente codice

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
    
0
tostinni