Zend Form: Как мне заставить его подчиниться моей воле? - PullRequest
42 голосов
/ 11 февраля 2009

Я много раз читал руководство, я просмотрел посты, предлагаемые Google по этому вопросу, я даже купил пару книг, посвященных ZF. Теперь, почему я все еще в замешательстве?

Я могу, используя Zend_Form, создать форму, которая хорошо работает и работает. То, что я не могу сделать, это сделать форму, которая выглядит точно так, как я хочу, чтобы она выглядела с сообщениями об ошибках, которые я хочу, чтобы она была. Я хочу настраиваемые кнопки, я хочу использовать интересные макеты, я хочу вставить текст в середине формы и т. Д.

У кого-нибудь есть простой способ достижения такого рода вещей? Что-то, что заставляет меня чувствовать, что фреймворк экономит мне время, а не стоит? Я мог отказаться от Zend Form ... создать свою собственную форму, чтобы ее действие попадало на страницу, чтобы проверить и обработать опубликованные данные, и я мог бы делать это примерно так быстро, как я могу печатать, но я действительно хочу "получить" это и иметь возможность использовать его так, как это было задумано.

Какой совет? Какие-нибудь простые "как сделать" для пользовательских кнопок, прикольных макетов и базовых (или, точнее, продвинутых, поскольку есть тонны базовых учебных пособий, пропускающих более сложные вопросы) "выполнения задач" с помощью Zend Form?

Ответы [ 14 ]

1 голос
/ 21 июля 2009

ОТВЕТЬ ЗДЕСЬ. НАДЕЖДА, это поможет вам. Я прошел через огромное количество информации, пока не нашел ее.

<table>
    <tr>
        <td>Page name: *</td>
        <td><?php echo $this->pageForm->header_title;?></td>
    </tr>

    <tr>
        <td>H1 tag: *</td>
        <td><?php echo $this->pageForm->h1_tag;?></td>
    </tr>

    <tr>
        <td>Page URL: *</td>
        <td><?php echo $this->pageForm->url;?></td>
    </tr>

    <tr>
        <td>Meta Description: </td>
        <td><?php echo $this->pageForm->meta_description;?></td>
    </tr>

    <tr>
        <td>Meta Keywords: </td>
        <td><?php echo $this->pageForm->meta_keywords;?></td>
    </tr>

    <tr>
        <td>Short Description: *</td>
        <td><?php echo $this->pageForm->short_description;?></td>
    </tr>

    <tr>
        <td colspan="2"><a href="<?php echo $this->websiteUrl;?>backend_template/list?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=200&width=300&modal=true"
                           title="add a caption to title attribute / or leave blank" class="thickbox">Open iFrame Modal</a></td>
         <td>
            <a href="<?php echo $this->websiteUrl;?>backend_template/list?placeValuesBeforeTB_=savedValues&TB_iframe=true&height=200&width=300&modal=true" onclick="javascript:getDataFromAddPage()" title="Select Template For Page" class="thickbox" > TEST FORM  </a>
         </td>
    </tr>

    <tr>
        <td>Featured: </td>
        <td><?php echo $this->pageForm->featured;?></td>
    </tr>

    <tr>
        <td>Mark as 404: </td>
        <td><?php echo $this->pageForm->is_404page;?></td>
    </tr>

    <tr>
        <td>Show in Navigation Menu: </td>
        <td><?php echo $this->pageForm->in_navmain;?></td>
    </tr>

    <tr>
        <td>Show in Static Menu:</td>
        <td><?php echo $this->pageForm->in_navstatic;?></td>
    </tr>

    <tr>
        <td><?php echo $this->pageForm->submit;?></td>
        <td><?php echo $this->pageForm->button_close;?></td>
    </tr>

</table>
1 голос
/ 11 февраля 2009

Я написал несколько подклассов для Zend_Form и декораторов, чтобы сделать макет формы в

0 голосов
/ 23 февраля 2009

Первый совет Шона МакСомета - это путь для меня. Я всегда думал, что делать <?php echo $this->form ?> для визуализации формы слишком волшебно. Я сделаю еще один шаг вперед и буду визуализировать отдельные декораторы, а не отдельные элементы, используя магические методы $element->renderDecorator(). Таким образом, вам не придется беспокоиться о порядке, в котором вы определили свои декораторы. Вам просто нужно, чтобы они были там, и вам не нужно будет добавлять эти надоедливые, не интуитивно понятные HtmlTag декораторы. Я сделал сообщение в блоге об этом .

0 голосов
/ 11 февраля 2009

Я не уверен, что Zend уже имеет эту функцию, но быстрое решение - расширить класс, заставить его принимать HTML-шаблон.

Например:

<?php
$form = new zend_form_whatever($field_list + $validators + $template);
echo $form;
?>

шаблон:

<form id="my_custom_form">
    <label>{label.email}</label>
    {input.email}
    <span class="red">{error.email}</span>

    <div>
        {label.password}
        {error.password}
        {input.password}
    </div>

    <div class="purple">{input.submit}<div>
</form>
...