我试图从外部php脚本中的k2_items表中加载extra_fields字段中的数据(让我们称之为locations.php),我希望将其包含在网站的其他地方。
extra_field字段中的数据是json编码的:
[{"id":"1","value":"somevalue"},{"id":"2","value":"somevalue"},{"id":"3","value":"somevalue"}.]
例如:我有ID为1,6,10,15,22,44和66的项目。 我想为每个额外的字段和每个项目都有变量,以便我可以在其他地方使用它们。 如果id为1的项目有3个额外字段,我想要变量$ item1ExtraField1,$ item1ExtraField2和$ item1ExtraField3。
首先我启动了Joomla框架:
// Get Joomla Framework
defined('_JEXEC') or die('Restricted access');
define( 'JPATH_BASE', realpath(dirname(__FILE__)));
define( 'DS', DIRECTORY_SEPARATOR );
require_once (JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once (JPATH_BASE.DS.'includes'.DS.'framework.php' );
require_once (JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'factory.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
然后我尝试使用2个ID进行数据库查询以查看是否可以获取数据:
// Load the data from the database.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select('extra_fields')
->from('#__k2_items')
->where('id = 15 or id= 289');
$db->setQuery($query);
$items = $db->loadObjectList();
// Check for a database error.
if ($db->getErrorNum())
{
$this->_subject->setError($db->getErrorMsg());
return false;
}
然后我慢慢迷路了。 如果我尝试,我没有结果:
foreach ($items as $item) {
echo json_decode($item);
}
和var_dump给了我
array(2) { [0]=> object(stdClass)#1395 (1) { ["extra_fields"]=> string(1013) "[{"id":"3","value":"somevalue"},{"id":"4","value":"somevalue"}, etc ]
或使用jdump扩展名:
[array] (unknown name)
[stdClass object] 0
Properties
[string] extra_fields = "[{"id":"3","value":"somevalue"},{"id":"4","value":"somevalue"}, etc ]"
[stdClass object] 1
Properties
[string] extra_fields = "[{"id":"3","value":"somevalue"},{"id":"4","value":"somevalue"}, etc ]"
所以Joomla框架初始化似乎没问题,DB连接就在那里,但我不知道如何继续。
任何帮助都将不胜感激。
答案 0 :(得分:0)
我看到问题在于解码json字符串。尝试这样的事情:
$query = mysql_query($sql,$con);
while ($item = mysql_fetch_array($query))
{
$fields =(array)json_decode($item['extra_fields']);
$field1 = $fields[0]->value;
$field2 = $fields[1]->value;
}