2010-09-04 9 views
5

Zend_Form_Element_Radio के लिए डिफ़ॉल्ट डेकोरेटरमैं Zend_Form_Element_Radio को कैसे प्रारूपित करूं ताकि लेबल इनपुट का अनुसरण कर सके?

<label for="type_id-1"><input type="radio" name="type_id" id="type_id-1" value="1">Pack</label> 

label टैग लपेटता input टैग है। इसके बजाय मैं की तरह

<input type="radio" name="type_id" id="type_id-1" value="1"><label for="type_id-1">Pack</label> 

मैंने सोचा कि यह तत्व की "लेबल" के साथ क्या हो सकता है देखने के लिए चाहते हैं, लेकिन वह अलग है। निम्नलिखित कोड के साथ भी, मुझे अभी भी रेडियो लपेटने वाला लेबल मिलता है। जब मैं इस फॉर्म कोड का उपयोग करता हूं।

public function init() 
{ 
    parent::init(); 

    $this->setName('createdomain'); 

    $type_id = new Zend_Form_Element_Radio('type_id'); 
    $type_id->setLabel('Please Choose') 
      ->setRequired() 
      ->setMultiOptions(array('m' => "male", 'f' => 'female')); 

    $this->addElement($type_id); 

    $this->setElementDecorators(array(
    'ViewHelper', 
    array('Label',array('placement' => 'APPEND')), 
));  
} 

मैं एक परिणाम

<form id="createdomain" enctype="application/x-www-form-urlencoded" action="" method="post"><dl class="zend_form"> 
<label for="type_id-m"><input type="radio" name="type_id" id="type_id-m" value="m">male</label><br /> 
<label for="type_id-f"><input type="radio" name="type_id" id="type_id-f" value="f">female</label> 
<label for="type_id" class="required">Please Choose</label></dl> 
</form> 

सूचना कैसे एक label टैग input टैग लपेटकर है वहाँ के रूप में इस HTML मिल सकता है?

+0

आप कर सकते हैं के बाद ? –

+0

मैं jQuery UI के बटनसेट का उपयोग करने की कोशिश कर रहा हूं जो लेबल टैग में शामिल नहीं होने के लिए लेबल को इनपुट टैग का पालन करने की अपेक्षा करता है। –

उत्तर

-1

यह jQuery और नहीं Zend फ्रेमवर्क के साथ एक समस्या है। लेबल टैग में तत्व की रैपिंग पूरी तरह मान्य है, यह सिर्फ jQuery यूआई इसका समर्थन नहीं करता है। मैंने bug report पोस्ट किया है।

* अद्यतन उत्तर *

हालांकि मुझे लगता है कि तुम क्या करने की कोशिश कर रहे हैं (जैसा कि आप टिप्पणी की) jQuery यूआई buttonset, जो मैं क्या कर रहा था जब मैं jQuery यूआई बग भर आया है उपयोग करने के लिए है । संक्षेप में आपके पास बग ठीक होने तक दो विकल्प हैं:

1) डिफ़ॉल्ट रेडियो बटन तत्व पर सवारी करने के लिए डेनिस डी के कस्टम व्यू हेल्पर का उपयोग करें।

2) कोड डेनिस डी के साथ ज़ेंड फ्रेमवर्क रेडियो बटन व्यू सहायक को पैच करें। यह लाइन 16 9 (ज़ेंड फ्रेमवर्क संस्करण 1.11.0) पर फ़ाइल Zend_View_Helper_FormRadio फ़ाइल में दिखाई देता है।

सबसे पहले एक नया लेबल बनाने और उसे बंद टैग

// Create the label 
$label = '<label' 
. $this->_htmlAttribs($label_attribs) . ' for="' . $optId . '">' 
. (('prepend' == $labelPlacement) ? $opt_label : '') 
. '<input type="' . $this->_inputType . '"' 
. $opt_label 
. '</label>'; 

दूसरे कोड है कि करने के लिए रेडियो बटन बनाता बदल: तीसरा (लेबल टैग के समापन को दूर आप के रूप में

// Create the radio button 
$radio = '<input type="' . $this->_inputType . '"' 

' पहले से ही इसे किया है) दृश्य सहायक में, बदलें:

. $endTag 
. (('append' == $labelPlacement) ? $opt_label : '') 
. '</label>'; 

और बस इसके साथ प्रतिस्थापित करें:

. $endTag; 

फिर स्थापना स्थिति का उपयोग कर रेडियो और लेबल गठबंधन:

// Combine the label and the radio button 
if ('prepend' == $labelPlacement) { 
    $radio = $label . $radio; 
} else { 
    $radio = $radio . $label; 
} 

और बस हो गया (फिर डेनिस डी दृश्य सहायक में यह किया गया है), लेकिन बदली हुई कैसा दिखना चाहिए (शुरू करने लाइन 169 पर:

// Create the label 
     $label = '<label' 
       . $this->_htmlAttribs($label_attribs) . ' for="' . $optId . '">' 
       . $opt_label 
       . '</label>'; 

     // Create the radio button 
     $radio = '<input type="' . $this->_inputType . '"' 
       . ' name="' . $name . '"' 
       . ' id="' . $optId . '"' 
       . ' value="' . $this->view->escape($opt_value) . '"' 
       . $checked 
       . $disabled 
       . $this->_htmlAttribs($attribs) 
       . $endTag; 

     // Combine the label and the radio button 
     if ('prepend' == $labelPlacement) { 
      $radio = $label . $radio; 
     } else { 
      $radio = $radio . $label; 
     } 
     // add to the array of radio buttons 
     $list[] = $radio; 
+0

मैं मानता हूं, jQuery इनपुट और लेबल के प्रारूप के साथ थोड़ा और अधिक लचीला होना चाहिए, लेकिन मैं jQuery यूआई के आंतों में डाइविंग की तुलना में जेडएफ सजावटी संपादन के लिए बहुत अधिक आत्मविश्वास संपादन कर रहा हूं। –

-1

प्रयास करें:

$this->setElementDecorators(array(
     'ViewHelper', 
     array('Label',array('placement' => 'APPEND')), 
    )); 

बाहर चेक zendcasts video about it इसकी वास्तव में महान। सजावट वास्तव में जेडएफ के साथ जटिल हो सकती है लेकिन यह वीडियो वास्तव में इसे अच्छी तरह से समझाता है।

+0

क्षमा करें, यह या तो नहीं है। इसके साथ, ज़ेंड सिर्फ दो रेडियो के बाद एक और 'लेबल' जोड़ता है। <लेबल के लिए = "टाइप_आईडी -1"><इनपुट प्रकार = "रेडियो" मान = "1" आईडी = "टाइप_आईडी -1" नाम = "टाइप_आईडी"> लड़की
<लेबल के लिए = "type_id-2"><इनपुट प्रकार = "रेडियो" मान = "2" आईडी = "टाइप_आईडी -2" नाम = "टाइप_आईडी"> लड़का <लेबल श्रेणी = "टाइप_आईडी" के लिए "आवश्यक"> चयन करें मुझे यकीन है जवाब रेडियो तत्व के लिए एक अलग ViewHelper असाइन करने में कहीं स्थित है, लेकिन मुझे यकीन नहीं है कि यह कैसे करें। हालांकि मदद के लिए धन्यवाद। –

+0

@nvoyageur आपको अधिक कोड पोस्ट करना चाहिए, क्योंकि जो मैंने अपने उत्तर में पोस्ट किया है वह पूरी तरह से काम करता है और जो भी आप अपने प्रश्न में पूछते हैं वह exaclty करता है। तो कुछ और गलत होना चाहिए। अपना पूरा फॉर्म पोस्ट करें? – Iznogood

+0

मैंने फॉर्म कोड को शामिल करने के लिए प्रश्न अपडेट किया है जिसका उपयोग मैं कर रहा हूं और परिणाम HTML। आप देखेंगे कि 'इनपुट' टैग 'लेबल' टैग से घिरा हुआ है, फिर दोनों बटन बटन बटन सेट के लिए एक लेबल के बाद होते हैं। –

3

मैं एक कस्टम दृश्य MyLib_View_Helper_FormRadio नामित सहायक बनाने के है (इसलिए यदि आपके bootstraping ऐसा नहीं करता है तो यह स्वचालित रूप कहा जाता है), और overrode और लाइन 160 (संस्करण 1.11), जहां रेडियो बटन पर बदल Zend_View_Helper_FormRadio :: formRadio() विधि बनाया गया है।


$label = '<label ' . $this->_htmlAttribs($label_attribs) . ' for="' . $optId . '">' 
       . $opt_label 
       .'</label>'; 

     // Wrap the radios in labels 
     $radio = '<input type="' . $this->_inputType . '"' 
       . ' name="' . $name . '"' 
       . ' id="' . $optId . '"' 
       . ' value="' . $this->view->escape($opt_value) . '"' 
       . $checked 
       . $disabled 
       . $this->_htmlAttribs($attribs) 
       . $endTag; 

     if ('prepend' == $labelPlacement) { 
      $radio = $label . $radio; 
     } 
     elseif ('append' == $labelPlacement) { 
      $radio .= $label; 
     } 
0

शायद मेरे सबसे अच्छे विचार अब तक, इतना है कि यह jQuery यूआई प्रारूप के अनुकूल नहीं हो जाता है, jQuery के भीतर से जेडएफ [Zend फ्रेमवर्क] एचटीएमएल कोड को बदलने के लिए है।

जेडएफ फार्म निर्माण में

:

$this->setElementDecorators(array(
           'ViewHelper', 
           'Errors', 
           array(array('rowElement'=>'HtmlTag'), array('tag'=>'div', 'class'=>'element')), 
           array('Label', array('class'=>'first')), 
     )); 

यहां महत्वपूर्ण बात यह वर्ग के साथ div है = तत्व है कि सभी आदानों लपेटो जाएगा [इतना है कि यह करने के लिए आसान है

यहाँ समाधान है

$(function() { 
    $("div.element > label").each(function() { 
     $('input', this).after('<label for="'+$(this).attr('for')+'"></label>'); 
     $('label', this).text($(this).text()); 
     var input = $('input', this).detach(); 
     var label = $('label', this).detach(); 

     var parent = $(this).parent(); 
     $(this).remove(); 
     input.appendTo(parent); 
     label.appendTo(parent); 
    }); 
    $("div.element").buttonset(); 
}); 
0

यह टी है: jQuery में]

और यहाँ उन्हें जे एस कोड है वह सबसे अच्छी बात आप मुझे मिल गया जो कर सकते हैं हो सकता है, बहुत ज्यादा दर्द हो :))

$radios = new Zend_Form_Element_Radio('notifications'); 
$notificationTypesArray = array(); 
foreach ($notificationTypes as $key => $value) { 
    $notificationTypesArray[$key] = $value 
$radios->removeDecorator('DtDdWrapper'); 
$radios->removeDecorator('HtmlTag'); 
$radios->setSeparator('</td></tr><tr><td class="notification_type_row">'); 
$radios->setDecorators(array(
    'ViewHelper', 
    'Errors', 
    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'notification_type_row')), 
    array('Label', array('tag' => 'span')), 
    array(array('row' => 'HtmlTag'), array('tag' => 'tr')), 
); 
$radios->addMultiOptions($notificationTypesArray);    
$this->addElement($radios); 
संबंधित मुद्दे

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