Zend organizasyon soru

5 Cevap php

Yani düzeni ile ilgili Zend çerçevesi için kod genel organizasyonu ile ilgili bir soru vardı.

Benim düzeni temelde şudur:

(LAYOUT.PHTML)

<div id='header'>
<?= $this->Layout()->header ?>
</div>

<div id='main'>
<?= $this->Layout()->main ?>
</div>

<div id='footer'>
<?= $this->Layout()->footer ?>
</div>

ve benzeri ve benzeri. Şimdi, benim main kodu ve benim bitişin kodundan ayrı benim başlığındaki kodumu tutmak için, ben header.phtml, main.phtml, footer.phtml tutan benim görünümü için bir klasör oluşturduk. Sonra $ this-> düzen içine header.phtml içeriğini atamak için bu kodu kullanabilirsiniz () -> başlığı:

(INDEX.PHTML)

$this->Layout()->header = file_get_contents('index/header.phtml');
$this->Layout()->main = file_get_contents('index/main.phtml');
$this->Layout()->footer = file_get_contents('index/footer.phtml');

Bu harika çalışıyordu, ama ben artık statik HTML olmak ana istemediğiniz bir noktaya isabet ettik. PHP ile bazı değerleri eklemek mümkün olmak istiyorum. Yani indexAction benim Controller, benim veritabanından yüklemek ve indeks / main.phtml içine değerleri koymak mümkün olmak istiyorum. Sitemde yeniden yapılanma olmadan bunu yapmanın bir yolu var mı?

Ben böylece bunu yapmak için bir yol var değilse:

  1. > Başlığı, Düzen-> footer - Böyle Düzen olarak benim düzenin farklı bölümlerinde, () içine kodu koymak yeteneği.

  2. Onlar bulmak ve organize etmek kolaydır, böylece farklı dosyalara bu parçaları ayrı, benim kütüğü / footer.phtml gibi, endeks / main.phtml vb

  3. ) Düzen (onu geçmek için bir dizeye dönüştürmek için gereksiz yere tırnak içine bu kodu koymak zorunda değil -> başlığı vs

Size yardım için çok teşekkür ederim çocuklar.

-Ethan

5 Cevap

İşte bir fikir:

  • Assign layout()->header the filename instead of the contents.
  • Put your code in this file
  • In your layout file, include() or require() the layout->header().

Senin düzen üstbilgi / altbilgi şimdi işlendiğinden beri, sadece bir bakış gibi onları kullanabilirsiniz.

Eğer kullanın

$this->layout()->header = $this->render('index/header.phtml');

Hatta bu nedenle başlığını işlerken tanımlanmış tüm değişkenleri tutmak, görünümünü kullanır.

Ben gibi bir şey kullanmanızı öneririm

<?php echo ($header = $this->layout()->header)? 
      $header : $this->render('headerDefault.phtml'); ?>

sizin düzeni dosyasında - œkod bunu geçersiz kılmaz eğer düzen klasöründen varsayılan bir başlık verecek.

Eğer view helpers bakarak denedim. Bunlar yeniden kullanılabilir ve modüler koduna yapılanma görünümü mantığının bir yoludur. Bu durumda size gerekli her segment oluşturmak için bir görünüm yardımcısı kullanmak istiyorsunuz. Yani örnek œkod gibi görünecektir

$this->Layout()->header = $this->header();
$this->Layout()->main = $this->main();
$this->Layout()->footer = $this->footer();

Görünümü üzerinde yardımcıları kullanmanın faydası dosya işleme ve ad çözümlemesi bütün çerçevesi ile ele olmasıdır dahildir ve ifadeleri gerektirir. manual yolları ve kullanım örnekleri vb kurmak için nasıl hakkında daha fazla bilgi var

yardımcıları iyi. Başka bir seçenek başlık / altbilgi dosya adlarını koyarak, yukarıdaki gibi - şablon isimleri koymak ve $this->render($this->layout()->header)), vs vs kullanımı Bu tıpkı yukarıdaki gerektirir, ama daha tutarlı / içerir.

->header in $this->layout()->header olan response segment. Bir eylem $this->_helper->viewRenderer->setResponseSegment('header'); kullanarak yanıt parçalarını hale getirebilir.