it-swarm-eu.dev

Jak mohu vytvořit pohled na podřízené uzly na základě vztahu nabídky?

Řekněme, že ve stromu nabídky máte následující stránky:

  • Projekty
    • Projekt jedna
    • Projekt dva
    • Projekt tři

Hledám způsob, jak vytvořit pohled, který bude vložen do projektové (nadřazené) stránky, která zobrazí obrázek, nadpis a text (shrnutí) z podřízených stránek.

Vztah mezi rodičem a dětmi je definován ve stromu nabídek.

Vím, že mohu použít odkaz na uzel, ale to by znamenalo pokaždé, když někdo vytvoří stránku, která by musela definovat vztah nabídky a poté vztah odkazu na uzel.

Také vím, že bych mohl vytvořit jiný typ obsahu, ale myslím, že je to nadměrné, protože všechny obsahové stránky vypadají stejně.

17
Camsoft

Jedním z řešení je použití termínů taxonomie k definování vztahů a pak použití modul Menu taxonomie k převodu těchto termínových vztahů do položek nabídky. Pokud nechcete používat panely, můžete pak použít modul Vlastní stránka a Kontextové moduly k řízení informací a oblastí na všech stránkách.

4
Adam S

Můžete to udělat přesně pomocí modulů Menu Node API a Menu Node Zobrazení .

Vytvořte pohled s požadovaným typem obsahu a vyberte kontextový filtr „Nabídka: ID odkazu na nabídku“ (je k dispozici pouze s nainstalovanými výše uvedenými moduly).

V části „Pokud hodnota filtru není k dispozici“ vyberte „Poskytnout výchozí hodnotu“ a vyberte „PHP kód“.

Následující úryvek to udělá, pak jen odhalíte blok z pohledu a jste tam:

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

Modul hierarchie uzlů umožňuje tento typ vztahu a poskytuje integraci pohledů.

Hierarchie uzlů umožňuje uzlům být dětmi jiných uzlů vytvářejících stromovou hierarchii obsahu. Modul nabízí:

  • Vytvoření hierarchických nabídek jedním kliknutím
  • Hierarchické strouhanky
  • Automatické hierarchické adresy URL pomocí Pathauto (a tokenového modulu)

    (např .: q = aboutus/historie/začátek).

  • Automatické vytváření hierarchických nabídek, je-li to žádoucí.
  • Volitelná integrace pohledů.
  • Volitelné Node Integrace přístupu).
4
CCMonkey

Možná se to změnilo pro D7/Views 3, ale k dosažení požadovaného chování nepotřebujete žádné PHP):

  1. install menu_views , menu_node a menu_node_views moduly.
  2. vytvořit nový pohled typu "strom menu"
  3. přidat pole „Nabídka: název odkazu“ a „Nabídka: popis“
  4. Přidat kontextový filtr/argument „Menu: Node ID“; zadejte výchozí hodnotu „Content ID from URL“
  5. Přidat relaci „Menu: ID odkazu na nadřazené menu“

voila. Je to nemělo by to fungovat , ale funguje to.

Funguje to dobře jen u uzlů, ale výhodou použití odkazů na odkazy v hierarchii uzlů je to, že nejste omezeni pouze na vytváření navigace kolem uzlů. Mohli byste do svého pohledu zahrnout i externí odkazy.

2
aaronbauman

Existuje relativně nový modul Nabídka zobrazení Node Dětský filtr , který vypadá, že dělá přesně to, co chcete:

Tento modul přidá kontextový filtr do pohledů, který načte podřízené uzly uzlu podle struktury nabídky.

2
nwellnhof

Pokud používáte překlad entit a uzel je připojen k různým nabídkám, je zde adaptace kódu, který filtruje aktuální jazyk. Musíte to zkopírovat jako PHP kód pro kontextový filtr (id odkazu na nadřazené menu) podle vašeho pohledu, jak je vysvětleno v ostatních odpovědích.

 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

Odpověď z Emile je správná, ale musel jsem vložit zmíněný PHP kód do kontextového filtru typu " Nabídka: ID odkazu na nadřazené menu ".

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

Zvážili jste pro tento účel použití Reference uzl ?

  1. Zadejte typ odkazu na uzel pro typ obsahu, který chcete zobrazit.
  2. Toto pole použijte jako kontextový filtr v zobrazení (výchozí hodnota: ID obsahu z adresy URL ).
  3. Přidat toto zobrazení pohledu jako blok obsahu. Uzel, ve kterém je zobrazen, bude viděn jako nadřazený uzel, který na něj například odkazuje.

Můžete tak dosáhnout podobného výsledku, jaký pravděpodobně hledáte.

0
cptstarling

Z fronta vydání z Menu Node Shlédnutí máme toto pěkné řešení:

  • přidat kontextový filtr s „ID odkazu na nadřazené menu“,
  • vyberte 'Poskytnout výchozí hodnotu'
  • vyberte 'vlastní php kód'
  • zadejte následující kód

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