2009-03-13 28 views
5

Tôi nhận thấy rằng tôi nên có thể thực hiện việc này, nhưng tôi có thể nói gì, tôi không tải mã này. Tôi đã rtfm'ed cho đến khi đôi mắt của tôi chiên. Tôi học tốt nhất bằng các ví dụ, chứ không phải là những giải thích sâu sắc mà tài liệu của Zend đưa ra, hoặc phản ứng "sử dụng trang trí" điển hình mà loại câu hỏi này thường tạo ra. Những gì tôi cần đánh dấu là như thế này:Biểu mẫu Zend: Thêm liên kết ở bên phải của trường văn bản

<dt> 
    <label for="name">Name</label> 
</dt> 
<dd> 
    <input type="text" name="name" id="name" value=""> 
    <a href="#">My Link</a> 
</dd> 

của nó tất cả vani, ngoại trừ LINK thêm sau khi đầu vào. Có, bên trong dd, ngay bên cạnh liên kết, và đó là điều tôi không thể xảy ra.

Đây là (sửa đổi đôi chút) mã mà tôi sử dụng để tạo ra mã HTML trên

$name = new Zend_Form_Element_Text('name'); 
$name->setLabel('Name');   
$this->addElements($name); 
$this->addDisplayGroup(array('name'), 'people'); 

Bất kỳ mã ví dụ hoặc giải thích tốt hơn sẽ làm cho Noob này rất rất hạnh phúc.

Chúc mừng!

Trả lời

24

Xem trả lời của tôi this thread trong danh sách gửi thư và số blog post về việc này. Về cơ bản nó giống như quá trình mà Aaron đã mô tả.

Bạn cũng có thể đi theo con đường trang trí, sử dụng tài sản mô tả để giữ liên kết (không kiểm tra):

<?php 
$foo = new Zend_Form_Element_Text('name'); 
$foo->setLabel('Name') 
    ->setDescription('<a href="#">Link</a>') 
    ->setDecorators(array(
     'ViewHelper', 
     array('Description', array('escape' => false, 'tag' => false)), 
     array('HtmlTag', array('tag' => 'dd')), 
     array('Label', array('tag' => 'dt')), 
     'Errors', 
    )); 
$form->addElement($foo); 

Tôi không chắc chắn nếu 'tag'=>false trong Description trang trí sẽ làm việc, nhưng nó có giá trị một shot. Xin lỗi tôi không thể kiểm tra điều này bây giờ, hộp phát triển của tôi bị hỏng vào lúc này. Nếu không thành công, hãy thử phương pháp hiển thị trang trí thủ công được mô tả trong hai liên kết đó.

+0

Hình như tôi đã gần gũi. Điều này hoạt động hoàn hảo. Cảm ơn bạn! –

5

Tôi nghĩ rằng bạn đang tìm kiếm để kiểm soát đầy đủ các trang trí thông qua một Xem Script:

Zend Framework Manual

Về cơ bản, bạn muốn thiết lập thuộc tính viewScript của nguyên tố này đến đường dẫn đến kịch bản của bạn, và sau đó chuyển bất kỳ thông tin bổ sung nào bạn muốn gửi, có lẽ là linkHref hoặc tiêu đề của liên kết bạn đang xây dựng.

$name = new Zend_Form_Element_Text('name'); 
$name->setLabel('Name'); 
$name->viewScript = 'path/to/viewScript.phtml'; 
$name->decorators = array('ViewScript', array('linkHref' => '#', 
               'linkTitle' => 'My Link'); 
$this->addElements($name); 
$this->addDisplayGroup(array('name'), 'people'); 

Sau đó viewScript của bạn sẽ trông như thế này, tôi không chắc chắn như thế nào tất cả các Helpers nằm trong một thể hiện của một Zend_Form_Element, nhưng nó kinda như thế này:

<dt><?= $this->formLabel($this->element->getName(), 
        $this->element->getLabel()) ?></dt> 
<dd><?= $this->{$this->element->helper}(
        $this->element->getName(), 
        $this->element->getValue(), 
        $this->element->getAttribs() 
       ) ?> 
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a> 
<?= $this->formErrors($this->element->getMessages()) ?> 

</dd> 

Đôi khi, thực hiện nó trong một viewScript nó tốt hơn bởi vì nó cung cấp cho bạn 100% kiểm soát của phần tử, trong khi vẫn còn khá DRY.

+0

Thank bạn - điều này sẽ làm việc hoàn hảo trong các hình thức phức tạp nhất –

1

Chỉ cần thêm một số hỗ trợ cho bài đăng của Aaron, sau hàng giờ bẻ khóa để làm điều gì đó thực sự đơn giản (điều này dường như phủ nhận điểm có khung), nếu bạn thấy rằng điều này không hoạt động trên hộp kiểm của bạn thì là vì bạn phải sử dụng điều này trong .phtml của bạn (dựa trên ví dụ của Aaron):

<dt><?= $this->formLabel($this->element->getName(), 
        $this->element->getLabel()) ?></dt> 
<dd><?= $this->{$this->element->helper}(
        $this->element->getName(), 
        $this->element->getValue(), 
        $this->element->getAttribs(), 
        $this->element->options 
       ) ?> 
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a> 
<?= $this->formErrors($this->element->getMessages()) ?> 

</dd> 

TÙY CHỌN! TÙY CHỌN! TÙY CHỌN! Bạn đã ở đâu khi tôi cần tìm bạn ?!Vì vậy, đừng quên thêm dòng sau vào helper của bạn nếu bạn đang sử dụng hộp kiểm sau:

$this->element->options 

này hoạt động tốt cho việc thêm một Điều khoản và Điều kiện checkbox với Zend_Form_Element_Checkbox (đó là cho SEO)

Các vấn đề liên quan