1

3 개의 하위 양식이 삽입 된 양식이 있습니다. 필요한 경우이 하위 양식을 작성하는 방법에 대한 코드를 게시 할 수 있지만 꽤 많은 부분이 있으므로 여기에 가장 관련있는 부분을 넣을 것입니다.제출 단추가 작동을 멈추게하는 하위 폼이있는 Zend 양식

첫째 형태의 init() 기능 :

public function init() { 

     $redirect = new Zend_Form_Element_Hidden('redirect'); 

     $categories = new HPU_Form_Element_TreeView('tree'); 
     $categories->setMultiOptions($this->categoryList); 
     $categories->setLabel('Home') 
        ->setValue($this->selectedCategoryList) 
        ->setRequired(true); 

     $id = new Zend_Form_Element_Hidden('id'); 
     $id->addFilter('Int'); 

     $title = new Zend_Form_Element_Text('title'); 
     $title->setLabel('Title') 
       ->setRequired(true); 

     $subtitle = new Zend_Form_Element_Text('subtitle'); 
     $subtitle->setLabel('Subtitle') 
        ->setRequired(true); 

     $language_id = new Zend_Form_Element_Select("language_id"); 
     $language_id->setLabel('Language') 
        ->setRequired(true) 
        ->addMultiOption("" , "Choose a language"); 

     $table = new Content_Model_DbTable_Language(); 
     foreach ($table->fetchAll() as $language) { 
      $language_id->addMultiOption($language->id, $language->name); 
     } 

     $start_date = new ZendX_JQuery_Form_Element_DatePicker('start_date'); 
     $start_date->setLabel('Start date') 
        ->setValue(date('j-m-Y')) 
        ->setRequired(true) 
        ->setAttrib('jQueryParams', array('dateFormat' => 'dd-mm-yy')); 

     $expiration_date = new ZendX_JQuery_Form_Element_DatePicker('expiration_date'); 
     $expiration_date->setLabel('Expiration date') 
         ->setAttrib('jQueryParams', array('dateFormat' => 'dd-mm-yy')); 

     $status = new Zend_Form_Element_Select("status"); 
     $status->setLabel('Status') 
       ->setRequired(true) 
       ->addMultiOptions(array("1" => "Concept", "2" => "Ready to publish", "3" => "Published", 
       "4" => "Offline")); 

     $meta_description = new Zend_Form_Element_Textarea('meta_description'); 
     $meta_description->setLabel('Meta description') 
          ->setAttrib('rows', '4'); 

     $meta_keywords = new Zend_Form_Element_Textarea('meta_keywords'); 
     $meta_keywords->setLabel('Meta keywords') 
         ->setAttrib('rows', '4'); 

     $introductory_text = new HPU_Form_Element_Tinymce('introductory_text'); 
     $introductory_text->setLabel('Introductory text'); 

     $content_text = new HPU_Form_Element_Tinymce('content_text'); 
     $content_text->setLabel('Follow up text'); 

     $submit_button = new Zend_Form_Element_Submit('submit_button'); 

     $this->setDecorators(array('ViewHelper')); 
     $this->setElementDecorators(array('ViewHelper')); 
     $this->setDecorators(array('FormElements', 'Form')); 

     $this->addElements(array($redirect, $categories, $id, $title, $subtitle, $language_id, $start_date, $expiration_date, $status)); 

     $this->addEnclosedItems(); 
     $this->addEyecatcher(); 
     $this->addYoutubeItems(); 

     $this->addElements(array($meta_description, $meta_keywords, $introductory_text, $content_text, $submit_button)); 

    } 

당신은 내가 요소의 수를 선언 한 후 addElements() 기능을 사용하여 양식에 추가 볼 수 있듯이. 나는 그들의 각각의 기능 addEnclosedItems(), 다음 addYoutubeItems(), addEyecatchers()에 의해 생성되는 제 3 하위 폼 (나는 요소의 마지막 부분을 추가 싶어하기 때문에 나는 두 부분으로이 분할했다.

을 다음 내가 얻을 결과 HTML :

<form id="content" enctype="multipart/form-data" action="" method="post"> 

<dt id="redirect-label">&#160;</dt> 

<dd id="redirect-element"> 

<input type="hidden" name="redirect" value="" id="redirect" /></dd> 

<dt id="tree-label"><label for="tree" class="required">Home</label></dt> 

<dd id="tree-element"> 

<ul id="tree"><li><input value="72" id="tree-72" name="tree[]" type="hidden" /><label for="tree-72" class="parent">Test Categorie 1</label><ul id="tree"><li><input checked="checked" value="75" id="tree-75" name="tree[]" type="checkbox" /><label for="tree-75" class="child">Test Categorie 1.1</label></li><li><input value="76" id="tree-76" name="tree[]" type="checkbox" /><label for="tree-76" class="child">Test Categorie 1.2</label></li></ul></li><li><input value="73" id="tree-73" name="tree[]" type="hidden" /><label for="tree-73" class="parent">Test Categorie 2</label><ul id="tree"><li><input value="77" id="tree-77" name="tree[]" type="hidden" /><label for="tree-77" class="parent">Test Categorie 2.1</label><ul id="tree"><li><input value="80" id="tree-80" name="tree[]" type="checkbox" /><label for="tree-80" class="child">Test category 2.1.1</label></li></ul></li><li><input checked="checked" value="78" id="tree-78" name="tree[]" type="checkbox" /><label for="tree-78" class="child">Test Categorie 2.2</label></li><li><input value="79" id="tree-79" name="tree[]" type="checkbox" /><label for="tree-79" class="child">Test Categorie 2.3</label></li></ul></li><li><input value="74" id="tree-74" name="tree[]" type="checkbox" /><label for="tree-74" class="child">Test Categorie 3</label></li><li><input value="86" id="tree-86" name="tree[]" type="hidden" /><label for="tree-86" class="parent">Test Category 4</label><ul id="tree"><li><input value="87" id="tree-87" name="tree[]" type="checkbox" /><label for="tree-87" class="child">Test Category 4.1</label></li></ul></li></ul></dd> 

<dt id="id-label">&#160;</dt> 

<dd id="id-element"> 

<input type="hidden" name="id" value="57" id="id" /></dd> 

<dt id="title-label"><label for="title" class="required">Title</label></dt> 

<dd id="title-element"> 

<input type="text" name="title" id="title" value="Test Content 2" /></dd> 

<dt id="subtitle-label"><label for="subtitle" class="required">Subtitle</label></dt> 

<dd id="subtitle-element"> 

<input type="text" name="subtitle" id="subtitle" value="Test Content 2" /></dd> 

<dt id="language_id-label"><label for="language_id" class="required">Language</label></dt> 

<dd id="language_id-element"> 

<select name="language_id" id="language_id"> 
    <option value="" label="Choose a language">Choose a language</option> 
    <option value="1" label="Dutch" selected="selected">Dutch</option> 
    <option value="2" label="Russian">Russian</option> 
</select></dd> 

<dt id="start_date-label"><label for="start_date" class="required">Start date</label></dt> 

<dd> 

<input type="text" name="start_date" id="start_date" value="0000-00-00 00:00:00" /></dd> 

<dt id="expiration_date-label"><label for="expiration_date" class="optional">Expiration date</label></dt> 

<dd> 

<input type="text" name="expiration_date" id="expiration_date" value="0000-00-00 00:00:00" /></dd> 

<dt id="status-label"><label for="status" class="required">Status</label></dt> 

<dd id="status-element"> 

<select name="status" id="status"> 
    <option value="1" label="Concept" selected="selected">Concept</option> 
    <option value="2" label="Ready to publish">Ready to publish</option> 
    <option value="3" label="Published">Published</option> 
    <option value="4" label="Offline">Offline</option> 
</select></dd> 

<dt id="enclosedItem-label">&#160;</dt><dd id="enclosedItem-element"><fieldset id="fieldset-enclosedItem"><dl> 

<dt id="addEnclosedItem-label">&#160;</dt><dd id="addEnclosedItem-element"> 

<button name="enclosedItem[addEnclosedItem]" id="enclosedItem-addEnclosedItem" type="button">add enclosed item</button></dd></dl></fieldset></dd> 

<div class="eyecatcher_item"><form id="eyecatcher" enctype="application/x-www-form-urlencoded" action="" method="post"> 

<dt id="eyecatcher-eyecatcher-label">&#160;</dt> 

<dd id="eyecatcher-eyecatcher-element"> 

<img src='/fm/Tulips.jpg'/></dd> 

<dt id="deleteEyecatcher59-label">&#160;</dt><dd id="deleteEyecatcher59-element"> 

<button name="eyecatcher[deleteEyecatcher59]" id="eyecatcher-deleteEyecatcher59" type="button" class="delete" itemid="59">delete</button></dd></form></div> 

<dt id="youtube-label">&#160;</dt><dd id="youtube-element"><fieldset id="fieldset-youtube"><dl> 

<dt id="addYoutube-label">&#160;</dt><dd id="addYoutube-element"> 

<button name="youtube[addYoutube]" id="youtube-addYoutube" type="button">add youtube item</button></dd></dl></fieldset></dd> 

<dt id="meta_description-label"><label for="meta_description" class="optional">Meta description</label></dt> 

<dd id="meta_description-element"> 

<textarea name="meta_description" id="meta_description" rows="4" cols="80"></textarea></dd> 

<dt id="meta_keywords-label"><label for="meta_keywords" class="optional">Meta keywords</label></dt> 

<dd id="meta_keywords-element"> 

<textarea name="meta_keywords" id="meta_keywords" rows="4" cols="80"></textarea></dd> 

<dt id="introductory_text-label"><label for="introductory_text" class="optional">Introductory text</label></dt> 

<dd id="introductory_text-element"> 

<textarea name="introductory_text" id="introductory_text" class="tinyMCE" rows="24" cols="80"></textarea></dd> 

<dt id="content_text-label"><label for="content_text" class="optional">Follow up text</label></dt> 

<dd id="content_text-element"> 

<textarea name="content_text" id="content_text" class="tinyMCE" rows="24" cols="80"></textarea></dd> 

<dt id="submit_button-label">&#160;</dt><dd id="submit_button-element"> 

<input type="submit" name="submit_button" id="submit_button" value="Save" /></dd></form> 

는 지금까지 내가 하위 폼을 추가하기 때문에 더 이상 제출하지 않습니다 것을 제외하고 완벽하게 작동

누구나/알고있는 문제가 어떤 조언을 이해할 수있을 것이다 무슨 볼 일이.?)

업데이트 : 나는 Zend_Form_Subform을 완벽하게 확장 한 후 반환 된 HTML 코드를 업데이트했습니다. 또한이 함수가 실행되지 않을 때마다 양식이 작동하므로 addEyecatcher 함수의 어딘가에 문제가 있음을 알 수있었습니다. 여기

는 폼 작성 addEyecatcher 함수이다

공용 기능을 addEyecatcher() {$ eyecatcher_form = 새로운 Zend_Form_SubForm();

if(!$this->eyecatcher_image) { 
    $eyecatcher = new Zend_Form_Element_File('eyecatcher'); 
    $eyecatcher->setLabel('Eyecatcher') 
        ->addValidator('Extension', false, 'jpg') 
        ->setDestination(Zend_Registry::get('config')->content->tempFysicalLocation); 
    $eyecatcher_form->addElement($eyecatcher); 
} else { 
    $this->addPrefixPath('HPU_Form_Element', 'HPU/Form/Element/', 'Element'); 
    $eyecatcher = new HPU_Form_Element_Note('eyecatcher'); 
    $source = Zend_Registry::get('config')->content->imageRelativeLocation . $this->eyecatcher_image['image_url']; 
    $eyecatcher->setValue("<img src='{$source}'/>"); 
    $eyecatcher_form->addElement($eyecatcher); 
    $eyecatcher_form->addElement('button', "deleteEyecatcher{$this->eyecatcher_image['id']}", array('label' => 'delete', 'class' => 'delete', 'itemid' => $this->eyecatcher_image['id'])); 
} 
$eyecatcher_form->setDecorators(array("ViewHelper")); 
$eyecatcher_form->setDecorators(array("FormElements", "Form", array('HtmlTag', array('tag'=>'div' , 'class' => 'eyecatcher_item')))); 

$this->addSubForm($eyecatcher_form, 'eyecatcher'); 

return $eyecatcher_form; 

} 지금까지 도움을

덕분에, 난 이미이 문제 :

답변

2

하위 폼이 자신의 <form> 태그를 포함하지 않아야 해결에 더 몇 단계를 입수했습니다. 그것이 제출 버튼을 깨는 것입니다. 귀하의 하위 양식이 Zend_Form_SubForm 인 것을 다시 확인할 수 있습니까? 그렇다면 하위 양식 메소드 중 하나에 대한 코드 (또는 관련 부분)를 게시하십시오.

편집 : 수동 (<form> .. </form>와 함께 랩) 하위 폼에 폼 장식으로 추가되기 때문에 당신은 여전히 ​​당신의 눈 포수 양식에 대한 두 번째 폼 태그를 가지고있다. 이에 선 당신의 세트 데코레이터를 변경해보십시오 :

$eyecatcher_form->setDecorators(array("FormElements", array('HtmlTag', array('tag'=>'div' , 'class' => 'eyecatcher_item')))); 
+0

을 나는 아직도 내가 지금 Zend_Form_Subform을 확장을 변경, 혼란 실제로이를했고, 당신이이 하위 폼의

태그를 제거했다 말했듯이 그것은 여전히 ​​작동하는 그대를 거부 . –

+0

내 편집 된 답변보기 –

+0

물론, 나는 그것을 놓친 것을 믿을 수 없습니다. 그것은 지금 작동 :) 감사합니다 많이! –