2011-03-19 77 views
2

我正在使用joomla k2组件,并且正在构建基于它的另一个组件。 这里我有访问(解析)k2额外字段的问题。帮助将不胜感激。解析joomla 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 

我尝试用不同的方式,但它不会工作。

回答

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; 
} 
2

根据你在哪里,你如何使用额外的领域可以改变。

在项目视图 - $this->item->extra_fields[id]->value;

在K2内容模块 - $item->extra_fields[id]->value;

在这两种情况下,你与你要使用额外字段相​​应数量的更换ID。编号从0开始。这些被视为典型的PHP变量。您可能想要发布一些代码,以便我们可以看到您正在尝试执行的操作。

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; 
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解析。

+0

谢谢!我正在寻找HOURS试图寻找解决方案。我遇到的问题是K2ModelItem :: getItemExtraFields()失败(工作好几个月后)。事实证明,有人在其中一个顶级类别中打开了“显示额外字段”。我偶然发现了你的帖子,并决定寻找一个打开它的类别。果然!将其关闭将其固定为100%。 getItemExtraFields()抛出此错误:类stdClass的对象无法转换为字符串[file] => /htdocs/administrator/components/com_k2/lib/JSON.php [line] => 478 – CobaltBlue 2012-10-21 07:03:51