Menü ilişkisine dayalı olarak alt düğümlerin görünümünü nasıl oluşturabilirim?


17

Bir menü ağacında aşağıdaki sayfaların olduğunu varsayalım:

  • Projeler
    • Birinci Proje
    • Proje 2
    • Üçüncü Proje

Alt sayfalardan bir resim, başlık ve metin (özet) gösterecektir Proje (üst) sayfasına gömülü bir görünüm oluşturmak için bir yol arıyorum.

Ebeveyn ve çocuk arasındaki ilişki menü ağacında tanımlanır.

Düğüm başvurusunu kullanabileceğimi biliyorum, ancak bu her biri bir sayfa oluşturduğunda, menü ilişkisini ve sonra düğüm referans ilişkisini tanımlamak zorunda kalacağı anlamına gelir.

Ayrıca başka bir içerik türü oluşturabileceğimi biliyorum, ancak tüm içerik sayfaları aynı göründüğü için bunun aşırıya kaçtığını düşünüyorum.


1
Başka bir düğümün alt menüsünde görüntülenen düğümler arasında doğrudan bir ilişki yoktur (Bir menü bağlantısı ve bir düğüm arasındaki tek bağlantı, bir menü bağlantısının düğümü / nid'i göstermesidir). Yani bu alt düğümleri birbirine bağlamak için bir şeye ihtiyacınız var (ve ana düğüme), ortak bir sınıflandırma terimi olabilir, book.module, ...
Berdir

Yanıtlar:


4

Bir çözüm, ilişkileri tanımlamak için sınıflandırma terimlerini kullanmak ve daha sonra bu terim ilişkilerini menü öğelerine çevirmek için Sınıflandırma Menüsü modülünü kullanmaktır . Panelleri kullanmak istemiyorsanız, tüm sayfalardaki bilgileri ve bölgeleri kontrol etmek için Özel Sayfa modülünü ve Bağlam modüllerini kullanabilirsiniz.


16

Bunu Menü Düğümü API'sını ve Menü Düğümü Görünümleri modüllerini kullanarak tam olarak yapabilirsiniz .

Gerekli içerik türünüzü içeren bir görünüm oluşturun ve "Menü: Menü bağlantı kimliği" nin bağlamsal bir filtresini seçin (bu yalnızca yukarıdaki modüller kurulu olduğunda kullanılabilir).

"Filtre değeri kullanılamadığında", "Varsayılan değer sağla" yı ve "PHP kodu" nu seçin.

Aşağıdaki snippet bunu yapacak, o zaman görünümden bir bloğu açığa çıkarıyorsunuz ve oradasınız:

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;
      }  
   }
}

3
Geçerli düğümün alt öğelerini almak için filtrenin "Menü: Üst menü bağlantı kimliği" olması gerektiğini düşünüyorum. Ve argüman kodu şu olabilir: $ current = end (menu_get_active_trail ()); dönüş $ akımı ['mlid'];
Stefan

Bunun için teşekkürler. Birkaç iyileştirme (@ Stefan'ın düzeltmesine ek olarak). 1) Biraz gider kaydetmek menu_load_object(arg(1))yerine kullanabilirsiniz node_load(). 2) Menü öğesinin, ilgilendiğiniz menüden olup olmadığını kontrol etmelisiniz. Şimdi, sadece ilkini geri veriyorsunuz $mlid. Foreach'un içine bunu if ($data->menu_name == 'my-menu')düzeltmek için bir koşul eklemelisiniz . ve 3) menu: hiddenYalnızca gizli olmayan öğeleri döndürmek için ikinci bir filtre eklemek isteyebilirsiniz . Aynı snippet'i kullanın, ancak $data->hidden;yerine $mlid.
Adam Balsam

2
Hala geliştirme aşamasında olan modülleri önermekten kesinlikle vazgeçerim.
Ambidex

@Stefan herhangi bir seviyede tüm çocukları almak için orada mı? sadece ilk yerine.
Eli Stone

4

Düğüm Hiyerarşi Modülü bu ilişkinin türünü yanı sıra bir görünümleri entegrasyonunu sağlayarak sağlar.

Düğüm Hiyerarşisi, düğümlerin ağaç benzeri bir içerik hiyerarşisi oluşturan diğer düğümlerin alt öğeleri olmasına izin verir. Modül şunları sunar:

  • Tek Tıklamayla hiyerarşik menüler oluşturma
  • Hiyerarşik ekmek kırıntıları
  • Pathauto (ve token modülü) kullanarak otomatik hiyerarşik URL'ler

    (örneğin: q = aboutus / geçmiş / başlangıç).

  • İstenirse hiyerarşik menülerin otomatik oluşturulması.
  • İsteğe Bağlı Görünümler entegrasyonu.
  • İsteğe bağlı Düğüm Erişimi entegrasyonu.

2

Belki bu D7 / Views 3 için değişti, ancak istenen davranışı gerçekleştirmek için herhangi bir PHP'ye ihtiyacınız yok:

  1. yüklemek menu_views , menu_node ve menu_node_views modülleri.
  2. "menü ağacı" türünde yeni bir görünüm oluştur
  3. "Menü: bağlantı başlığı" ve "Menü: açıklama" alanlarını ekleyin
  4. Bağlamsal Filtre / Bağımsız Değişken Ekle "Menü: Düğüm Kimliği"; Varsayılan değeri "URL'den İçerik Kimliği" sağlayın
  5. İlişki Ekle "Menü: Üst menü bağlantı kimliği"

işte. Bu iş olmamalı , ama öyle.

Sadece düğümlerle iyi çalışır, ancak düğüm hiyerarşisinde menü bağlantılarını kullanmanın avantajı, düğümler etrafında gezinme oluşturmakla sınırlı kalmamanızdır. Dış bağlantıları bile görünümünüze dahil edebilirsiniz.


Bu, düğüm bağlantılarını ortaya çıkarmak için iyi bir seçenektir (ve Aaron Bauman'ın bu örnek görünümü içe aktarmak için yapıştırmasını seviyorum: pastebin.com/u2GjmWG7 ). Ancak, OP istediği gibi düğüm alanları görünüm için kullanılabilir yapmakta bazı sorunlar vardı. Bu nasıl başarılır?
doub1ejack

"Menü: Düğüm Kimliği" ne bir ilişki ekleyerek düğüm alanlarını gösterebilmeniz gerekir. Böyle bir şey görüyor musun?
aaronbauman


0

Bu amaçla Düğüm Referansı kullanmayı düşündünüz mü ?

  1. Görüntülemek istediğiniz içerik türüne bir düğüm referans alanı sağlayın.
  2. Bu alanı Görünüm'de bağlamsal bir filtre olarak kullanın (varsayılan değer: URL'den Content ID ).
  3. Bu görünüm görüntüsünü içeriğe bir blok olarak ekleyin. İçinde görüntülendiği düğüm, buna referansta bulunan düğümlerin bir üst öğesi olarak görülecektir.

Böylece, muhtemelen aradığınıza benzer bir sonuç elde edebilirsiniz.


0

Emile cevap doğru, ama söz konusu PHP kodu " Menü: Üst menü bağlantı kimliği " türüne dayalı bir bağlamsal filtreye yapıştırmak zorunda kaldı .

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

Varlık çevirisi kullanıyorsanız ve düğüm farklı menülere bağlıysa, burada geçerli dile filtre uygulayan kodun uyarlanması verilmiştir. Bunu, diğer yanıtlarda açıklandığı gibi, görünümünüzdeki bağlamsal filtre (üst menü bağlantı kimliği) için PHP kodu olarak kopyalamanız gerekir

 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

Gönderen yayın kuyruğunda ait Menüsü Düğüm Bakış biz bu güzel bir çözüm vardır:

  • 'Üst menü bağlantı kimliği' ile bağlamsal bir filtre ekleyin,
  • 'Varsayılan değer sağla'yı seçin
  • 'özel php kodu' nu seçin
  • aşağıdaki kodu girin

    $menu_item = menu_get_active_trail();  
    $current_item = array_pop($menu_item);  
    $menu_item_plid = $current_item['plid'];  
    return $menu_item_plid;  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.