Zend_Layout ekran Giriş veya Navigasyon

2 Cevap php

iam iam değil emin eğer bunu doğru şekilde yapıyor. Amacım Düzeni başlık bölümündeki bir Giriş veya Navigasyon göstermektir.

Benim uygulama (mantık olmadan) bu gibi görünüyor:

2 Düzen komut:

  • login.phtml
  • navigation.phtml

Bir FrontController Plugin:

class Plugin_Header extends Zend_Controller_Plugin_Abstract {

        /**
         * PreDispatch
         *
         * Decides wich kind of navigation is displayed in header section
         * for logged in users the menu, for guests the login box ve
         * link to registration form.
         *
         * @return void
         */
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            $layout = Zend_Layout::getMvcInstance();
            $layout->topNavigation = $layout->render('login'); // or navigation 
        } 
}

Bu iyi çalışır, ancak bu en iyi yolu nedir? ;)

2 Cevap

Ben görünümü yardımcı veya kısmi olarak işlevselliği koyarak öneririm. Sen düzenini viraj olması gerekiyordu değildi yol bükme, sanırım :)

Ben bunu istiyorum:

  • navigasyon ve - iki partials var giriş
  • boolean $ isLoggedIn - bir görünüm yardımcı My_View_Helper_RenderHeader (), bir parametre retieving yapmak
  • boolean değerine göre $ isLoggedIn = true için navigasyon kılmak ve aksi takdirde kısmi giriş.
  • Ayrıca kurulum çeşit ekleyebilirsiniz bu bileşen daha reuseable yapmak için (en partials veya farklı bir yol, farklı isimler diyelim)

Kurulumu o eski için nedense - diğer olumlu şey "toString" metodunu uygulamak eğer yardımcısı içindeki boolean saklayabilirsiniz olmasıdır. index.phtml görünümünde ve sonra kullanarak düzen içinde uygun bir yere işlemek echo $this->renderHeader(). Başar, değil mi? Eğer emin değilseniz, baş * (script, link, ...) yardımcıları kod check out.

Ben farklı düzenleri kullanabilirsiniz:

anonymous.phtml
authenticated.phtml

Ve bir ön denetleyicisi plugin'in preDispatch () yöntemi bu var:

$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
    $layout = 'authenticated';
} else {
    $layout = 'anonymous';
}


// Bootstrap layouts
Zend_Layout::startMvc(array(
'layoutPath' => APPLICATION_PATH . '/layouts/scripts',
'layout' => $layout
));

Ayrıca ben yararlı burada da Ajax istekleri ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') kontrol etmek için bulmak, ve üçüncü bir "ajax" (boş) düzeni var.