2

私はZendデコレータに問題があり、私が彼を持っていたい場所に要素を配置する方法を理解できません。ZEND - デコレータと要素の位置?

私は、デコレータがデータをテーブルに入れているところにフォームを持っていますが、私はテーブルから送信したいと思っています。

for ($i = 0; $i < $numRows; $i++) { 
    $select = new Zend_Form_Element_Select('article' . $i); 
    $select->setAttrib('style', 'margin-top:10px;width:200px;'); 
    $select->addMultiOption('1', $this->translate->_('Zatwierdzony do druku')); 
    $select->addMultiOption('0', $this->translate->_('Niezatwierdzony do druku')); 
    $select->setValue($rows[$i]['reviewed']); 
    $select->setDecorators(
     array(
     'ViewHelper', 
     array(
      array('data' => 'HtmlTag'), 
      array('tag' => 'td', 'class' => 'padding5 tdcenter') 
     ), 
      array(
       'AnyMarkup', 
       array(
        'markup' => $this->_getMarkupForRow($i, $rows), 
        'placement' => 'PREPEND', 
       ) 
      ), 
     array(
      array('row' => 'HtmlTag'), 
      array('tag' => 'tr', 'openOnly'=>true) 
     ), 
    ), 
     array('submit'), 
     false 
); 
    $this->addElement($select); 
} 

$submit = new Zend_Form_Element_Submit('updatetoprint'); 
$submit->setAttrib('id', 'updatetoprint'); 
$submit->setLabel('Zapisz'); 
$submit->setDecorators(
    array(
    'ViewHelper', 
    array(
     array('data' => 'HtmlTag') 
    ), 
    array(
     array('row' => 'HtmlTag'), 
     array('tag' => 'div', 'closeOnly'=>true,'style' => 'float:left;') 
    ) 
    //here i dont know how to get my submit on the bottom under the table...? 
    ), 
    array('submit') 
); 
$this->addElement($submit); 

サイトでは、次のようになります:今のところ私はそのような何か持って my form

を、私は私はテーブルの下に下に提出したいのですが...私を助けてください。 )

答えて

3

あなたのフォームをビューに割り当てる場所や、フォームがZend_Formであるかどうかわからないので、私はいくつか前提をします。
私は、あなたがあなたのフォームを構築するためにZend_Formのを使用していると私はあなたがそれを言われているとコントローラのアクションだから、
$this->view->form = $form;
内部の伝統的な方法で、ビューにフォームを割り当てていると仮定するつもりだと仮定するつもりですあなたは、単にelementNameが、あなたの場合には、あなたの要素を指定した名前である
<?php echo $this->form->elemenetName ?>
により、個々の要素にアクセスすることができ、あなたのビュースクリプトは、あなたの送信ボタンを名前「updatetoprint」を持っています。
テーブルやその他のレイアウトを作成する必要がある場合は、フォームにジェネリック要素を作成し、必要に応じて任意のビュースクリプトに追加するだけで済みます。デコレータで体操をするのを防ぐかもしれない。 CSSで

<form action="<?php echo $this->form->getAction() ?>" method="<?php echo $this->form->getMethod() ?>"> 
    <table> 
     <tr> 
     <th>Dodal</th> 
     <th>Tutyl</th> 
     <th>Status</th> 
     </tr> 
    <!--you should probably put the next 5 lines into a partial and use partialLoop($data)--> 
     <tr> 
     <td><?php echo $this->form->dodal ?></td> 
     <td><?php echo $this->form->tutyl ?></td> 
     <td><?php echo $this->form->status ?></td> 
     </tr> 
    </table> 
    <?php echo $this->form->updatetoprint ?> 
    </form> 

それからちょうどスタイル:たとえば

は、次のようになりますview.phtml。

セットアップするにviewscriptを使用するフォームだけで使用します。

$form->setDecorators(array(
    'PrepareElements', 
    array('ViewScript', array('viewScript' => 'form.phtml')), 
)); 

をform.phtmlが

あなたviewscript名前である[編集] さらに検討した後、私はこの方法でフォーム要素をdiplayingことに気づきました重大な欠点が1つあります。フォームは決して初期化されません...フォームタグは送信されません。この編集はその問題を修正することです。
は申し訳ありませんが、それは私が間違いを犯していますどこ

ノー結果をしようとしていた
+1

実際、デコレータ体操(ha!)とビュー要素にフォーム要素を入れる中間的なアプローチは、単にViewscriptデコレータを使うことです。これは、アプリケーションの複数の場所でフォームを使用する場合に特に便利です。 –

+1

@David Weinraubそれは、ZFについて本当に愛することの一つですが、問題には常に多くの異なる解決策があります。私はまだViewscriptデコレータを調べていませんが、私はある時点で理由があると確信しています。 – RockyFord

+0

部分的にデータを取得するにはまだ問題がhavinそれにその愚かなanymarkupを取得する方法を知っていない...気がZFのデコレータを嫌い...その病気:(編集:私はちょうどいくつかの他の方法を表示していたidを作ったが、 (私は手動でフォームタグを追加することができますが、その良いソリューションではないと思う...私はあなたの方法でそれを作っているとき、ビュースクリプトを追加しているかもしれません。私は変更を控えることはできません。ページ上の私のCSSはうんざりしており、すべてが変更されています(悪い)。私はそれをやる方法を知らない... – DarAss

1

表示グループに送信ボタンから離れてすべての要素を追加することをお勧めします。次に、表示グループにテーブルにタグが設定されたHtmlTagデコレータを与えます。これにより、すべての要素が表にラップされ、HTMLが有効になり、必要なレイアウトが与えられます。

+0

...私は知らないので、時間がかかった..しかしdisplaygroup働いていませんでした... – DarAss

1

<tr><td>タグがたくさんありますが、<table>タグはありません。私はあなたが探していると思うと、おおよそ次のようなマークアップである:あなたのコードから欠落しているように見える何

<table> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
    <tr><td>info</td><td>more info</td><td>select element</td></tr> 
</table> 
<div> 
    <input type="submit"> 
</div> 

<table></table>タグを生成任意のデコレーターです。したがって、ループの最初の反復では、AnyMarkupデコレータを使用して、<table>とヘッダー行を追加します。最後の反復で、</table>タグを付加するデコレータを追加します。

次に、送信ボタン(最後に追加されたボタン)がすぐ下に表示されます。

+0

テーブルタグは、私のPHTMLファイルであります私はDodał、Tytułなどのようなヘッダーが必要なので、phtmlで手動で追加してください。それはwhymのテーブルのタグはフォームの外です。フォームの中にテーブルのタグをつくっていたとき、実際には動作していませんでした...効果は上記と同じでした。はい、私はあなたが上記のような構造をしたいです。しかし、もし私がDodał、Tytył、Statusなどのヘッダを手作業で追加する方法の中でフォームの中にテーブルタグを作ったらどうすればいいのか分かりません... – DarAss

+0

それは問題の本質です:あなたのビュースクリプトスクリプトフォームの中にフォームを含むオープン/クローズテーブルのタグが含まれている場合、そのフォームのサブミットボタン*がそのテーブルの外に出現する方法はありません。私はあなたがすでにAnyMarkupデコレータに精通しているので、テーブルレンダリングを実際に簡単なフォームにプッシュします。私は答えを更新します。 –

+0

私はフォームスクリプトの中でテーブルタグを取得する方法を知っていますが、もし私がこれを行うと、テーブルのヘッダを持つ方法を結び付けていません。回答の更新を待っています: – DarAss