我正在使用 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->video之类的输出k2 item的各种值,我想我可以像rokSprocket一样使用k2 item的video值使用 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->setVideo($raw_item->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 知识,它似乎与数据库有关。任何提示或教学都将受到高度赞赏。