svn: /pear/peardoc/trunk/en/package/html/html-quickform2/elements/ repeat.xml

[email protected] (Alexey Borzov) Wed, 02 May 2012 07:42:15 +0000
Newsgroups php.pear.doc
Message-ID <[email protected]>
--68c97c55daa48d84176abddea1042fd68215e124
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

avb                                      Wed, 02 May 2012 07:42:15 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=325500

Log:
Added a section on repeat element indexes

Changed paths:
    U   pear/peardoc/trunk/en/package/html/html-quickform2/elements/repeat.xml

Modified: pear/peardoc/trunk/en/package/html/html-quickform2/elements/repeat.xml
===================================================================
--- pear/peardoc/trunk/en/package/html/html-quickform2/elements/repeat.xml	2012-05-02 05:24:51 UTC (rev 325499)
+++ pear/peardoc/trunk/en/package/html/html-quickform2/elements/repeat.xml	2012-05-02 07:42:15 UTC (rev 325500)
@@ -161,7 +161,7 @@
   <para>
    If you are using a named group as a repeat prototype, you may want to use another name structure:
    <literal>group[index][element]</literal> instead of <literal>group[element][index]</literal>. It
-   is possible to do so if you manually put <literal>:idx:</literal> into group's name, Repeat will
+   is possible to do so if you manually put <literal>[:idx:]</literal> into group's name, Repeat will
    not mangle names further if this string is already present in them.
   </para>
   <example>
@@ -208,4 +208,83 @@
    allowing to use one set of radios or checkboxes for all repeated items.
   </para>
  </refsection>
+
+
+ <refsection xml:id="package.html.html-quickform2.elements.repeat.indexes">
+  <info>
+   <title>Indexes of repeated items</title>
+  </info>
+  <para>
+   As was noted in the above example, indexes for repeated items can be automatically discovered
+   from <link linkend="package.html.html-quickform2.values-datasources.datasources-overview">data
+   sources</link>. The field name to use for discovering indexes can be either set explicitly with
+   <phd:pearapi phd:package="HTML_QuickForm2"
+    phd:linkend="HTML_QuickForm2_Container_Repeat::setIndexField">setIndexField()</phd:pearapi> or
+   left for the Repeat to choose automatically using names of prototype's child elements. When
+   guessing, it will only consider elements that are expected to always have a submit value, so
+   elements like buttons, checkboxes and multiple selects will not be used.
+  </para>
+  <para>
+   Indexes can be also set manually using <phd:pearapi phd:package="HTML_QuickForm2"
+    phd:linkend="HTML_QuickForm2_Container_Repeat::setIndexes">setIndexes()</phd:pearapi>, the
+   corresponding <phd:pearapi phd:package="HTML_QuickForm2"
+    phd:linkend="HTML_QuickForm2_Container_Repeat::getIndexes">getIndexes()</phd:pearapi> is also
+   available. Duplicate indexes and those not matching
+   <constant>HTML_QuickForm2_Container_Repeat::INDEX_REGEXP</constant> will be ignored by
+   <function>setIndexes</function>.
+  </para>
+  <example>
+   <info>
+    <title>Working with indexes</title>
+   </info>
+   <programlisting role="php"><![CDATA[
+$form = new HTML_QuickForm2('repeatIndexes');
+$form->addDataSource(new HTML_QuickForm2_DataSource_Array(array(
+    'title' => array('foo', 'bar', 'key' => 'baz')
+)));
+
+$fieldset = new HTML_QuickForm2_Container_Fieldset();
+$repeat   = $form->addRepeat()->setPrototype($fieldset);
+
+// no element to guess indexes present
+var_dump($repeat->getIndexes());
+
+// explicitly set field to discover indexes
+$repeat->setIndexField('title');
+var_dump($repeat->getIndexes());
+
+// explicit setIndexes() with a few errors
+$repeat->setIndexes(array('foo', 'bar', 'baz', 'qu\'ux', 'baz'));
+var_dump($repeat->getIndexes());
+   ]]></programlisting>
+   <simpara>outputs</simpara>
+   <screen><![CDATA[
+array(0) {
+}
+array(3) {
+  [0]=>
+  int(0)
+  [1]=>
+  int(1)
+  [2]=>
+  string(3) "key"
+}
+array(3) {
+  [0]=>
+  string(3) "foo"
+  [1]=>
+  string(3) "bar"
+  [2]=>
+  string(3) "baz"
+}
+   ]]></screen>
+  </example>
+  <tip>
+   <para>
+    Setting indexes for repeat elements works quite similar to setting values for other elements, so
+    <link linkend="package.html.html-quickform2.values-datasources.order">keeping correct
+     order</link> really helps.
+   </para>
+  </tip>
+ </refsection>
 </refentry>

--68c97c55daa48d84176abddea1042fd68215e124--