私は自分のウェブサイトを joomla で構築しています。また、RokSprocket を使用して、フロントページに注目のアイテムを表示しています。RokSprocket は k2 をコンテンツ プロバイダーとして使用できますが、k2 アイテムのビデオを取得することはできません。そのため、PHP ファイルを変更しようとしましたが、未定義のプロパティ $stdClass::video エラーが発生しました。これが私がすることです:
RokSprocket is using function convertRawToItem to convert raw items(in this case k2 items) to RokSprocket items:
protected function convertRawToItem($raw_item, $dborder = 0)
{
//$textfield = $this->params->get('k2_articletext_field', '');
$item = new RokSprocket_Item();
$item->setProvider($this->provider_name);
$item->setId($raw_item->id);
$item->setAlias($raw_item->alias);
$item->setTitle($raw_item->title);
$item->setDate($raw_item->created);
$item->setPublished(($raw_item->published == 1) ? true : false);
$item->setCategory($raw_item->category_title);
$item->setHits($raw_item->hits);
$item->setRating($raw_item->rating);
$item->setMetaKey($raw_item->metakey);
$item->setMetaDesc($raw_item->metadesc);
$item->setMetaData($raw_item->metadata);
$item->setPublishUp($raw_item->publish_up);
$item->setPublishDown($raw_item->publish_down);
................
return $item;
}
クラス RokSprocket_item の定義は次のとおりです。
class RokSprocket_Item
.......
{
public function setText($introtext)
{
$this->text = $introtext;
}
public function getText()
{
return $this->text;
}....}
RokSprocket は、未加工の k2 アイテムの対応する値でアイテムの値を設定しています。K2独自のページでは、echo $this->item->titleやecho $this->item->videoなどを使ってk2 itemの各種値を出力しているので、k2 itemのvideo値もrokSprocketと同じように使えると思いますk2 アイテムの他の値を使用します。したがって、私がする必要があるのは、1) 新しい「ビデオ」値と setVideo/getVideo 関数をクラス RokSprocket_item に追加することだけだと思います。
protected $video;
public function setVideo($video)
{
$this->video = $video;
}
public function getVideo()
{
return $this->video;
}
2) convertRawToItem 関数で、追加
$item->setVideo($raw_item->video);
3)フロントエンドで、追加します
<?php echo $item->getVideo(); ?>
しかし、フロントページには、「$item->setVideo($raw_item->video);」を追加した行の Undefined property: stdClass::$video というエラー メッセージが出力されます。
私は何を間違えましたか?
エラー メッセージは、$raw_item にビデオ値がないことを意味していると思います。PHP ファイルを検索して、この convertRawToItem がいつ呼び出されるかを確認したところ、AbstarctJoomlaBasedProvider.php ファイルで次のことがわかりました。
public function getArticleInfo($id, $raw = false)
{
/** @var $filer_processor RokCommon_Filter_IProcessor */
$filer_processor = $this->getFilterProcessor();
$filer_processor->process(array('id' => array($id)), array(), true);
$query = $filer_processor->getQuery();
$db = JFactory::getDbo();
$db->setQuery($query);
$db->query();
if ($error = $db->getErrorMsg()) {
throw new RokSprocket_Exception($error);
}
$ret = $db->loadObject();
if ($raw) {
$ret->preview = $this->_cleanPreview($ret->introtext);
$ret->editUrl = $this->getArticleEditUrl($id);
return $ret;
} else {
$item = $this->convertRawToItem($ret);
$item->editUrl = $this->getArticleEditUrl($id);
$item->preview = $this->_cleanPreview($item->getText());
return $item;
}
}
今、私はここで立ち往生しています。次に何をすべきかは、私の非常に限られた PHP の知識を完全に超えています。データベースと関係があるようです。ヒントや教えは大歓迎です。