我正在使用joomla k2组件,我正在构建基于它的另一个组件。 这里我在访问(解析)k2额外字段时遇到问题。将不胜感激。
数据库中的k2额外字段内容是这样的,
[{"id":"1","value":"500"},{"id":"2","value":"40Hrs"},{"id":"3","value":"1"}]
我搜索了k2网站和其他人并给出了答案,
$this->item->extra_fields[0]->value; //needs to return 500
我尝试过不同的方式,但它无法正常工作。
答案 0 :(得分:3)
您可以使用json_decode()
函数将其从JSON字符串格式解码为PHP对象。
示例:强>
$JSON = '[{"id":"1","value":"500"},{"id":"2","value":"40Hrs"},{"id":"3","value":"1"}]';
$obj = json_decode($JSON);
echo $obj[0]->value;
答案 1 :(得分:2)
根据您所处的位置,您使用额外字段的方式可能会发生变化。
在项目视图中 - $this->item->extra_fields[id]->value;
在K2内容模块中 - $item->extra_fields[id]->value;
在这两种情况下,您都将id替换为您尝试使用的额外字段的相应数量。编号从0开始。这些被视为典型的PHP变量。您可能希望发布一些代码,以便我们可以看到您要执行的操作。
答案 2 :(得分:2)
如果你的extra_fields值作为一个字符串(未解析)返回而不是一个对象数组,那么它可能是由于配置而产生的,因为extra_fields会根据它进行解析(或不解析)。
//Extra fields
if (($view == 'item' && $item->params->get('itemExtraFields'))
|| ($view == 'itemlist' && ($task == '' || $task == 'category') && $item->params->get('catItemExtraFields'))
|| ($view == 'itemlist' && $task == 'tag' && $item->params->get('tagItemExtraFields'))
|| ($view == 'itemlist' && ($task == 'search' || $task == 'date') && $item->params->get('genericItemExtraFields')))
{
$item->extra_fields = K2ModelItem::getItemExtraFields($item->extra_fields);
}
在类别列表中显示项目时,您可以通过编辑类别并在类别列表中项目视图选项下启用extra_fields(catItemExtraFields
)点击显示用于额外字段项目。
在项目视图中,您可以通过修改类别启用extra_fields(itemExtraFields
),然后在项目视图选项下单击显示以获取额外字段项目。
这应该在类别项列表和项目视图中启用extra_fields解析。
答案 3 :(得分:2)
试试这个,
$str='[{"id":"1","value":"500"},{"id":"2","value":"40Hrs"},{"id":"3","value":"1"}]';
$vals=json_decode($str);
print_r($vals);
如果要打印500,
echo $vals[0]->value; //prints 500
或想要循环播放,
foreach($val as $v){
echo $v->value;
}