diff --git a/components/com_fields/layouts/field/prepare/checkboxes.php b/components/com_fields/layouts/field/prepare/checkboxes.php index 718298be172eb..9ddc10ecd4253 100644 --- a/components/com_fields/layouts/field/prepare/checkboxes.php +++ b/components/com_fields/layouts/field/prepare/checkboxes.php @@ -13,23 +13,23 @@ return; } -$field = $displayData['field']; -$value = $field->value; +$field = $displayData['field']; +$fieldValue = $field->value; -if ($value === '' || $value === null) +if ($fieldValue === '' || $fieldValue === null) { return; } -$value = (array) $value; -$texts = array(); -$options = JFormAbstractlist::getOptionsFromField($field); +$fieldValue = (array) $fieldValue; +$texts = array(); +$options = JFormAbstractlist::getOptionsFromField($field); -foreach ($options as $optionValue => $optionText) +foreach ($options as $value => $name) { - if (in_array((string) $optionValue, $value)) + if (in_array((string) $value, $fieldValue)) { - $texts[] = JText::_($optionText); + $texts[] = JText::_($name); } } diff --git a/components/com_fields/layouts/field/prepare/list.php b/components/com_fields/layouts/field/prepare/list.php index 77050cee07b0e..d80e8426fee88 100644 --- a/components/com_fields/layouts/field/prepare/list.php +++ b/components/com_fields/layouts/field/prepare/list.php @@ -13,23 +13,23 @@ return; } -$field = $displayData['field']; -$value = $field->value; +$field = $displayData['field']; +$fieldValue = $field->value; -if ($value == '') +if ($fieldValue == '') { return; } -$value = (array) $value; -$texts = array(); -$options = JFormAbstractlist::getOptionsFromField($field); +$fieldValue = (array) $fieldValue; +$texts = array(); +$options = JFormAbstractlist::getOptionsFromField($field); -foreach ($options as $optionValue => $optionText) +foreach ($options as $value => $name) { - if (in_array((string) $optionValue, $value)) + if (in_array((string) $value, $fieldValue)) { - $texts[] = JText::_($optionText); + $texts[] = JText::_($name); } } diff --git a/libraries/joomla/form/abstractlist.php b/libraries/joomla/form/abstractlist.php index ff6a829ba78e9..328b029919a79 100644 --- a/libraries/joomla/form/abstractlist.php +++ b/libraries/joomla/form/abstractlist.php @@ -215,19 +215,11 @@ public static function getOptionsFromField($field) { $options = $field->fieldparams->get('options', array()); - if (!is_array($options)) - { - $options = json_decode($options); - } - $data = array(); - if (isset($options->name)) + foreach ($options as $option) { - foreach ($options->value as $index => $key) - { - $data[$key] = $options->name[$index]; - } + $data[$option->value] = $option->name; } return $data; @@ -247,10 +239,13 @@ public static function getOptionsFromField($field) */ protected function postProcessDomNode($field, DOMElement $fieldNode, JForm $form) { - foreach (self::getOptionsFromField($field) as $index => $name) + foreach (self::getOptionsFromField($field) as $value => $name) { - $element = $fieldNode->appendChild(new DOMElement('option', $name)); - $element->setAttribute('value', $index); + $option = new DOMElement('option', $value); + $option->nodeValue = JText::_($name); + + $element = $fieldNode->appendChild($option); + $element->setAttribute('value', $value); } return parent::postProcessDomNode($field, $fieldNode, $form); diff --git a/libraries/joomla/form/field.php b/libraries/joomla/form/field.php index 46b4813ba5c7e..7e549d79b7e4a 100644 --- a/libraries/joomla/form/field.php +++ b/libraries/joomla/form/field.php @@ -1113,7 +1113,13 @@ public function appendXMLFieldTag($field, DOMElement $parent, JForm $form) { if (is_array($param)) { - $param = implode(',', $param); + // Multidimensional arrays (eg. list options) can't be transformed properly + $param = count($param) == count($param, COUNT_RECURSIVE) ? implode(',', $param) : ''; + } + + if (!$param) + { + continue; } $node->setAttribute($key, $param); diff --git a/libraries/joomla/form/parameters/checkboxes.xml b/libraries/joomla/form/parameters/checkboxes.xml index 641dee4e8eff3..c644059a4408a 100644 --- a/libraries/joomla/form/parameters/checkboxes.xml +++ b/libraries/joomla/form/parameters/checkboxes.xml @@ -4,26 +4,26 @@
- +
diff --git a/libraries/joomla/form/parameters/list.xml b/libraries/joomla/form/parameters/list.xml index 78d811c52ef87..d2bafe7a53159 100644 --- a/libraries/joomla/form/parameters/list.xml +++ b/libraries/joomla/form/parameters/list.xml @@ -2,14 +2,25 @@
+ + + + - - - - - +
diff --git a/libraries/joomla/form/parameters/radio.xml b/libraries/joomla/form/parameters/radio.xml index a6af95a419188..b3e36c89a027f 100644 --- a/libraries/joomla/form/parameters/radio.xml +++ b/libraries/joomla/form/parameters/radio.xml @@ -4,26 +4,26 @@
- +