如何从数组的K2额外字段中提取数据?


8

我正在构建一个使用K2额外字段的站点,但是我正在自定义输出,因此我不仅在拉整个额外的字段块。

通常,以下内容适用于单个输入字段:

<?php if($this->item->extraFields->streetaddressone->value != ''): ?>
 <span class="itemExtraFieldsValue Address1"><?php echo $this->item->extraFields->streetaddressone->value ?></span>
  <?php endif; ?>

但是我有一个字段是多选列表,我想将整个数组拉到项目页面上的一行中。

我有点hack,所以我只是被这个卡住了。

Answers:


9

这取决于您所使用的.php文档-如果您位于item.php或category-item.php文件中,则以下内容应适用。

在文档顶部,添加以下代码:

<!-- Call to prepare extra fields --> 
<?php  
$extrafields = array();
foreach($this->item->extra_fields as $item)
{    
$extrafields[$item->id] = $item->value;
}   
?>

然后,无论您要调用哪个字段的值,都可以使用以下代码:

<?php if($extrafields[ID_NUMBER_OF_FIELD]!=''):?> <!-- if filled in, then call data -->
<?php echo $extrafields[ID_NUMBER_OF_FIELD];?> <!-- actual data call -->
<?php endif; ?>

tag.php和K2模块的工作原理略有不同。

tag.php-您不需要额外的代码,下面将调用您的字段数据。

<?php $extrafields = json_decode($item->extra_fields);?>
<?php foreach($extrafields as $key=>$value): ?>
<?php if($extrafields[$key]->id == 'ID_NUMBER_OF_FIELD'&&$extrafields[$key]->value!=''): ?>
<?php echo $extrafields[$key]->value; ?>,
<?php endif; ?> 
<?php endforeach; ?>

同样,使用module_k2_content,您不需要顶部数据调用。通过这种方式获取现场数据:

<?php echo $item->extraFields->ALIAS_OF_FIELD->value ;?>

希望能有所帮助。


我在item.php中,这完全可以工作。谢谢!
Brian Peat 2014年

没问题!!!我花了一个小时弄清楚了这一点,很高兴它可以帮助其他人。
Faye 2014年

仅供参考,该代码最初是由约旦为我编写的。他也在这里,他知道一些很棒的东西,当我看起来要哭的时候,这些东西对我有用。joomla.stackexchange.com/users/75/jordan-ramstad
Faye

1

上面@reactionfaye的回复是正确的。作为参考,自2012年11月起,它已成为K2的一部分:)

最初是在此博客文章中介绍的,用于发布K2 v2.6.2(http://getk2.org/blog/1068-k2-v262-now-available):

那么,如何在K2替代中直接输出各个额外的字段?简单。只需执行以下操作(例如在item.php中)即可获得额外的字段名称:

$ this-> item-> extraFields-> EXTRAFIELDALIASHERE->名称

要获得额外的字段值,您只需执行以下操作:

$ this-> item-> extraFields-> EXTRAFIELDALIASHERE->值

现在,将EXTRAFIELDALIASHERE替换为您希望输出的额外字段的实际别名。


-3

现在可以使用语言覆盖来完成此操作,避免在升级K2时覆盖hack。寻找常数K2_DATE_FORMAT_LC

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.