Как расширить представление Zend для реализации конкретной функции?

StackOverflow https://stackoverflow.com/questions/800775

Вопрос

Я хочу, чтобы нашим дизайнерам было как можно проще локализовать строки в представлениях, а это значит, что я хочу сделать следующее:

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

Обозначение подчеркивания здесь необходимо, чтобы позволить Poedit автоматически извлекать все строки для локализации.Реализация тривиальна:

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

На данный момент я вставил это прямо в Zend_View_Abstract, что плохо (я не хочу делать это, изменяя какую-либо библиотеку Zend).В идеале я бы расширил Zend_View_Abstract чтобы позволить мне реализовать другие конкретные функции, которые нам нужны, но я не знаю, как это настроить.Альтернативой может быть реализация View Helper, но единственный известный мне способ сделать это делает код в представлении более многословным.Любые указатели (нет, не такие) будем очень признательны.Спасибо!

Это было полезно?

Решение

Очевидно, игнорируйте мои пути ради своих собственных...

  1. Продлевать Zend_View
  2. Поместите свой метод в этот расширенный класс
  3. Создайте экземпляр класса (например, в вашем загрузочном файле)
  4. Назначьте его ViewRenderer
  5. Передайте этот зрительский рендерер Zend_Controller_Action_HelperBroker's метод addHelper
  6. Используйте это на свой взгляд

В /library/MegaHAL/Zend/ создайте View.php:

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

В вашем бутстрапе:

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);

На ваш взгляд:

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

Я верю, что это сделает то, что ты хочешь, да?

Другие советы

Я думаю, что вы ищете способ создать помощники по пользовательскому представлению.

Пример:

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

...

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

...

Затем в ваших представлениях вы можете использовать его:

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

Хотя я думаю, что использование помощников представлений было бы правильным способом сделать это в Zend-Framework, вы можете расширить Zend_View и реализовать все дополнительные методы, которые вы хотели бы иметь - таким образом вы не потеряете возможности Zend_View.

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

Затем вам нужно только убедиться, что ваш новый класс представления создан и зарегистрирован как представление по умолчанию в контроллер (установка Zend_Controller_Action::$view переменную экземпляра в экземпляр вашего класса) и в вашем Zend_Layout (при использовании макетов;передача вашего представления в качестве параметра конфигурации с помощью ключа view), когда не используется ViewRenderer или в ViewRenderer при использовании ViewRenderer с использованием Zend_Controller_Action_Helper_ViewRenderer::setView().

При правильной настройке Poedit может автоматически извлекать строки из функций, отличных от _().

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top