Note that there are some explanatory texts on larger screens.

plurals
  1. POZend Form with Subforms causing the submit button to stop working
    primarykey
    data
    text
    <p>I have a form which has 3 subforms inserted into it. If needed I can post the code of how it builds these subforms but since it pretty huge all together I'll just put most relevant parts here.</p> <p>Firstly the form's <code>init()</code> function:</p> <pre><code>public function init() { $redirect = new Zend_Form_Element_Hidden('redirect'); $categories = new HPU_Form_Element_TreeView('tree'); $categories-&gt;setMultiOptions($this-&gt;categoryList); $categories-&gt;setLabel('Home') -&gt;setValue($this-&gt;selectedCategoryList) -&gt;setRequired(true); $id = new Zend_Form_Element_Hidden('id'); $id-&gt;addFilter('Int'); $title = new Zend_Form_Element_Text('title'); $title-&gt;setLabel('Title') -&gt;setRequired(true); $subtitle = new Zend_Form_Element_Text('subtitle'); $subtitle-&gt;setLabel('Subtitle') -&gt;setRequired(true); $language_id = new Zend_Form_Element_Select("language_id"); $language_id-&gt;setLabel('Language') -&gt;setRequired(true) -&gt;addMultiOption( "" , "Choose a language"); $table = new Content_Model_DbTable_Language(); foreach ($table-&gt;fetchAll() as $language) { $language_id-&gt;addMultiOption($language-&gt;id, $language-&gt;name); } $start_date = new ZendX_JQuery_Form_Element_DatePicker('start_date'); $start_date-&gt;setLabel('Start date') -&gt;setValue(date('j-m-Y')) -&gt;setRequired(true) -&gt;setAttrib('jQueryParams', array('dateFormat' =&gt; 'dd-mm-yy')); $expiration_date = new ZendX_JQuery_Form_Element_DatePicker('expiration_date'); $expiration_date-&gt;setLabel('Expiration date') -&gt;setAttrib('jQueryParams', array('dateFormat' =&gt; 'dd-mm-yy')); $status = new Zend_Form_Element_Select("status"); $status-&gt;setLabel('Status') -&gt;setRequired(true) -&gt;addMultiOptions(array("1" =&gt; "Concept", "2" =&gt; "Ready to publish", "3" =&gt; "Published", "4" =&gt; "Offline")); $meta_description = new Zend_Form_Element_Textarea('meta_description'); $meta_description-&gt;setLabel('Meta description') -&gt;setAttrib('rows', '4'); $meta_keywords = new Zend_Form_Element_Textarea('meta_keywords'); $meta_keywords-&gt;setLabel('Meta keywords') -&gt;setAttrib('rows', '4'); $introductory_text = new HPU_Form_Element_Tinymce('introductory_text'); $introductory_text-&gt;setLabel('Introductory text'); $content_text = new HPU_Form_Element_Tinymce('content_text'); $content_text-&gt;setLabel('Follow up text'); $submit_button = new Zend_Form_Element_Submit('submit_button'); $this-&gt;setDecorators(array('ViewHelper')); $this-&gt;setElementDecorators(array('ViewHelper')); $this-&gt;setDecorators(array('FormElements', 'Form')); $this-&gt;addElements(array($redirect, $categories, $id, $title, $subtitle, $language_id, $start_date, $expiration_date, $status)); $this-&gt;addEnclosedItems(); $this-&gt;addEyecatcher(); $this-&gt;addYoutubeItems(); $this-&gt;addElements(array($meta_description, $meta_keywords, $introductory_text, $content_text, $submit_button)); } </code></pre> <p>As you can see I declare a number of elements and then add them to the form using the <code>addElements()</code> function. However I have split this up into two parts since I wanted my 3 subforms (which are created by their respective functions <code>addEnclosedItems()</code>, <code>addYoutubeItems()</code>, <code>addEyecatchers()</code> and then I add the last part of the elements.</p> <p>As a result I get the following HTML:</p> <pre><code>&lt;form id="content" enctype="multipart/form-data" action="" method="post"&gt; &lt;dt id="redirect-label"&gt;&amp;#160;&lt;/dt&gt; &lt;dd id="redirect-element"&gt; &lt;input type="hidden" name="redirect" value="" id="redirect" /&gt;&lt;/dd&gt; &lt;dt id="tree-label"&gt;&lt;label for="tree" class="required"&gt;Home&lt;/label&gt;&lt;/dt&gt; &lt;dd id="tree-element"&gt; &lt;ul id="tree"&gt;&lt;li&gt;&lt;input value="72" id="tree-72" name="tree[]" type="hidden" /&gt;&lt;label for="tree-72" class="parent"&gt;Test Categorie 1&lt;/label&gt;&lt;ul id="tree"&gt;&lt;li&gt;&lt;input checked="checked" value="75" id="tree-75" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-75" class="child"&gt;Test Categorie 1.1&lt;/label&gt;&lt;/li&gt;&lt;li&gt;&lt;input value="76" id="tree-76" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-76" class="child"&gt;Test Categorie 1.2&lt;/label&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;input value="73" id="tree-73" name="tree[]" type="hidden" /&gt;&lt;label for="tree-73" class="parent"&gt;Test Categorie 2&lt;/label&gt;&lt;ul id="tree"&gt;&lt;li&gt;&lt;input value="77" id="tree-77" name="tree[]" type="hidden" /&gt;&lt;label for="tree-77" class="parent"&gt;Test Categorie 2.1&lt;/label&gt;&lt;ul id="tree"&gt;&lt;li&gt;&lt;input value="80" id="tree-80" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-80" class="child"&gt;Test category 2.1.1&lt;/label&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;input checked="checked" value="78" id="tree-78" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-78" class="child"&gt;Test Categorie 2.2&lt;/label&gt;&lt;/li&gt;&lt;li&gt;&lt;input value="79" id="tree-79" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-79" class="child"&gt;Test Categorie 2.3&lt;/label&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;input value="74" id="tree-74" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-74" class="child"&gt;Test Categorie 3&lt;/label&gt;&lt;/li&gt;&lt;li&gt;&lt;input value="86" id="tree-86" name="tree[]" type="hidden" /&gt;&lt;label for="tree-86" class="parent"&gt;Test Category 4&lt;/label&gt;&lt;ul id="tree"&gt;&lt;li&gt;&lt;input value="87" id="tree-87" name="tree[]" type="checkbox" /&gt;&lt;label for="tree-87" class="child"&gt;Test Category 4.1&lt;/label&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/dd&gt; &lt;dt id="id-label"&gt;&amp;#160;&lt;/dt&gt; &lt;dd id="id-element"&gt; &lt;input type="hidden" name="id" value="57" id="id" /&gt;&lt;/dd&gt; &lt;dt id="title-label"&gt;&lt;label for="title" class="required"&gt;Title&lt;/label&gt;&lt;/dt&gt; &lt;dd id="title-element"&gt; &lt;input type="text" name="title" id="title" value="Test Content 2" /&gt;&lt;/dd&gt; &lt;dt id="subtitle-label"&gt;&lt;label for="subtitle" class="required"&gt;Subtitle&lt;/label&gt;&lt;/dt&gt; &lt;dd id="subtitle-element"&gt; &lt;input type="text" name="subtitle" id="subtitle" value="Test Content 2" /&gt;&lt;/dd&gt; &lt;dt id="language_id-label"&gt;&lt;label for="language_id" class="required"&gt;Language&lt;/label&gt;&lt;/dt&gt; &lt;dd id="language_id-element"&gt; &lt;select name="language_id" id="language_id"&gt; &lt;option value="" label="Choose a language"&gt;Choose a language&lt;/option&gt; &lt;option value="1" label="Dutch" selected="selected"&gt;Dutch&lt;/option&gt; &lt;option value="2" label="Russian"&gt;Russian&lt;/option&gt; &lt;/select&gt;&lt;/dd&gt; &lt;dt id="start_date-label"&gt;&lt;label for="start_date" class="required"&gt;Start date&lt;/label&gt;&lt;/dt&gt; &lt;dd&gt; &lt;input type="text" name="start_date" id="start_date" value="0000-00-00 00:00:00" /&gt;&lt;/dd&gt; &lt;dt id="expiration_date-label"&gt;&lt;label for="expiration_date" class="optional"&gt;Expiration date&lt;/label&gt;&lt;/dt&gt; &lt;dd&gt; &lt;input type="text" name="expiration_date" id="expiration_date" value="0000-00-00 00:00:00" /&gt;&lt;/dd&gt; &lt;dt id="status-label"&gt;&lt;label for="status" class="required"&gt;Status&lt;/label&gt;&lt;/dt&gt; &lt;dd id="status-element"&gt; &lt;select name="status" id="status"&gt; &lt;option value="1" label="Concept" selected="selected"&gt;Concept&lt;/option&gt; &lt;option value="2" label="Ready to publish"&gt;Ready to publish&lt;/option&gt; &lt;option value="3" label="Published"&gt;Published&lt;/option&gt; &lt;option value="4" label="Offline"&gt;Offline&lt;/option&gt; &lt;/select&gt;&lt;/dd&gt; &lt;dt id="enclosedItem-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="enclosedItem-element"&gt;&lt;fieldset id="fieldset-enclosedItem"&gt;&lt;dl&gt; &lt;dt id="addEnclosedItem-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="addEnclosedItem-element"&gt; &lt;button name="enclosedItem[addEnclosedItem]" id="enclosedItem-addEnclosedItem" type="button"&gt;add enclosed item&lt;/button&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/fieldset&gt;&lt;/dd&gt; &lt;div class="eyecatcher_item"&gt;&lt;form id="eyecatcher" enctype="application/x-www-form-urlencoded" action="" method="post"&gt; &lt;dt id="eyecatcher-eyecatcher-label"&gt;&amp;#160;&lt;/dt&gt; &lt;dd id="eyecatcher-eyecatcher-element"&gt; &lt;img src='/fm/Tulips.jpg'/&gt;&lt;/dd&gt; &lt;dt id="deleteEyecatcher59-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="deleteEyecatcher59-element"&gt; &lt;button name="eyecatcher[deleteEyecatcher59]" id="eyecatcher-deleteEyecatcher59" type="button" class="delete" itemid="59"&gt;delete&lt;/button&gt;&lt;/dd&gt;&lt;/form&gt;&lt;/div&gt; &lt;dt id="youtube-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="youtube-element"&gt;&lt;fieldset id="fieldset-youtube"&gt;&lt;dl&gt; &lt;dt id="addYoutube-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="addYoutube-element"&gt; &lt;button name="youtube[addYoutube]" id="youtube-addYoutube" type="button"&gt;add youtube item&lt;/button&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/fieldset&gt;&lt;/dd&gt; &lt;dt id="meta_description-label"&gt;&lt;label for="meta_description" class="optional"&gt;Meta description&lt;/label&gt;&lt;/dt&gt; &lt;dd id="meta_description-element"&gt; &lt;textarea name="meta_description" id="meta_description" rows="4" cols="80"&gt;&lt;/textarea&gt;&lt;/dd&gt; &lt;dt id="meta_keywords-label"&gt;&lt;label for="meta_keywords" class="optional"&gt;Meta keywords&lt;/label&gt;&lt;/dt&gt; &lt;dd id="meta_keywords-element"&gt; &lt;textarea name="meta_keywords" id="meta_keywords" rows="4" cols="80"&gt;&lt;/textarea&gt;&lt;/dd&gt; &lt;dt id="introductory_text-label"&gt;&lt;label for="introductory_text" class="optional"&gt;Introductory text&lt;/label&gt;&lt;/dt&gt; &lt;dd id="introductory_text-element"&gt; &lt;textarea name="introductory_text" id="introductory_text" class="tinyMCE" rows="24" cols="80"&gt;&lt;/textarea&gt;&lt;/dd&gt; &lt;dt id="content_text-label"&gt;&lt;label for="content_text" class="optional"&gt;Follow up text&lt;/label&gt;&lt;/dt&gt; &lt;dd id="content_text-element"&gt; &lt;textarea name="content_text" id="content_text" class="tinyMCE" rows="24" cols="80"&gt;&lt;/textarea&gt;&lt;/dd&gt; &lt;dt id="submit_button-label"&gt;&amp;#160;&lt;/dt&gt;&lt;dd id="submit_button-element"&gt; &lt;input type="submit" name="submit_button" id="submit_button" value="Save" /&gt;&lt;/dd&gt;&lt;/form&gt; </code></pre> <p>So far it works perfectly with the exception that since I added the subforms it will no longer submit.</p> <p>Anyone happen to know/ see what the issue is? Any advice will be appreciated :)</p> <p><strong>UPDATE:</strong> I updated the returned HTML code after propperly extending the Zend_Form_Subform. I have also been able to find out that the issue is somewhere in the addEyecatcher function since the form works whenever this function isn't executed. </p> <p>Here is the addEyecatcher function that creates the subform:</p> <p>public function addEyecatcher() { $eyecatcher_form = new Zend_Form_SubForm();</p> <pre><code>if(!$this-&gt;eyecatcher_image) { $eyecatcher = new Zend_Form_Element_File('eyecatcher'); $eyecatcher-&gt;setLabel('Eyecatcher') -&gt;addValidator('Extension', false, 'jpg') -&gt;setDestination(Zend_Registry::get('config')-&gt;content-&gt;tempFysicalLocation); $eyecatcher_form-&gt;addElement($eyecatcher); } else { $this-&gt;addPrefixPath('HPU_Form_Element', 'HPU/Form/Element/', 'Element'); $eyecatcher = new HPU_Form_Element_Note('eyecatcher'); $source = Zend_Registry::get('config')-&gt;content-&gt;imageRelativeLocation . $this-&gt;eyecatcher_image['image_url']; $eyecatcher-&gt;setValue("&lt;img src='{$source}'/&gt;"); $eyecatcher_form-&gt;addElement($eyecatcher); $eyecatcher_form-&gt;addElement('button', "deleteEyecatcher{$this-&gt;eyecatcher_image['id']}", array('label' =&gt; 'delete', 'class' =&gt; 'delete', 'itemid' =&gt; $this-&gt;eyecatcher_image['id'])); } $eyecatcher_form-&gt;setDecorators(array("ViewHelper")); $eyecatcher_form-&gt;setDecorators(array("FormElements", "Form", array('HtmlTag', array('tag'=&gt;'div' , 'class' =&gt; 'eyecatcher_item')))); $this-&gt;addSubForm($eyecatcher_form, 'eyecatcher'); return $eyecatcher_form; </code></pre> <p>}</p> <p>Thanks for the help so far, i've already gotten a few steps further into solving this problem :)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload