Рендеринг только тега <form> - PullRequest
3 голосов
/ 15 июля 2010

Есть ли способ, которым я могу отобразить ТОЛЬКО начальный <form> тег объекта Zend_Form?

print $this->registerForm->renderForm();

отображает <form></form>, и мне нужно только <form>

Редактировать:

После возможного решения Asleys я написал это для класса My_Form

public function renderFormOpen() {
    return str_replace('</form>', '', $this->renderForm());
}

public function renderFormClose() {
    return '</form>';
}

Все еще ищу способ ZF сделать что-то, хотя я не думаю, что есть - послечерез код в библиотеке ZF.

Ответы [ 3 ]

5 голосов
/ 21 июля 2010

Вы можете написать собственный декоратор форм, который использует собственный помощник вида, который отображает только открытый тег формы Но я думаю, что это было бы излишним.
Просто жестко закодируйте теги формы и заполните атрибуты данными, предоставленными переменной формы в вашем представлении.

<!--in your view-template -->
<form action="<?php echo $this->form->getAction() ?>"
      enctype="<?php echo $this->form->getEnctype() ?>"
      method="<?php echo $this->form->getMethod() ?>"
      id="<?php echo $this->form->getId() ?>"
      class="<?php echo $this->form->getAttrib('class') ?>" >

    <!--in case your products are represented as elements -->
    <?php foreach ($this->form->getElements() as $element): ?>
       <?php echo $element ?>
    <?php endforeach; ?>

    <!--in case your products are represented as displayGroups -->
    <?php foreach ($this->form->getDisplayGroups() as $displayGroup): ?>
       <?php echo $displayGroup ?>
    <?php endforeach; ?>

    <!--in case your products are represented as subforms -->
    <?php foreach ($this->form->getSubforms() as $subform): ?>
       <?php echo $subform ?>
    <?php endforeach; ?>

    <!--in case your products are rendered by a view helper -->
    <?php foreach ($this->products as $product): ?>
       <?php echo $this->renderProduct($product) ?>
    <?php endforeach; ?>
</form>

Просто для удовольствия, излишний путь

// Get your products form
$form = new Form_Products();
// Add custom prefix path
$form->addPrefixPath('Foobar_Form_Decorator', 'Foobar/Form/Decorator', 'decorator');
// Set OnlyOpenTagForm-ViewHelper for FormDecorator
$form->getDecorator('Form')->setHelper('OnlyOpenTagForm');

// copy Zend/View/Helper/Form to Foobar/Form/Decorato/OnlyOpenTagForm.php
// In OnlyOpenTagForm.php
//   replace Zend_View_Helper_Form with Foobar_View_Helper_OnlyOpenTagForm
//   replace method "form" with onlyOpenTagForm"
//   replace
if (false !== $content) {
    $xhtml .= $content
           .  '</form>';
}
//   with:        
if (false !== $content) {
    $xhtml .= $content;
}

Готово! - Java-ребята будут любить его;)

4 голосов
/ 10 января 2012

Вы можете визуализировать только открытый тег формы, передав false в декоратор формы следующим образом:

<?php echo $this->form->renderForm(false) ?>

Что будет выводить что-то вроде:

<form id="post" enctype="multipart/form-data" method="post" action="/post">

Кроме того, вы можете передать строку декоратору формы, которая будет заключена в теги формы, например:

<?php echo $this->form->renderForm('Some Text') ?>

Который выводит что-то вроде:

<form id="post" enctype="multipart/form-data" method="post" action="/simchas/post">Some Text</form>

Надеюсь, это поможет ...

0 голосов
/ 24 августа 2011

Вы можете сделать что-то вроде этого:

echo $this->form->getDecorator('Form')->setElement($this->form)->render(false);
...