0

時間を入力するための独自の小さなフォーム要素を作成しました。これはアプリケーションのいくつかの場所で必要になるため、別の要素を作成することにしました。

これがそのコードです:

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>

私の問題は、フォームに入力するときに、デフォルトの選択値を選択ボックスに設定したい場合があることです。問題はどのようにですか?

これを手伝ってくれる人はいますか?

ありがとう。

4

1 に答える 1

1

あなたはこのようなことをすることができます(テストされていません):

コントローラ:

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

意見:

<?= $this->form ?>

フォーム要素のビュースクリプト:

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

ところで:
私はそれがすべてそれほど簡単に機能することはないと思います。ご覧のとおり、viewscriptには3つの要素があります。2つの選択と1つの非表示の入力ですが、フォーム要素はこれらを考慮していません。

複合フォーム要素を作成する方法については、MatthewWeierO'Phinneyのブログ投稿をご覧ください。それはあなたにいくつかのアイデアを与えるはずです。

于 2010-04-21T06:15:33.260 に答える