PHP Altyapıları - Düzen Dinamik Menü

9 Cevap php

PHP bir web sitesi geliştiriyorum ve ben PHP çerçeveler ile deneyim kazanmak istediğiniz gibi yapmak için bir mvc framework kullanmak istiyorum.

Ben Zend, CakePHP, CodeIgniter ve baktım ve bunu gerçekleştirmek için sezgisel bir yol bulmak mümkün olmamıştır.

Ne yapmam gerekiyor, örneğin olacak bir düzen yaratmaktır:

<html>
<head>
<!--scripts go here-->
</head>
<body>
<div id='banner'></div>
<div id='menu'><?php $this->layout()->menu ?></div>
<div id='container'><?php $this->layout()->content ?></div>
<div id='ads'><?php $this->layout()->ads ?>
<div id='footer'>blah</div>
</body>
</html>

Bu benim bakış açısıyla gerçekleştirmek için basit olması gerektiği gibi kesmek bir sürü olmadan sadece bu yapabileceği bir çerçeve arıyorum.

Bu menü, içerik ve ayrı kontrolörler ve görüşlerinden reklamlarını çekeceği ve tabii dinamik içerik olacaktır. Her görünümüne menü kodu koymak istemiyorum ...

Belki de bu basit ve ben sadece bu konuda yanlış şekilde gidiyorum?

Herhangi bir yardım takdir edilmektedir.

Thank you,
-Ben

9 Cevap

Symfony Eğer kavramların bir karışımını kullanarak arıyor ne yapabilirim.

  • Düzen - Bu sayfa süslemek için kullanılan ana yapıdır.
  • Template - Bu kontrolör tarafından bir URL'ye bağlı ana görünümdür.
  • Fragments - Hafif ve verileri kullanır, kendisine iletmek.
  • Bileşen - Eğer modeline erişimi gerekiyorsa el, kod sunum ve mantık arasında bölünmüş olduğunu.
  • Slot - düzeni tanımlanmış bir bölümünü değiştirmek için kullanılır.

Senin durumunda düzen ana içerik görünümü tabakası ve diğer öğelerin çekirdek erişmeye gerekir ne kadar modelin bağlı olarak ya fragmanları veya bileşenleri olurdu şablon mantığı kullanarak dahil olurdu.

Symfony documentation Bu tam bir açıklama var.

Aslında burada ne elde etmek istiyorsunuz Zend Framework kullanarak, zaten ne çok az sapma ile yapılabilir.

Menü için, size sitenizin navigasyon ağacını tanımlamasına olanak veren, Zend_Navigation kullanmak ve basit menüler oluşturabilirsiniz. , Ben bir ön denetleyicisi eklenti Zend_Navigation kabını doldururken kolayca nesne önbelleğe verir bulmak, böylece siteler ağaç geçme çok az performans endişeler var

Reklamlar için, sadece tutucu görünümü yardımcıyı kullanın, ve bir kez daha bu doldurmak için bir ön denetleyicisi eklentisi kullanabilirsiniz. Bir eklenti kullanarak izlenimlerini sayma ve reklamları dönen mantık, eylemleri ayrı tutulur ve kolayca her eylem karşısında görevini gerçekleştirir olduğu avantaja sahiptir.

eylem yığını kullanarak dustin.cassiday 's yöntemi riskli, ve uygulamalar hata ayıklama büyük baş ağrısı neden olabilir. ve Itay Moav yöntemi şimdi nedeniyle Zend_Navigation gerçekten gereksiz

Bahsettiğiniz PHP kitaplıkları Her çiftleşmiş ve neye ihtiyacınız gerçekleştirebilirsiniz.

Bir kütüphane almak ve onunla yüzleşmekten olsun. Bu zaman içinde amorti edecek. Smarty gibi çiftleşmiş motorları iyi, ama tam bir çerçeve daha çok şey sunuyor.

Bu denetleyicisi actionStack ile mümkündür:

$this->_helper->actionStack('menu','index');
$this->_helper->actionStack('ads','index');

Muhtemelen bir çiftleşmiş motoru olarak çok bir çerçeve aramıyoruz. Try Smarty.

Smarty ya da Tempalte lite

Kek Eğer sadece aracılığıyla dahil bir eleman bu koymak olabilir

echo $this->element('menu');

İstediğiniz bu unsur kadar karmaşık veya basit yapabilirsiniz. Eğer otomatik olarak sayfanın bölümünde vurgulamak gerekirse, çeşitli yöntemler vardır. Örneğin, eleman pick up ki her Kontrolörü / Eylem bir değişken.

// Controller
$this->set('currentNode', 'homepage');

// Menu Element
if ($currentNode == 'homepage') {
    // add class 'selected' to menu item, or something like this
}

Uygulama nasıl karmaşık bağlı olarak, aynı zamanda tamamen kendine yeten tutmak olabilir.

// Menu Element
if ($this->controller == 'home') {
    // highlight this menu item, add extra sub-items, re-calibrate flux capacitor
}

Noktası olmak, bunu yapmak için yolu kesinlikle vardır, ama kullanmak çerçeve bağlıdır ve tam olarak ne yapmak gerekir. Herhangi bir çerçevede yapmak oldukça önemsiz olmalı ve çerçeve / çiftleşmiş motoru seçiminiz bu küçük özellik bağlı olmamalıdır.

In Zend Framework (which is the only one I know of those you mentioned) there are several ways to accomplish this. I prefer the Helper way.
Your layout will look:

<html>
<head>
<!--scripts go here-->
</head>
<body>
<div id='banner'></div>
<div id='menu'><?php $this->menu() ?></div>
<div id='container'><?php $this->layout()->content ?></div>
<div id='ads'><?php $this->ads() ?>
<div id='footer'>blah</div>
</body>
</html>

Ve iki görünümü Yardımcıları sahip olacaktır:

class Zend_View_Helper_Menu{
   public function menu(){
       echo "<html.........>";
   }
}

VE

class Zend_View_Helper_Ads{
   public function ads(){
       echo "<html.........>";
   }
}

Verdiğiniz tam sözdizimi sonuçlanacak bir yol vardır. Bu şekilde aşina değil, try this link

Zend Framework bunu gibi ViewRenderer verecek kişinin responseSegment özelliğini ayarlayarak düzeni her bölüm için ayrı ayrı eylem ve görüşlerini oluşturabilirsiniz:

class IndexController extends Zend_Controller_Action {

    public function menuAction() {

    	//menu code goes here

    	$this->_helper->viewRenderer->setResponseSegment('menu');
    }

    public function adsAction() {

    	//ads code goes here

    	$this->_helper->viewRenderer->setResponseSegment('ads');
    }
}

vs ..

Daha sonra düzen dosyasında belirttiğiniz tam yol onları çağırabilirsiniz:

<?= $this->layout()->menu; ?>
<?= $this->layout()->ads; ?>