Nasıl Zend View Beton işlevi uygulamak için uzatın musunuz?

4 Cevap php

Ben mümkün olduğunca kolay bizim tasarımcıları bunu yapmak istiyorum demektir görünümleri, dizeleri lokalize için yapmak istiyorum:

...
<p><?php echo $this->_("Hello, world!"); ?></p>
...

Burada çizgi notasyonu poEdit automagically lokalizasyonu için tüm dizeleri ayıklamak için izin gereklidir. Uygulama Önemsiz:

public function _($string)
{
    return Zend_Registry::get('Zend_Translate')->_($string);
}

Şu anda, (Ben Zend kütüphane herhangi değiştirerek bunu yapmak istemiyorum) kötü olan, Zend_View_Abstract doğrudan bu koyduk. İdeal olarak, o zaman, ben genişletmek istiyorum Zend_View_Abstract bana biz gerektiren diğer somut işlevleri uygulamak için izin vermek için, ama bu nasıl kurulacağını bilmiyorum. Alternatif bir görünüm Yardımcısı uygulamak olabilir, ama ben bunu biliyorum tek yolu daha ayrıntılı görünümünde kod yapar. Herhangi bir işaretçiler (hayır, bu tür) çok duyacağız. Teşekkürler!

4 Cevap

Açıkçası kendi için benim yolu gözardı ...

  1. Uzatın Zend_View
  2. Bu genişletilmiş sınıf içinde yöntem koymak
  3. (Mesela bootstrap olarak) sınıfı örneğini
  4. ViewRenderer atamak
  5. Zend_Controller_Action_HelperBroker's addHelper yöntemle bu viewrenderer KATKISI
  6. Senin görünümünde kullanın

In / library / MegaHAL / Zend / view.php oluşturun:

class MegaHAL_Zend_View extends Zend_View
{
    public function _($string)
    {
    return Zend_Registry::get('translate')->_($string);
    }
}

Lütfen bootstrap in:

require_once APPLICATION_PATH.'../library/MegaHAL/Zend/View.php';

$view = new MegaHAL_Zend_View();

$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

Senin görünümünde:

<p><?php echo $this->_("Hello");?></p>

Ben ne istediğinizi yapacağına inanıyorum, evet?

Sana custom view helpers oluşturmak için bir yol arıyoruz düşünüyorum.

Örnek:

class My_View_Helper extends Zend_View_Helper_Abstract
{
    public function translate($string)
    {
        //...
    }
}

...

$view->setHelperPath('/path/to/helpers', 'My_View_Helper');

...

Sonra görünümlerinde bunu kullanabilirsiniz:

echo $this->translate("Hello, World!");

Ben görünümü yardımcıları kullanarak bunu yapmanın doğru "Zend-Framework"-yol olacağını düşünüyorum rağmen, Zend_View genişletmek ve sahip olmak istediğiniz tüm ek yöntemleri uygulayabilirsiniz - Bunu yapmazsanız bu şekilde özellikleri gevşek Zend_View.

class My_View extends Zend_View
{
    public function _($string)
    {
        return Zend_Registry::get('Zend_Translate')->_($string);
    }
}

Daha sonra sadece emin yeni görünümü sınıf örneği ve controller (kendi sınıfının bir örneğine Zend_Controller_Action::$view örnek değişkeni ayarı) ve varsayılan görünüm olarak kayıtlı olduğunu yapmak zorunda Lütfen Zend_Layout (when using layouts; passing your view as a config option with key view) ViewRenderer veya ViewRenderer kullanarak ViewRenderer kullanırken Zend_Controller_Action_Helper_ViewRenderer::setView().

Düzgün yapılandırılmış poEdit otomatik) (_ dışındaki fonksiyonlardan dizeleri ayıklamak.