Эквивалент get_the_category( $id ) Wordpress в Joomla

В основном мне нужно что-то, чтобы вернуть мне категории статьи. Joomla имеет многоуровневые категории, НО статьи могут находиться только в одной из этих категорий. Если структура такая:

  • Fruits (category id: 1)
    • Tropical (category id: 2)
      • Mango (article id: 1)
    • Сезонный (идентификатор категории: 3)
  • Овощи (идентификатор категории: 4)

Я в основном хочу массив всех категорий предков. Это означает, что статья Mango будет иметь массив [1,2], возвращаемый этой функцией.

get_categories($aid=1) //will return [1,2]

Я изучил API Joomla, который все еще дорабатывается в этом разделе. Мне было интересно, кому из вас повезло больше. Я не нашел в StackOverflow ничего, что могло бы помочь.


person Vik    schedule 21.06.2012    source источник


Ответы (1)


Вы можете получить дерево категорий, используя реализацию JCategories для категорий компонента com_content.

<?php
jimport('joomla.application.categories');
jimport('joomla.application.component.model');
require_once JPATH_BASE . '/components/com_content/helpers/category.php';

$articleId = $this->item->id;    // or your way to get articleId

$articlesModel = JModel::getInstance('ContentModelArticle');
$articleCategoryId = $articlesModel->getItem($articleId)->catid;

$contentCategoriesModel = new ContentCategories();
$categoryTree = $contentCategoriesModel->get($articleCategoryId)->getPath();

Важно, что элементы результирующего массива будут содержать не только id категорий, но и alias поля (как 2:tropical). Чтобы извлечь целое число id, используйте функцию intval() следующим образом:

foreach ($categoryTree as $categoryTreeNode) {
    $categoryTreeNodeId = intval($categoryTreeNode);
}
person Stanislav Gamayunov    schedule 21.06.2012
comment
Спасибо. Проверит и отчитается. - person Vik; 21.06.2012
comment
Работает как шарм. Спасибо. - person Vik; 24.06.2012
comment
По какой-то причине это выдает ошибку в строке $categoryTree=, вызов функции-члена getPath() для не-объекта. Какая связь между этими двумя последними битами кода и кодом над ним - они не кажутся связанными. Спасибо! - person Gisto; 27.09.2012
comment
@Gisto это должно быть $contentCategoriesModel->get($articleCategoryId)->getPath(); не передавать $contentCategoriesModel, как было написано. - person tristanbailey; 24.10.2012