1

私は自分のウェブサイトを 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 の知識を完全に超えています。データベースと関係があるようです。ヒントや教えは大歓迎です。

4

1 に答える 1

0

ビデオを標準クラスとして定義する必要があります

$video = new stdClass;
于 2013-10-31T17:10:57.957 に答える