Como Estender Zend Vista para implementar uma função de concreto?
-
03-07-2019 - |
Pergunta
Eu quero torná-lo tão fácil quanto possível para os nossos designers para localizar strings em vista, o que significa que eu quero fazer isso:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
A notação sublinhado aqui é necessário para permitir Poedit para extrair automagicamente todas as cordas para a localização. A implementação é trivial:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
No momento, eu coloquei isso diretamente no Zend_View_Abstract
, o que é ruim (eu não quero fazer isso modificando qualquer da biblioteca Zend). Idealmente, então, eu estender Zend_View_Abstract
para me permitir implementar outras funções concretas de que precisamos, mas eu não sei como configurar isso. Uma alternativa poderia ser a de implementar um ajudante View, mas a única maneira que eu sei como fazer isso torna o código na visualização mais detalhada. Os ponteiros (não, não esse tipo) seria muito apreciado. Obrigado!
Solução
Obviamente ignorar os meus caminhos para o seu próprio ...
- Estender
Zend_View
- Coloque o seu método nesta classe estendida
- instanciar a classe (em seu bootstrap por exemplo)
- atribuí-lo ao ViewRenderer
- Passe que ViewRenderer ao método
Zend_Controller_Action_HelperBroker's
addHelper - Use-o em sua vista ??li>
em / Library / MegaHAL / Zend / criar view.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
Em seu bootstrap:
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);
Na sua opinião:
<p><?php echo $this->_("Hello");?></p>
Eu acredito que vai fazer o que quiser, sim?
Outras dicas
Eu acho que você está procurando uma maneira de criar exibição personalizado ajudantes .
Exemplo:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
Então, em seus pontos de vista que você pode usá-lo:
echo $this->translate("Hello, World!");
Embora eu acho que o uso de vista ajudantes seria o correto "Zend-Quadro" de direcções de fazer isso, você pode estender Zend_View
e implementar todos os métodos adicionais que você gostaria de ter - desta forma você não perde as características de Zend_View
.
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
Você, então, só tem que se certificar de que sua nova classe vista é instanciado e registrado como o modo de exibição padrão no controlador (definindo a variável de instância Zend_Controller_Action::$view
a uma instância de sua classe) e na sua Zend_Layout
(quando se utiliza layouts; passando sua visão como uma opção de configuração com view
chave) quando não utilizar o ViewRenderer
ou em ViewRenderer
ao usar o ViewRenderer
usando Zend_Controller_Action_Helper_ViewRenderer::setView()
.
Se configurado corretamente Poedit pode extrair automaticamente seqüências de diferentes funções _ ().