Note: You are currently viewing documentation for Moodle 2.3. Up-to-date documentation for the latest stable version is available here: lib/formslib.php repeat elements.

Development:lib/formslib.php repeat elements: Difference between revisions

From MoodleDocs
m (better formatting)
(using setType instead of repeateloptions for type.)
Line 16: Line 16:
     *                      for the elements :
     *                      for the elements :
     *                          'default' - default value is value
     *                          'default' - default value is value
    *                          'type' - PARAM_* constant is value
     *                          'helpbutton' - helpbutton params array is value
     *                          'helpbutton' - helpbutton params array is value
     *                          'disabledif' - last three moodleform::disabledIf()
     *                          'disabledif' - last three moodleform::disabledIf()
     *                                          params are value as an array
     *                                          params are value as an array
    *                          'rule' - array of arguments for addRule for the elements
    *                                    or a string with a rule name which will be a rule name
    *                                    which be validated client side and which has a default error
    *                                    message.
     * @param string $repeathiddenname name for hidden element storing no of repeats in this form
     * @param string $repeathiddenname name for hidden element storing no of repeats in this form
     * @param string $addfieldsname name for button to add more fields
     * @param string $addfieldsname name for button to add more fields
Line 31: Line 34:


<pre>
<pre>
//-------------------------------------------------------------------------------
         $repeatarray=array();
         $repeatarray=array();
         $repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('choice','choice'));
         $repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('choice','choice').' {no}');
         $repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('choice','choice'));
         $repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('choice','choice'));
         $repeatarray[] = &MoodleQuickForm::createElement('text', 'limit', get_string('limit','choice'));
         $repeatarray[] = &MoodleQuickForm::createElement('text', 'limit', get_string('limit','choice'));
Line 45: Line 49:


         $repeateloptions = array();
         $repeateloptions = array();
         $repeateloptions['limit'] = array(
         $repeateloptions['limit']['default'] = 0;
                                  'default'=>0,
        $repeateloptions['limit']['disabledif'] = array('limitanswers', 'eq', 0);
                                  'type'=>PARAM_INT,
        $mform->setType('limit', PARAM_INT);
                                  'disabledif'=>array('limitanswers', 'eq', 0));
 
         $repeateloptions['option'] = array(
         $repeateloptions['option']['helpbutton'] = array('options', get_string('modulenameplural', 'choice'), 'choice');
                                  'type'=>PARAM_TEXT,
         $mform->setType('option', PARAM_TEXT);
                                  'helpbutton'=>array('options', get_string('modulenameplural', 'choice'), 'choice'));
 
         $repeateloptions['optionid'] = array('type'=>PARAM_INT);
        $mform->setType('optionid', PARAM_INT);


         $this->repeat_elements($repeatarray, $repeatno,
         $this->repeat_elements($repeatarray, $repeatno,
                     $repeateloptions, 'option_repeats', 'option_add_fields', 3);
                     $repeateloptions, 'option_repeats', 'option_add_fields', 3);


</pre>
</pre>
[[Category:Formslib]]
[[Category:Formslib]]

Revision as of 10:31, 21 January 2007

Template:Formslib This function adds a repeating group of elements. An array index starting with a zero index will be added to the elementname so that the form will return arrays of submitted values.

Also on the form there will be a button to add extra elements to the form. The form page reloads with extra form elements. This involves no javascript.

From the phpdoc comments from this moodleform method :

    /**
     * Method to add a repeating group of elements to a form.
     *
     * @param array $elementobjs Array of elements or groups of elements that are to be repeated
     * @param integer $repeats no of times to repeat elements initially
     * @param array $options Array of options to apply to elements. Array keys are element names.
     *                      This is an array of arrays. The second sets of keys are the option types
     *                      for the elements :
     *                          'default' - default value is value
     *                          'helpbutton' - helpbutton params array is value
     *                          'disabledif' - last three moodleform::disabledIf()
     *                                           params are value as an array
     *                          'rule' - array of arguments for addRule for the elements
     *                                     or a string with a rule name which will be a rule name
     *                                     which be validated client side and which has a default error 
     *                                     message.
     * @param string $repeathiddenname name for hidden element storing no of repeats in this form
     * @param string $addfieldsname name for button to add more fields
     * @param int $addfieldsno how many fields to add at a time
     * @param array $addstring array of params for get_string for name of button, $a is no of fields that
     *                                  will be added.
     */

This method can be called from within definition(). Here is an example from within chat_mod_form in chat/mod_form.php. You can see this at work if you add a chat form or update a chat form in your course.

//-------------------------------------------------------------------------------
        $repeatarray=array();
        $repeatarray[] = &MoodleQuickForm::createElement('header', '', get_string('choice','choice').' {no}');
        $repeatarray[] = &MoodleQuickForm::createElement('text', 'option', get_string('choice','choice'));
        $repeatarray[] = &MoodleQuickForm::createElement('text', 'limit', get_string('limit','choice'));
        $repeatarray[] = &MoodleQuickForm::createElement('hidden', 'optionid', 0);

        if ($this->_instance){
            $repeatno=count_records('choice_options', 'choiceid', $this->_instance);
            $repeatno += 2;
        } else {
            $repeatno = 5;
        }

        $repeateloptions = array();
        $repeateloptions['limit']['default'] = 0;
        $repeateloptions['limit']['disabledif'] = array('limitanswers', 'eq', 0);
        $mform->setType('limit', PARAM_INT);

        $repeateloptions['option']['helpbutton'] = array('options', get_string('modulenameplural', 'choice'), 'choice');
        $mform->setType('option', PARAM_TEXT);

        $mform->setType('optionid', PARAM_INT);

        $this->repeat_elements($repeatarray, $repeatno,
                    $repeateloptions, 'option_repeats', 'option_add_fields', 3);