2009-11-16 16 views
8

Navigasyon yardımcımı Acl kullanarak oluşturmak için navigasyon yardımcısını kullanmak istiyorum. Acl bölümü iyi çalışıyor.Zend Framework - çoklu gezinti blokları

Şimdi birkaç farklı gezinme türünü görüntüleyebilmek istiyorum. Örneğin. admin-nav, yan-nav, yeni-nav, vb. Bu konuda dokümanlardaki hiçbir şeyi bulamıyorum. Yalnızca navigasyonu nasıl ayarlayacağınız ve o zaman bir gezinme nesnesini bir düzen veya görünüm içinde tekrar tekrar nasıl kullanacağınız.

Buna benzer bir şey denedim - iki farklı kapsayıcıya sahip olmak, farklı sayfa dizileriyle birlikte bu kapsayıcıları kayıt defterine yerleştirmek. Sonra görünümü ve/veya düzen navigasyon arayarak ve ona bir kap geçen içinden: my haber görünümünde denir yukarıda

<?php echo $this->navigation(Zend_Registry::get("news-nav")) ?> 

aşağıdaki

<?php echo $this->navigation(Zend_Registry::get("admin-nav")) ?> 

Bu iyi çalışır benim düzeninde denir haberler sayfasından ayrı olarak tüm sayfalarım için. Haber sayfamda haberler için nav, bir kez düzende ve bir kez haber görünümünde iki kez görüntülenir. Admin nav hiçbir zaman görüntülenmez ve news nav tarafından üzerine yazılır.

Eğer tamamen yanlış yoldan gidebilirim, eğer öyleyse lütfen bana daha iyi bir yol bildirin. Bu yöntem iyi görünüyorsa, birileri haber nav'sinin düzende ve haber görünümünde neden görüntülenmekte olduğunu belirlememe yardımcı olabilir. Zaman ayırdığınız için

Teşekkür

Jake

cevap

10

Bu tam aynı sorunu vardı. İhtiyacım olan menülerin her biri için denetleyicilerimde birden çok Zend_Navigation_Container örneğini oluşturuyorum, bunları görüntüye aktarıyorum ve ardından nesneleri doğrudan menü oluşturma yöntemine geçirerek oluşturuyorum. aşağıdaki gibi:

$this->view->menu1 = new Zend_Navigation_Container(); 
$this->view->menu2 = new Zend_Navigation_Container(); 

görünümünde:: denetleyici olarak

$this->navigation()->menu()->renderMenu($this->menu1); 
$this->navigation()->menu()->renderMenu($this->menu2); 

Hatta özelleştirmek olabilir bir (yöntemini ekleyerek her çağırır başlangıç ​​menüsü() çağrısından sonra:

$this->navigation()->menu()->setUlClass('my_first_menu')->renderMenu($this->menu1); 
$this->navigation()->menu()->setUlClass('my_second_menu')->renderMenu($this->menu2); 
1

veya daha kısa bilgi yapabilirsiniz Sözdizimi

$this->menu($this->menu1); 
1

Birden çok gezinmeye gereksinim duyan bu soruna yeni girdim ve işlemde sorununuzu keşfettim ve bu aslında Zend_View_Helper_Navigation_HelperAbstract'daki bir hatadır.

Hat 516:

public function __toString() 
{ 
    try { 
     return $this->render(); 
    } catch (Exception $e) { 
     $msg = get_class($e) . ': ' . $e->getMessage(); 
     trigger_error($msg, E_USER_ERROR); 
     return ''; 
    } 
} 

burada sorun olduğunu açıkça $this->navigation->render($container) demiyorlar veya $this->navigation()->menu($container) gibi sihirli bir yöntem daha sonra render çağrısı kendisine geçirilen bir kabı almıyorum biter eğer. sırayla

Bu

hayır menu olduğunu navigation için varsayılan görünüm yardımcısı, (bu durumda son verilen konteyner kullanacağız) registry çekilir veya kullanılabilmesine neden yerinde (üzerinde örneği neden olur konteyner).

Bu, __toString numaralı telefondan getContainer numaralı telefonu arayabilen basit düzeltmedir.

Hat 516:

public function __toString() 
{ 
    try { 
     return $this->render($this->getContainer()); 
    } catch (Exception $e) { 
     $msg = get_class($e) . ': ' . $e->getMessage(); 
     trigger_error($msg, E_USER_ERROR); 
     return ''; 
    } 
} 

o niyeti getContainer aramaya olduğu açıktır Navigation ilişkin yardımcı dosyaların tümü içinden bakıyorum. menu görüntü yardımcısını doğrudan veya navigation sihirli yöntemiyle çağırırsanız, bunun bir sorun olmadığı da açıktır.

Yukarıdaki satırı değiştirdiğinizde, numaralı telefonu arayabilmeniz ve doğrudan menu yardımcısını aramak zorunda kalmadan birden fazla gezinme yapabilmeniz gerekir.