Zend Viewを拡張して具象関数を実装するにはどうすればよいですか?

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 を拡張して、必要な他の具体的な関数を実装できるようにしますが、これを設定する方法がわかりません。別の方法としてビューヘルパーを実装することもできますが、これを行う方法を知っている唯一の方法は、ビューのコードをより冗長にします。任意のポインター(いいえ、そういう種類ではありません)は大歓迎です。ありがとう!

役に立ちましたか?

解決

明らかに自分のパスを無視します...

  1. Zend_View を拡張
  2. この拡張クラスにメソッドを入れます
  3. クラスをインスタンス化します(たとえば、ブートストラップで)
  4. ViewRendererに割り当てる
  5. そのビューレンダラーを Zend_Controller_Action_HelperBrokerの 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);
    }
}

その後、新しいビュークラスがインスタンス化され、 controller Zend_Controller_Action :: $ view インスタンス変数をクラスのインスタンスに設定)および< a href = "http://framework.zend.com/manual/en/zend.layout.options.html" rel = "nofollow noreferrer"> Zend_Layout (レイアウトを使用する場合。 ViewRenderer を使用していないとき、またはview を使用して設定オプションとして渡すja / zend.controller.actionhelpers.html#zend.controller.actionhelpers.viewrenderer "rel =" nofollow noreferrer "> ViewRenderer を使用して ViewRenderer を使用する場合、< code> Zend_Controller_Action_Helper_ViewRenderer :: setView()。

適切に設定されている場合、Poeditは_()以外の関数から文字列を自動的に抽出できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top