Массив обработки форм Moodle при отправке - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над обработкой данных, возвращаемых из формы, но из-за того, что мне пришлось вручную присваивать идентификаторы выпадающим спискам выбора (чтобы я мог прикрепить кнопку помощи к заголовкам), я не могу найти пример для работы from.

Возвращаемый массив выглядит следующим образом:

  [10]=>
  string(1) "0"
  [11]=>
  string(1) "0"
  [12]=>
  string(1) "0"
  [20]=>
  string(1) "0"
  [21]=>
  string(1) "0"
  [22]=>
  string(1) "0"
  ["comments"]=>
  string(0) ""
  ["submitbutton"]=>
  string(12) "Save changes"

Мне нужно сгруппировать все, что начинается с уникального числа (то есть 1,2 ...), и игнорировать комментарии и элементы кнопки отправки. Другими словами, я хочу, чтобы это выглядело так:

id = 1
    criteria0 = 0
    criteria1 = 0
    criteria2 = 0

id = 2
    criteria0 = 0
    criteria1 = 0
    criteria2 = 0

1 Ответ

0 голосов
/ 16 апреля 2020

Думаю, я бы просто использовал разделитель, например:

В форме

foreach (array(1,2) as $id) {
    foreach (array(1,2,3) as $criteria) {
        $key = $id . '_' . $criteria;
        $options[$key] = "Your description for id $id, criteria $criteria";
    }
}

$attributes = array('multiple' => 'multiple', 'size' => 10);

$form->addElement('select', 'criteria', get_string('criteria', 'component'), $options, $attributes);

Затем в результатах

$formdata = $mform->get_data();

...

$results = array();

foreach ($formdata->criteria[$key] as $key => $value) {
    list($id, $criteria) = explode('_', $key);
    $results[$id][$criteria] = $value;
}

Также для справки, Moodle имеет selectgroups тип поля. Вам все еще нужно будет использовать уникальный ключ, но вы можете сгруппировать опции.

foreach (array(1,2) as $groupid) {
    foreach (array(1,2,3) as $criteria) {
        $key = $groupid . '_' . $criteria;
        // Use a group.
        $options[$groupid][$key] = "Your description for id $groupid, criteria $criteria";
    }
}

$attributes = array('multiple' => 'multiple', 'size' => 10);

// Use selectgroups.
$form->addElement('selectgroups', 'criteria', get_string('criteria', 'component'), $options, $attributes);
...