2011-08-11 13 views
5

onay kutularıyla veri tablosu aşağıdadır:Zend_Form: Ben gibi bakarak benim form elemanının DB'den gelen verilerin bir tablo almak istiyorum

+-----+-------------------------+-----------------------+ 
|  | Number     | Name     | 
+-----+-------------------------+-----------------------+ 
| [ ] | 123      | ABC     | 
+-----+-------------------------+-----------------------+ 
| [x] | 456      | DEF     | 
+-----+-------------------------+-----------------------+ 
| [x] | 789      | HIJ     | 
+-----+-------------------------+-----------------------+ 

Sanki, birkaç satır seçmek için izin verecek MultiCheckBox öğesi. ,

<table> 
<thead> 
    <tr> 
    <th>Select</th> 

    <th>Number</th> 

    <th>Name</th> 
    </tr> 
</thead> 

<tr> 
    <td><input type="checkbox" name="subscribers[]" value="1234"></td> 

    <td>1234</td> 

    <td>ABC</td> 
</tr> 

<tr> 
    <td><input type="checkbox" name="subscribers[]" value="375950"></td> 

    <td>375950</td> 

    <td>DEF</td> 
</tr> 

<!-- and so on... --> 

Ben Zend_Form beni formunu doldurmak için izin verecek kullanarak elle yapmak ancak kolayca ve değerleri almak: Burada

istediğim biçimlendirme tür sahip olmaktır geçerliliği var. Formumda başka normal elementler var.

Zend_Form ile bunun nasıl gerçekleştirileceğine dair bir fikriniz var mı? Belki özel bir element ve dekoratör?

Teşekkürler. Gerekirse daha fazla bilgi isteyin.

Bu soru ilişkili görünmektedir: Zend_Form: Database records in HTML table with checkboxes

Marc

cevap

5

Tamam, bu nedenle bu cevabın daha uzun sıralama olacak

Formu

<?php 
class Form_MyTest extends Zend_Form 
{ 
    public function init() 
    { 
    $element = $this->createElement('multiCheckbox', 'subscribers'); 
    $element->setOptions(array('value1' => 'label1', 'value2' => 'label2')); 
    $this->addElement($element); 

    // ... other elements 
    } 
} 

Kontrolör

<?php 
class MyController extends Zend_Controller_Action 
{ 
    public function myTestAction() 
    { 
    $form = new Form_MyTest(); 

    // ... processing logics 

    $this->view->assign('form', $form); 
    } 
} 

01 göster

<form action="<?php echo $this->form->getAction(); ?>" method="<?php echo $this->form->getMethod(); ?>"> 
<table> 
    <thead> 
     <tr> 
      <th>Select</th> 
      <th>Number</th> 
      <th>Name</th> 
     </tr> 
    </thead> 
    <?php $values = $this->form->getElement('subscribers')->getValue(); ?> 
    <?php foreach($this->form->getElement('subscribers')->getMultiOptions() as $key => $value) : ?> 

    <tr> 
     <td><input type="checkbox" name="subscribers[]" id="subscribers-<?php echo $key; ?>" value="<?php echo $key; ?>" <?php echo in_array($key, $values) ? 'checked="checked"':''; ?>/></td> 
     <td><label for="subscribers-<?php echo $key; ?>"><?php echo $key; ?></label></td> 
     <td><label for="subscribers-<?php echo $key; ?>"><?php echo $value; ?></label></td> 
    </tr> 
<?php endforeach; ?> 
</table> 
<!-- rest of form --> 
</form> 

Burada birkaç şey oluyor.
Ben formu nesnenin dışarı önceden doldurulmuş değerleri almak: seçili olup olarak

<?php $values = $this->form->getElement('subscribers')->getValue(); ?> 

Ben B YORUM YANIT

<?php echo in_array($key, $values) ? 'checked="checked"':''; ?> 

EDIT Yukarıdaki dizinin dayalı her bir onay kutusunu işaretleyin/C YORUMLAR PRE DESTEK YOK BLOKLAR

$element->setOptions(

veya

$element->setMultiOptions(

sadece anahtar => değer çiftlerini kabul eder, böylece anahtar değer çiftleri dışında yapmak istediğiniz her şey biraz garip olacaktır. Programınız size görünümüne multiCheckbox aynı anahtarlarını kullanan bir dizi başka bir değişken geçebileceği izin veriyorsa o kadar

$this->view->assign('more_datums', array('value1' => array('col_1' => 'col_1_val'[, ...])));

ve sonra

$this->more_datums[$key]['col_1']
+0

da görünümü kullanımda foreachta, ben daha fazla viewhelpers kullandı. Anlaşmam için acelem vardı. TLDR: html'yi el ile yazınız –

+0

Bu uzun cevap için çok teşekkürler! Henüz test etmedim ama tabloya ikiden fazla sütun koymak zorunda kalırsam ne olur? Sayı ve isim için $ anahtar ve $ değer kullandığınızı görüyorum. Sanırım etiketindeki bir ayırıcı bunu yapardı. –

+1

Cevabımın sonuna bir metin parçası ekledim, kontrol et –

İlgili konular