2

我正在尝试获取另一个类别的父类别的 id。(我有子类别的 ID。)

我一直在尝试使用 Joomla 的 Category 模型,我成功地使用 Article 等效项从文章的 Id 中获取子类别 ID。

//article model
jimport('joomla.application.component.model');
$articlesModel = JModel::getInstance('ContentModelArticle');
$categoriesModel = JModel::getInstance('ContentModelCategory');

//Get Article Category id
$article = $articlesModel->getItem($art['id']);
$catid = $article->catid;

//Get Category Parent Category
$category = $categoriesModel->getItem($catid);
$parentID = $category->getParent();

echo "<pre>";
var_dump($parentID);
echo "</pre>";

但是我一直收到一个错误,说我正在尝试调用非对象的函数。

有人可以指出我要去哪里错了吗?谢谢。

编辑:应该提到这都在模块文件中

改变策略 最后我自己找到了一种不同的方法:现在我正在查询数据库中的信息。在这种情况下它很有用,因为我可以获取我需要的确切数据。

$db =& JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('parent_id');
$query->from('#__categories'); 
$query->where("id = '$child_id'");    
$db->setQuery($query);

//check if error
if ($db->getErrorNum()) {
  echo $db->getErrorMsg();
  exit;
}
$parent = $db->loadObjectList();
$parent_id = $parent['0']->parent_id;
4

1 回答 1

2

如果要加载ContentModelCategory,最好使用前缀:

$categoriesModel = JModel::getInstance('Category','ContentModel');

但是,我不认为这是适合您的模型,因为它从请求中获取上下文。

我可以建议 2 个替代方案:

使用JCategories实例

这是内容组件使用的首选方法。

$article = $articlesModel->getItem($id);
$catid = $article->catid;

//Get Category Parent Category
$categoriesModel = JCategories::getInstance('content');
$category = $categoriesModel->get($catid);
$parent = $category->getParent();
if($parent){
    $parentId = $parent->id;
    echo "parentId: ".$parentId;
}

用一个CategoriesModelCategory

这是 com_categories 使用的模型。

$article = $articlesModel->getItem(5);
$catid = $article->catid;

//add the CategoriesModelCategory model include path 
JModel::addIncludePath (JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_categories' . DS . 'models');
//add the table include path required by the model
JTable::addIncludePath (JPATH_ADMINISTRATOR . DS . 'components' . DS . 'com_categories' . DS . 'tables');

$categoriesModel = JModel::getInstance('Category','CategoriesModel');
$category = $categoriesModel->getItem($catid);
if($category){
    $parentId = $category->parent_id;
    echo "parentId: ".$parentId;
}
于 2013-09-18T14:17:21.990 回答