Zend Framework daha esnek bir görünüm oluştururken

2 Cevap php

Kullanmadan önce özelleştirilmiş belirli alanları olması gereken bir html / javascript 'Widget' verildi. Örneğin, css sınıf kimlikleri Widget birden fazla kez aynı sayfada görünebilir gibi benzersiz olması gerekir.

Diyelim ki ben resuse sırasında özelleştirilmiş olması gereken değerleri doldurmak böylece bir şablon olarak saklanır widget biçimlendirme (js / html) tutmak istiyorum diyelim.

Ben Zend Framework görünümler, bu işlevi en azından bir kısmını vermek biliyorum, ama her görünüm genellikle belirli bir kontrolör ile ilişkilidir. Bu Widget herhangi bir denetçi oluşturulmuş olabilir göz önüne alındığında, evet hala bir kontrolör (veya modele) saklanan bazı özelliklerine erişmek mümkün olmalıdır. Nerede Widget biçimlendirme koymak gerektiğini ve nasıl sonra özel değerler dolduracağım?

Ben aynı sayfa içinde yeniden kullanılabilir özel bir görünüm oluşturabilirsiniz yanı sıra diğer sayfalarda (bir kereden fazla görünür)? Eğer öyleyse, ben bunu nasıl kurarım?

2 Cevap

Bir ViewHelper http://framework.zend.com/manual/en/zend.view.helpers.html gerekir gibi geliyor. Bir model ve sadece basit çıktı bu verileri alıp özel bir yardımcıya oluşturun. Herhangi bir denetleyici bağlı olmayacaktır Bu şekilde, düzen ya veya herhangi bir görünümü komut çağrılabilir. Örnek:

// views/helpers/Widget.php
class Zend_View_Helper_Widget extends Zend_View_Helper_Abstract
{
protected $_model = null;

protected $_view = null;

public function widget()
{
    $data = $this->_getDataFromModel();

    return $this->_view->partial('widget.phtml', array('data' => $data));
}

public function setView(Zend_View_Interface $view)
{
    if($this->_view === null) {
        $this->_view = $view;
    }

    return $this->_view;
}

protected function _getDataFromModel()
{
     $this->_model = $this->_getModel();
     return $this->_model->getDataForWidget();
}

protected function _getModel()
{
     if($this->_model === null) {
         $this->_model = new Model_Widget(); // or whatever it's called
     }
     return $this->_model;
}

Kısmi komut:

// views/scripts/widget.phtml
<div class="widget-class"><?php echo $this->data; ?></div>

Ve senin görüşlerinde ihtiyacınız olduğunda sadece <?php echo $this->widget(); ?> gibi diyoruz

Ben sadece helper kendisi html / css zorunda kalmamak için, ayrı bir kısmi görünümü komut widget'ı render değilim unutmayın.

Bu :) Başlamak için yardımcı olur umarım

Zend_View_Helper_Partial

Örnek:

<?php echo $this->partial('partial.phtml', array(
   'css_id' => 'foobar')); ?>

Başka bir modül bu çalıştırmak için:

<?php echo $this->partial('partial.phtml', 'partials_module', array(
   'css_id' => 'foobar')); ?>

Kısmi görünümü komut (partial.html) Eğer o $this->css_id erişim olurdu.