2009-08-21 9 views
8

birden Görüntüleme Render. Zend Framework: Ben Zend_Layout kullanarak dinamik siteyi oluşturmak istediğiniz bir Düzeni

My düzen (/application/layouts/scripts/layout.phtml)

aşağıdaki satırları içerir:

...   
<body> 

     <?php echo $this->render('header.phtml') ?> 

     <div id="content"><?php echo $this->layout()->content ?></div> 

     <?php echo $this->render('footer.phtml') ?> 

    </body> 
... 

benim indeks kontrolör endeksi eylem göz atarsanız - Zend endeksi görünümünü vermektedir (application/views/$ this-> layout() -> içeriğinin içinde otomatik olarak scripts/index/index.phtml) bulunur.

Şimdi ben düzeninde farklı kontrolör eylemlere görüşlerini işlemek istiyorum. Yani ben bir giriş formunu gösteren bir eylem girişle yeni kontrolör auth üretir.

Ben benim düzenini değiştirmek i indeks/endeksine göz attıklarında

...   
    <body> 

      <?php echo $this->render('header.phtml') ?> 

      <div id="content"><?php echo $this->layout()->content ?></div> 
      <div id="login"><?php echo $this->layout()->login ?></div> 

      <?php echo $this->render('footer.phtml') ?> 

     </body> 
    ... 

i auth/giriş $ this- iç görünümü> düzen() oluşturması gerektiğini Zend bu eylem tanımlamak istediğiniz -> giriş ve örneğin $ this-> layout() -> içeriğinin içindeki haber/liste.

endeksi/index sayfa düzeni bir tür daha - ve auth/giriş ve haber/bunu nasıl Widget

bir tür listelemek?

+0

Aslında başka bir soru, görüntüleme yardımcılarını veya komut dosyalarını görüntülemek için ne kullanmayı tercih edersiniz? – basstradamus

cevap

8

İlk tavsiyem hiç İşlem görünümü yardımcı kaçınmaktır (http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.partial bakınız)

$this->partial() 

ile deneyin maliyetler, muhtemelen ZF 2.0 da muhtemelen kaldırılacak. (ZF-5840) (Why the actionstack is evil)

Bu, question I asked ile ilgilidir - ve bittarman'ın yanıtı oldukça kullanışlıdır. Bunun gibi bir şeyi uygulamaya koymanın en iyi yolu, "giriş" alanınızı oluşturabilen bir görünüm yardımcısına sahip olmaktır. Örneğin, My_View_Helper_Login. Ardından düzen $this->login() arayabilir ve böylece user/login için kod görüntüleme can. Bildiğim kadarıyla index/index sadece denetleyici diğer denetleyici/eylem talebini iletmek news/list içeriği işlemek sahip olarak. $this->_forward('list', 'news');

+0

Teşekkürler, performans konusunu henüz düşünmedim. – opHASnoNAME

1

Sen

$this->action() 

performant o kadar hız kullanabilir veya

+3

'$ this-> action() 'a karşı tavsiye ederim, bu çok verimsiz. – gnarf

3

Ben de action view helper kullanılmamasını tavsiye ediyorum. Denetleyicinizde bir grup mantık yoksa, yalnızca kısmi bir görünüm oluşturmak için başka bir denetçiye başka bir istek göndermeniz gerekmez.

Sadece size header.phtml ve footer.phtml ile yapmış gibi kısmi bir görünümünü kullanarak basitçe öneriyoruz:

<body> 

     <?php echo $this->render('header.phtml') ?> 

     <div id="content"><?php echo $this->layout()->content ?></div> 

     <div id="login"><?php echo $this->render('auth/login.phtml') ?></div> 

     <?php echo $this->render('footer.phtml') ?> 

</body> 

Ve belki auth/login.phtml kod görüntüleme şuna benzer: Sürece

<div id="login_box"> 
    <?php if (empty($this->user)): ?> 
     Please log in 
    <?php else: ?> 
     Hello <?php echo $this->user->name ?> 
    <?php endif; ?> 
</div> 

Görünüm değişkenlerinizi kontrol cihazınızın bir noktasında ayarlarsınız, render view helper numarasını bir görünüm içinde (veya isterseniz bir kontrol cihazı) çağırabilirsiniz.

#index controller 
public function indexAction() 
{ 
    $this->view->user = Model_User::getUserFromSession(); 
} 
+0

Endeks/endekste (indeks denetleyici, indeks eylemi) olmadığında, görünüm-> kullanıcı tanımlanmayacaksa, görünümden sonra mantığın kullanıcı-eylemden ayrı olarak nasıl yapılacağı? Benim araştırmamda bulduğum kadarıyla cevabın bir bakış yardımcısı olduğunu düşünüyorum, doğru mu ..? – Tangocoder

0

Kendi sorunuma bir yanıt ararken bu sayfaya gittim, ki bu benim düzenimin birden çok kez çağrılmasına neden oldu. Bunun nedeni birden nedenlerden meydana:/Ben bir eylem olarak adlandırılır) exampleAction()

2 yardımcı yerine modülün/arasında/help vardı, kötü bir ajax çağrı yaptı

1), bir

koymak zorunda
$this->_helper->layout->disableLayout(); 

Düzenin yeniden oluşturulmasını önlemek için.

3) Yönlendirme yaptım, ileri veya rota kullanmayı deneyin.