Tôi đã cố gắng và cuối cùng, không thể tự mình đạt được điều này bằng cách sử dụng cùng một cách tiếp cận. Dường như cách dễ nhất để thực hiện việc này là:
...
$submit->setLabel('<span>My Button</span>');
...
Tuy nhiên, khoảng thời gian sẽ được thoát. Đó là hoàn toàn có thể tắt thoát của một trang trí lable, tuy nhiên, thêm một trang trí nhãn ám chỉ rằng sản lượng không đúng cách, ví dụ:
$decorator = array(
array('ViewHelper'),
array('HtmlTag', array('tag' => 'li')),
array('Label', array('escape' => false))
);
$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('<span>My Button</span>');
$submit->setDecorators($decorator);
$submit->setAttrib('type', 'submit');
... renders:
<label for="submit" class="optional"><span>My Button</span></label>
<li>
<button name="submit" id="submit" type="submit"><span>My Button</span></button>
</li>
... mà , ngoài việc ngữ nghĩa sai (dễ sửa chữa), vẫn còn thoát khỏi các thẻ span bên trong phần tử.
Vì vậy, bạn sẽ làm gì?
Tôi nghĩ rằng cách tiếp cận tốt nhất (và đây là lời khuyên của tôi khi kiểm soát chặt chẽ hiển thị Zend_Form) là sử dụng trang trí ViewScript.
$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('My Button');
$submit->setDecorators(array(array('ViewScript', array('viewScript' => '_submitButton.phtml'))));
$submit->setAttrib('type', 'submit');
... sau đó trong _submitButton.phtml xác định như sau:
<li>
<?= $this->formLabel($this->element->getName(), $this->element->getLabel()); ?>
<button
<?php
$attribs = $this->element->getAttribs();
echo
' name="' . $this->escape($this->element->getName()) . '"' .
' id="' . $this->escape($this->element->getId()) . '"' .
' type="' . $this->escape($attribs['type']) . '"';
?>
<?php
$value = $this->element->getValue();
if(!empty($value))
{
echo ' value="' . $this->escape($this->element->getValue()) . '"';
}
?>
>
<span>
<?= $this->escape($this->element->getLabel()); ?>
</span>
</button>
</li>
Các _submitButton.phtml tập tin sẽ cần phải được trong một thư mục xem kịch bản (bạn có thể là tốt nhất bổ sung một trang cụ thể cho trình trang trí biểu mẫu của bạn bằng cách sử dụng $view->addScriptPath('/path/to/my/form/decorators')
).
Điều này sẽ hiển thị những gì bạn đang tìm kiếm. Tôi chỉ mới bắt đầu xem xét trình trang trí ViewScript do các vấn đề linh hoạt mà tôi đang gặp phải trong công việc.Bạn sẽ nhận thấy rằng kịch bản của tôi không phải là linh hoạt, và chắc chắn không phải là trong BNF, cho tất cả các thành viên có thể được điền vào đối tượng phần tử. Điều đó nói rằng, đó là một sự khởi đầu và nó giải quyết vấn đề của bạn.
Cảm ơn bạn đã trả lời rất chi tiết. Tôi biết về trình trang trí ViewScript, nhưng tôi không biết nó có thể được áp dụng cho các phần tử riêng lẻ. – leek
Điều này rất hữu ích! – markus