Zend Framework - multiplate navigasyon blokları

3 Cevap php

Ben Acl kullanarak benim navigasyon menüleri oluşturmak için navigasyon yardımcısı kullanmak istiyorum. Acl bölüm I çalışma para cezası var.

Artık navigasyon birkaç farklı görüntülemek mümkün olmak istiyorum. Örneğin vb yönetici-nav, yan-nav, yeni-nav, ben dokümanlar bu konuda bir şey bulamıyorum. Sadece nasıl navigasyon ayarlamak için ve daha sonra kullanmak arda düzen veya görünüm içinde bir gezinti nesne.

Daha sonra kayıt defterinde bu kapları ayarı sayfaların farklı diziler ile iki farklı kaplar, sahip - Ben buna benzer bir şey denedim. Sonra benim görünümü ve / veya düzen içinde gezinti çağıran ve bir konteyner geçen:

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

Yukarıda benim haber görünümünde denir, şu benim düzeni denir

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

Bu ayrı haber sayfasından tüm sayfaları için çalışıyor. Benim haber sayfasında haber için nav kez düzen ve bir kez haber görünümünde, iki kez görüntülenir. Admin nav görüntülenen ve haber nav yazılmasını görünüyor asla.

Bu yüzden beni daha iyi bir yol bildirin lütfen eğer ben, tamamen bu konuda yanlış şekilde gidiyor olabilir. Bu yöntem gayet iyi görünüyor, birisi haber nav düzeni ve haber görünümünde görüntülenen neden bana çözmek yardımcı olabilir.

Zaman ayırdığınız için teşekkürler

Jake

3 Cevap

Ben bu aynı sorunu vardı. Ben sadece, ihtiyaç menüleri her biri için benim denetleyicileri Zend_Navigation_Container birden çok örneğini oluşturmak görünümüne onları geçmek ve ardından yöntemi işlemek menüye doğrudan nesneleri geçirerek onları işlemek. Aşağıdaki gibi:

Denetleyicisi:

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

Görünümünde:

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

Hatta yöntem, başlangıç ​​menüsüne () çağrısı sonrasında çağırır ekleyerek (her birini özelleştirebilirsiniz olabilir:

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

veya sözdizimi kısaltabilir

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

Ben sadece birden çok seferlerinden gerek bu sorunu içine koştu ve süreç içinde sorun keşfetti ve aslında Zend_View_Helper_Navigation_HelperAbstract bir hata.

Satır 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) veya $this->navigation()->menu($container) daha sonra çağrı render geçirilen bir kap almıyor biter gibi sihirli bir yöntem aramazsanız o.

Bu da registry (son verilen kapsayıcı kullanmak hangi durumda çekilmiş olması, menu olan navigation için varsayılan görünüm yardımcısı olur ), ya da konteyner orada neden nokta () üzerinde örneği.

Bu getContainer üzerine __toString çağıran benim basit bir düzeltmedir.

Satır 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 '';
    }
}

Ilgili yardımcı tüm dosyaları bakarak Navigation bu niyeti getContainer aramak için olduğu açıktır. Bu doğrudan veya navigation sihirli yöntemi ile menu görünümü yardımcıya ararsanız bu bir sorun olmadığı da açıktır.

Eğer yukarıdaki çizgiyi değiştirmek kez $this->navigation($container) çağrı ve doğrudan menu yardımcısı arayarak başvurmak zorunda kalmadan birden seferlerinden işlemek gerekir.