2011-08-29 5 views
0

두 요소를 나란히 배치하는 장식자를 지정해야합니다. 일반적으로 기본 zend의 "dl-dt-dd"구조를 렌더링합니다. 나는 dt에있는 공통 단일 레이블을 가진 동일한 dd에서이 두 요소가 모두 필요합니다.다음 코드에 대한 zend 양식 데코레이터는 무엇입니까?

$card_expmonth = new Zend_Dojo_Form_Element_FilteringSelect('card_expmonth'); 
$card_expmonth->setLabel('Card Expiration') 
    ->setMultiOptions(array(1=>'1','2','3','4','5','6','7','8','9','10','11','12')) 
    ->setAttrib('style','width:100px;') 
    ->setRequired(true); 

$card_expyear = new Zend_Dojo_Form_Element_FilteringSelect('card_expyear'); 
$card_expyear->setMultiOptions(array(2011=>'2011','2012','2013','2014','2015','2016','2017','2018','2019','2020','2021','2022','2023','2024','2025')) 
    ->setAttrib('style','width:100px;') 
    ->setRequired(true); 

제발 도와주세요.

답변

1
$card_expmonth->setDecorators(array(
    'ViewHelper', 
    array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'openOnly' => true)), 
    array('Label', array('tag' => 'dt')), 
    array(array('dl' => 'HtmlTag'), array('tag' => 'dl', 'openOnly' => true)) 
)); 

$card_expyear->setDecorators(array(
    'ViewHelper', 
    array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'closeOnly' => true)), 
    array(array('dl' => 'HtmlTag'), array('tag' => 'dl', 'closeOnly' => true)) 
)); 

테스트되지 않았습니다. 그것이 작동하지 않으면 말해봐.

도 읽을 수 있습니다. http://devzone.zend.com/article/3450

+0

ViewHelper 대신 DijitElement가됩니다. openOnly와 closeOnly에 대한 아이디어를 주셔서 감사합니다. –

0

나는 당신이이 경우에 장식을 사용하지 않는 것이 좋습니다 :

$card_expmonth->setDecorators(array('ViewHelper')); 
$card_expyear->setDecorators(array('ViewHelper')); 

보기에서 :

<form action="<?php echo $form->getAction() ?>" 
     method="<?php echo $form->getMethod() ?>" 
     enctype="<?php echo $form->getEnctype() ?>" 
     accept-charset="<?php echo $form->getAttrib('accept-charset') ?>" 
     id="<?php echo $form->getId() ?>"> 
    <dl> 
     <dt><?php echo $form->card_expmonth->getLabel() ?></dt> 
     <dd> 
      <?php echo $form->card_expmonth ?> 
      <?php echo $form->card_expyear ?> 
     </dd> 
    </dl> 
</form> 

또한 오류 출력을 걱정해야한다.

+0

어쨌든 데코레이터를 통해 수행 할 수 있다면 가장 좋습니다. 여기서는 불가능합니까? –

관련 문제