2011-08-11 17 views
5

मैं अपने प्रपत्र तत्व में डीबी से आने वाले डेटा की एक तालिका के लिए, की तरह लग रही करना चाहते हैं निम्नलिखित:Zend_Form: चेक बॉक्स के साथ डेटा तालिका

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

ऐसा लगता है, कई पंक्तियों का चयन करने की अनुमति होगी मल्टीचेकबॉक्स तत्व।

<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... --> 

मैं हाथ से यह कर सकते हैं, लेकिन का उपयोग कर Zend_Form मुझे प्रपत्र को भरने के लिए अनुमति होगी, आसानी से और करने के लिए मूल्यों को पुनः प्राप्त:

यहाँ मार्कअप की तरह मैं चाहूँगा है सत्यापन है मेरे पास मेरे रूप में अन्य सामान्य तत्व हैं।

Zend_Form के साथ इसे कैसे प्राप्त किया जाए इस पर कोई विचार है? शायद एक कस्टम तत्व और सजावट?

धन्यवाद। यदि आवश्यक हो तो अधिक जानकारी के लिए पूछें।

यह सवाल संबंधित प्रतीत होती है: Zend_Form: Database records in HTML table with checkboxes

मार्क

उत्तर

5

ठीक है, तो क्या यह उत्तर की एक लंबी तरह होने जा रहा है

फार्म

<?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 
    } 
} 

नियंत्रक

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

    // ... processing logics 

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

देखें

<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> 

यहां कुछ चीजें हो रही हैं।
मैं प्रपत्र वस्तु से बाहर पॉप्यूलेट मूल्यों को प्राप्त:

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

मैं ऊपर प्रतिक्रिया में

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

संपादित सरणी के आधार पर के रूप में चिह्नित किया है या नहीं प्रत्येक बॉक्स का निशान बी टिप्पणी करने के लिए/सी टिप्पणियाँ पूर्व का समर्थन नहीं करते ब्लाकों

$element->setOptions(

या

$element->setMultiOptions(

केवल कुंजी => मूल्य जोड़े स्वीकार करता है, इसलिए आप जो भी महत्वपूर्ण मूल्य जोड़ों के बाहर करना चाहते हैं वह थोड़ा विचित्र होगा। अपने कार्यक्रम आप, एक सरणी multiCheckbox रूप में एक ही कुंजी का उपयोग करता है देखने के लिए एक और चर गुजर सकता है की अनुमति देता है यदि ऐसा है तो

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

और उसके बाद दृश्य प्रयोग में foreach में

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

भी, मैं कैनव ने अधिक दर्शक का इस्तेमाल किया। मैं अपने बिंदु को पाने के लिए जल्दी में था। टीएलडीआर: हाथ से अपना एचटीएमएल लिखें –

+0

इस लंबे उत्तर के लिए बहुत बहुत धन्यवाद! मैंने अभी तक इसका परीक्षण नहीं किया है, लेकिन अगर मुझे टेबल में दो से अधिक कॉलम रखना है तो क्या होगा? मैं देखता हूं कि आप संख्या और नाम के लिए $ कुंजी और $ मान का उपयोग करते हैं। मुझे लगता है कि लेबल में एक विभाजक करेगा। –

+1

मैंने अपने उत्तर के नीचे पाठ का एक ब्लॉक जोड़ा, इसे –

संबंधित मुद्दे