¿Cómo extiendo la vista Zend para implementar una función concreta?
-
03-07-2019 - |
Pregunta
Quiero que sea lo más fácil posible para nuestros diseñadores localizar las cadenas en las vistas, lo que significa que quiero hacer esto:
...
<p><?php echo $this->_("Hello, world!"); ?></p>
...
La notación de subrayado aquí es necesaria para permitir que Poedit extraiga automáticamente todas las cadenas para su localización. La implementación es trivial:
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
En este momento, he puesto esto directamente en Zend_View_Abstract
, lo cual es malo (no quiero hacer esto modificando ninguna de la biblioteca de Zend). Idealmente, entonces, extendería Zend_View_Abstract
para que pueda implementar otras funciones concretas que necesitamos, pero no sé cómo configurar esto. Una alternativa podría ser implementar un Asistente de visualización, pero la única forma en que sé cómo hacerlo hace que el código de la vista sea más detallado. Cualquier puntero (no, no ese tipo) sería muy apreciado. Gracias!
Solución
Obviamente ignora mis caminos para los tuyos ...
- Extender
Zend_View
- Ponga su método en esta clase extendida
- Crea una instancia de la clase (en tu bootstrap, por ejemplo)
- Asignarlo al ViewRenderer
- Pase ese espectador a
Zend_Controller_Action_HelperBroker
addHelper method - Úsalo en tu vista
En / library / MegaHAL / Zend / create View.php:
class MegaHAL_Zend_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('translate')->_($string);
}
}
En tu 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);
En su opinión:
<p><?php echo $this->_("Hello");?></p>
Creo que va a hacer lo que quieras, ¿sí?
Otros consejos
Creo que estás buscando una forma de crear ayudantes de vista personalizados .
Ejemplo:
class My_View_Helper extends Zend_View_Helper_Abstract
{
public function translate($string)
{
//...
}
}
...
$view->setHelperPath('/path/to/helpers', 'My_View_Helper');
...
Luego, en tus vistas puedes usarlo:
echo $this->translate("Hello, World!");
Aunque creo que usar los ayudantes de visualización sería la forma correcta de " Zend-Framework "; de esta manera, puede extender Zend_View
e implementar todos los métodos adicionales que le gustaría tener, esto De esta forma no perderá las características de Zend_View
.
class My_View extends Zend_View
{
public function _($string)
{
return Zend_Registry::get('Zend_Translate')->_($string);
}
}
Entonces, solo tiene que asegurarse de que su nueva clase de vista esté instanciada y registrada como la vista predeterminada en controller (configurando la variable de instancia Zend_Controller_Action :: $ view
en una instancia de su clase) y en su < a href = "http://framework.zend.com/manual/en/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout
(cuando se usan diseños; pasando su vista como una opción de configuración con la tecla view
) cuando no use ViewRenderer
o en ViewRenderer
al usar el ViewRenderer
usando < código> Zend_Controller_Action_Helper_ViewRenderer :: setView () .
Si está configurado correctamente, Poedit puede extraer cadenas automáticamente de funciones que no sean _ ().