使RokSprocket获取k2项目的视频,但获取未定义的属性错误

时间:2013-05-08 17:22:49

标签: php joomla joomla-k2

我用joomla建立我的网站,我正在使用RokSprocket在frongpage上显示一些特色项目。 RokSprocket可以使用k2作为内容提供者,但它无法获取k2项目的视频。所以我试图修改PHP文件,但我得到了一个Undefiend属性$ 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->视频等来输出k2项的各种值,我想我可以使用k2项 s视频值就像rokSprocket使用k2项的其他值一样。所以我认为我需要做的就是  1)向类RokSprocket_item添加新的“视频”值和setVideo / getVideo函数;

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(); ?>

但是首页输出一条错误消息:未定义属性:stdClass :: $ video在我添加“$ item-&gt; setVideo($ raw_item-&gt; 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知识,它似乎与数据库有关。 任何提示或教学都受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

您需要将视频定义为标准类

$video = new stdClass;