2

私は 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

さまざまな方法で試しましたが、うまくいきません。

4

4 に答える 4

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;
于 2011-05-17T17:43:19.517 に答える
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);
}

カテゴリリストにアイテムを表示する場合、catItemExtraFieldsカテゴリを編集してextra_fields()を有効にし、カテゴリリストの[アイテムビューオプション]で[ ExtraFields ]アイテムの[表示]をクリックします。

itemExtraFieldsアイテムビューで、カテゴリを編集してextra_fields()を有効にし、 [アイテムビューオプション]で[ ExtraFields ]アイテムの[表示]をクリックします。

これにより、カテゴリアイテムリストとアイテムビューでextra_fieldsの解析が有効になります。

于 2012-07-18T09:28:52.160 に答える
2

どこにいるかによって、追加フィールドの使用方法が変わる可能性があります。

アイテム ビューで -$this->item->extra_fields[id]->value;

K2 コンテンツ モジュール内 -$item->extra_fields[id]->value;

どちらの場合も、id を、使用しようとしている追加フィールドの対応する番号に置き換えます。番号は 0 から始まります。これらは典型的な PHP 変数として扱われます。何をしようとしているのかを確認できるように、コードを投稿することをお勧めします。

于 2011-03-19T17:14:18.183 に答える
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;
}
于 2013-12-21T10:17:39.357 に答える