5

Zend_Formから拡張されたフォームがあります。フォームを次のようなViewScriptデコレータに配置しています。

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'))));

このViewScriptに変数を渡したいのですが、これをどのように行うことができるかわかりません。

パーシャルはZend_Viewとしてレンダリングされるため(レンダリングに$ this-> app_store_iconを許可)、レンダリングする変数を渡す方法があるはずです。私は次のことを試みましたが、役に立ちませんでした。

$this->setDecorators(array(array('ViewScript', array('viewScript' => 'game/forms/game-management.phtml'),array('app_store_picon'=>$current_app_store_picon))));

これを行う方法についての助けをいただければ幸いです。

ありがとう

4

3 に答える 3

10

これは少しトリッキーで、それを理解するのに30分ほどかかりましたが、それは可能です:)

ViewScript重要なのは、オプションを要素ではなくデコレータに渡すということです。オプションの追加:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml',
    'foo'=>'baz',
))));

またはオプションの配列:

$this->setDecorators(array(array('ViewScript', array(
    'viewScript' => 'test.phtml',
    array(
        'foo'=>'baz',
        'spam'=>'ham',
    ),
))));

部分的にそれを出す、test.phtml

$option = $this->element->getDecorator('ViewScript')->getOptions();

最初のケースでは、1つのオプションが渡されると、それが実行$option['foo']され、2番目のケースでは次のようになります。$option[0]['foo']

HTH :)

于 2010-01-25T20:56:56.250 に答える
2

スコアステータスを示すhtmlコードをviewscript.phtmlファイルに渡す必要がありました。デコレータと一緒に渡すよりも簡単な方法を見つけました。これは、通常のzendビュースクリプトに渡すかのように、コントローラのアクションから値を渡すことです。例えば:

<Controller>
// pass status and score to view
$this->view->status = $this->_sitenamehelper->get_status($id);
$this->view->score = $this->_sitenamehelper->get_score($id);

<viewscript.phtml partial file>
<?php $form = $this->element; ?>
<b>Status: </b><?php echo $form->getView()->status; ?>
<b>Score: </b><?php echo $form->getView()->score; ?>

そしてそこにあなたはどんなhtmlレンダリングされたコードでも渡すことができます..私はそれがアイコンのために働くと思います..

モハナド

于 2012-03-15T14:13:04.760 に答える
2

フォーム内にアイコンを追加する方法は他にもいくつかありますが、これを検討する必要があると思います。

1つは、独自の要素タイプを追加し、アイコンのカスタムデコレータを追加することです(これは、次にヘルプを表示するための単純な?アイコンを追加するため、または要素を形成するためのファイルブラウザを追加するために行います)。これは非常に簡単なことです。

もう1つは、要素にHtmlTagデコレータを追加するだけで、srcなどの属性をオプションとして指定できます。

これらの2つのソリューションには、管理が簡単になることに加えて、実際には別の隠れた利点があります。また、使用中のすべてのviewscriptデコレータに1回使用される部分ビューヘルパーの使用も削除されます。

部分ビューヘルパーは、フォームのメモリと時間のオーバーヘッドを大幅に増やす可能性があります(ちなみに、これはすでにかなり大きいです)。これは、フォーム全体ではなく要素にviewscriptデコレータを使用すると悪化します。

于 2010-04-27T07:17:11.700 に答える