Невозможно получить полевые параметры Joomla как массив или объект - PullRequest
0 голосов
/ 18 января 2019

Я бы получил значения пользовательских полей Joomla из скрипта PHP. Я включаю все необходимые файлы и могу прочитать значения флажков из таблицы «fields», столбца «fieldparams». Если я выполню этот код

$query = "select #__fields.fieldparams from   #__fields where  #__fields.id = 19";
$db->setQuery($query);
$result = $db->loadRowList();
foreach ($result as $value) {
echo gettype($value); // 01
echo $value[0]; // 02
$var = json_encode($value[0]);
echo gettype($var); // 03
}

типом $ value является «Массив» (шаг 01), поэтому, если я получу доступ к $ value [0], результатом (шаг 02) будет глобальный список (поэтому я предполагаю, что это массив с 1 элементом)

{
"options":{
"options0":{"name":"type1","value":"1"},
"options1":{"name":"type2","value":"2"},
"options2":{"name":"type3","value":"3"},
"options3":{"name":"type4","value":"4"},
"options4":{"name":"type5","value":"5"}
}
}

но когда я пытаюсь использовать json_encode, результатом (шаг 03) является строка. Таким образом, я не могу получить доступ к ключам и относительным значениям.

Что не так?

1 Ответ

0 голосов
/ 24 января 2019

Здесь есть 2 вопроса.1. Вы используете -> loadRowList (), который является методом, предназначенным для возврата массива строк (т.е. нескольких строк), а не одного, как подразумевается вашим предложением where , и 2. Вместо использованияНативные функции PHP, попробуйте вместо этого использовать класс Joomla JRegistry.

Чтобы обратиться к этим точкам:

1 Так как вы ожидаете, что будет возвращена только 1 строка (поле с идентификатором 19), замените вашу строку:

$result = $db->loadRowList();

на

$result = $db->loadResult();

$ result будет содержать fieldpams столбец только .

2 Создать экземпляр класса JRegistryтак что мы можем получить доступ к парам ключ => значение:

// new registry
$registry = new JRegistry();
$registry->loadString($result); // load the string from the db

// if you need an array, use jregistry's toArray method
$arrayData = $registry->toArray();

Надеюсь, это поможет,

Gez

...