2010-04-20 1 views
0

나는 시간을 입력하기 위해 작은 폼 엘리먼트를 만들었습니다. 내 응용 프로그램의 몇 곳에서 이것을 필요로하기 때문에, 나는 그것에 대한 별도의 요소를 만들기로 결정했습니다.커스텀에서 선택된 아이템 설정하기 Zend_Form_Element

class EventManager_Form_Element_Time extends Zend_Form_Element 
{ 
    public function init() 
    { 
     parent::init(); 
     $this->addDecorator('ViewScript', array(
      'viewScript' => 'time.phtml' 
     )); 

     $this->addValidator(new Zend_Validate_Regex('/^[0-9]+:[0-9]+:[0-9]+$/')); 
    } 

    public function setValue($value) 
    { 
     if(is_array($value)) 
     { 
      @list($hours, $minutes, $seconds) = $value;   
      $value = sprintf('%s:%s:%s', $hours, $minutes, $seconds); 
     } 

     return parent::setValue($value); 
    } 
} 

내가 만든 해당보기 스크립트입니다 :

<?php @list($hours, $minutes, $seconds) = explode(':', $this->element->getValue()); ?> 
<dt> 
    <?= $this->formLabel($this->element->getName(), $this->element->getLabel()); ?> 
</dt> 
<dd> 
    <select id="<?= $this->element->getName();?>"> 
     <option value="00">00</option> 
     <option value="01">01</option> 
     <option value="02">02</option> 
     <option value="03">03</option> 
     <option value="04">04</option> 
     <option value="05">05</option> 
     <option value="06">06</option> 
     <option value="07">07</option> 
     <option value="08">08</option> 
     <option value="09">09</option> 
     <option value="10">10</option> 
     <option value="11">11</option> 
     <option value="12">12</option> 
     <option value="13">13</option> 
     <option value="14">14</option> 
     <option value="15">15</option> 
     <option value="16">16</option> 
     <option value="17">17</option> 
     <option value="18">18</option> 
     <option value="19">19</option> 
     <option value="20">20</option> 
     <option value="21">21</option> 
     <option value="22">22</option> 
     <option value="23">23</option> 
    </select> 
    <select id="<?= $this->element->getName();?>"> 
     <option value="00">00</option> 
     <option value="15">15</option> 
     <option value="30">30</option> 
     <option value="45">45</option> 
    </select> 

    <input id="<?= $this->element->getName(); ?>" 
      type="hidden" 
      name="<?= $this->element->getName(); ?>[]" 
      value="00" /> 



    <?php if(count($this->element->getMessages()) > 0): ?> 
     <?= $this->formErrors($this->element->getMessages()); ?> 
    <?php endif; ?> 
</dd> 

내 문제는 때로는 내가 할 기본 선택 값을 설정하려는 것입니다 여기에

는 FA 그래서 코드 내 양식을 채울 때 내 selecboxes. 문제는 어떻게?

나를 도와 줄 수있는 사람이 있습니까?

감사합니다.

컨트롤러 :

$form = new Your_Form(); 
$form->yourDateElement->setValue('12:30:00'); 
$this->view->form = $form; 

보기 :

<?= $this->form ?> 

양식 요소 viewscript : BTW

<?php @list($hours, $minutes, $seconds) = explode(':', $this->element->getValue()); ?> 
<dt> 
    <?= $this->formLabel($this->element->getName(), $this->element->getLabel()); ?> 
</dt> 
<dd> 
    <select id="<?= $this->element->getName();?>" name="<?= $this->element->getName(); ?>[]"> 
    <? 
     for($h = 0; $h < 24; $h++): 
      $selected = $h == $hours ? ' selected="selected"' : ''; 
      $paddedHours = sprintf('%02d', $h); 
    ?> 
     <option value="<?= $paddedHours ?>"<?= $selected ?>><?= $paddedHours ?></option> 
    <? endfor; ?> 
    </select> 
    <select id="<?= $this->element->getName();?>" name="<?= $this->element->getName(); ?>[]"> 
    <? 
     for($m = 0; $m < 60; $m += 15): 
      $selected = $m == $minutes ? ' selected="selected"' : ''; 
      $paddedMinutes = sprintf('%02d', $m); 
    ?> 
     <option value="<?= $paddedMinutes ?>"<?= $selected ?>><?= $paddedMinutes ?></option> 
    <? endfor; ?> 
    </select> 

    <input id="<?= $this->element->getName(); ?>" 
      type="hidden" 
      name="<?= $this->element->getName(); ?>[]" 
      value="00" /> 



    <?php if(count($this->element->getMessages()) > 0): ?> 
     <?= $this->formErrors($this->element->getMessages()); ?> 
    <?php endif; ?> 
</dd> 

:

답변

1

당신은 (테스트되지 않은) 같은 것을 할 수 012,380,073,162,755을 나는 그렇게 쉽게 작동하지 않을 것이라고 생각합니다. 보시다시피, viewscript는 3 개의 요소를 가지고 있습니다 : 2 개는 선택하고 1 개는 숨겨진 입력이지만 폼 요소는이를 고려하지 않습니다.

복합 양식 요소를 만드는 방법은 Matthew Weier O'Phinney's blog post을 참조하십시오. 그것은 당신에게 몇 가지 아이디어를 줄 것입니다.

+0

@fireeyedboy는 튜토리얼을 보았지만 입력 상자를 선택 상자로 변경하는 방법을 알지 못했습니다. – sanders