2010-01-25 12 views
5

Mam formularz rozszerzony od Zend_Form. Jestem umieszczenie formularza do dekoratora ViewScript tak:zend_form ViewScript decorator/passing argumenty

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

Chciałbym przekazać w zmiennej do tego ViewScript, ale nie jestem pewien, w jaki sposób można to zrobić.

Ponieważ częściowe renderowanie jako Zend_View (pozwalając $ this-> app_store_icon na renderowanie), wydaje się, że powinien istnieć sposób przekazywania zmiennych do renderowania. Próbowałem następujące, ale bez skutku.

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

Każda pomoc, jak to zrobić, byłaby doceniona.

dzięki

Odpowiedz

10

Ten jest trochę skomplikowane, wziął mnie walka pół godziny, aby zrozumieć to, ale można to zrobić :)

Chodzi o to, że jesteś przechodzącą opcje dekorator ViewScript, a nie element. Dodanie opcji:

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

lub tablicę opcji:

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

że uzyskanie w częściowym, test.phtml:

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

W pierwszym przypadku, z jedną opcją podał Będzie to $option['foo'], aw drugim będzie to $option[0]['foo']

H TH :)

+0

Osobiście odkryłem, że druga z podanych metod jest skuteczniejsza od pierwszej. Dzięki :) – jjmu15

2

Jest jeszcze kilka możliwych sposobów osiągnięcia dodanie ikony wewnątrz formy, które myślę, że należy wziąć pod uwagę,

Jeden byłoby dodać własny typ elementu i dodać do niestandardowego dekoratora ikona (robię to, aby dodać proste? ikony pomocy, lub przeglądarki plików, aby utworzyć elementy). Jest to dość prosta sprawa.

Drugi będzie po prostu dodać dekorator HtmlTag do elementu, do którego można określić atrybuty, takie jak src jako opcje.

Te dwa rozwiązania mają inną ukrytą zaletę, a ponadto ułatwiają zarządzanie nimi. Usuwają również użycie pomocnika widoku częściowego, który jest używany raz dla każdego używanego dekoratora.

Pomocnik widoku częściowego może ogromnie dodać do pamięci i czasu narzutu formularza (który jest już dość duży nawiasem mówiąc), to jest zaostrzone, gdy używasz dekoratora viewscript na elementach zamiast na całym formularzu!

2

Potrzebowałem podać kod html wskazujący status wyniku do pliku viewscript.phtml. Znalazłem prostszy sposób niż przekazywanie go wraz z dekoratorem, który przekazuje wartość z działania kontrolera tak, jakby przekazywać go do normalnego skryptu widoku Zend. np:

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

I tam można przekazać dowolny kod HTML świadczone .. Myślę, że to działałoby dla ikon ..

Mohannad

+0

znajduję odpowiedź na to pytanie około trzy dni temu. Bardzo mi pomagasz! Dzięki! Jestem zły po angielsku, bardzo przepraszam. –