если статья является частью категории или любого из ее детей

Я знаю, что могу получить category id и parent category id, но я действительно хочу категорию и любые дочерние категории.

Я создаю группу статей, и я хочу сделать переопределить на добавить класс ко всем статьям категории и всем дочерним категориям, независимо от того, как многие дочерние категории, которые я добавляю.

Это возможно? Я не хочу делать IF parent category id OR parent category id OR parent category id, потому что если я это сделаю, мне придется обновлять его каждый раз, когда я добавляю новую категорию.

Я хочу знать категории статей и все подкатегории

Я проверил эту статью, но это не совсем решение https://stackoverflow.com /вопросы /43647327 /получить-Joomla-родитель-категория-ID

Спасибо заранее.

1 голос | спросил Eoin 28 J0000006Europe/Moscow 2018, 15:07:25

2 ответа


2

Я столкнулся с подобной проблемой некоторое время назад и не придумал хороший ответ. Я придумал беспорядочный ответ. Вот:

public static function isArticleIdInThisCategoryId($article_id,$category_id)
{
    if(!$article_id){return false;}

    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('a.catid AS parent1,b.parent_id AS parent2,c.parent_id AS parent3,d.parent_id AS parent4,');
    $query->from($db->qn('#__content','a'));
    $query->join('LEFT',$db->qn('#__categories', 'b') . ' ON (' . $db->qn('a.catid') . ' = ' . $db->qn('b.id') . ')');
    $query->join('LEFT',$db->qn('#__categories', 'c') . ' ON (' . $db->qn('b.parent_id') . ' = ' . $db->qn('c.id') . ')');
    $query->join('LEFT',$db->qn('#__categories', 'd') . ' ON (' . $db->qn('c.parent_id') . ' = ' . $db->qn('d.id') . ')');
    $query->where($db->qn('a.id') . " = " . $db->q($article_id));
    $db->setQuery($query);
    $result = $db->loadAssoc();

    if(empty($result)){
        return false;
    }

    for ($i=1; $i <= 4; $i++) { 
        if(!empty($result['parent' . $i]) && $result['parent' . $i] == $category_id){
            return true;
        }
    }
    return false;
}

Это публичная статическая функция, потому что у меня это было в классе-помощнике, но, надеюсь, вы можете увидеть эту идею. Также обратите внимание, что он содержит только 4 родительские категории, но должен быть достаточно простым, чтобы глубже при необходимости.

ответил jamesgarrett 29 J0000006Europe/Moscow 2018, 10:47:32
2

Метод базы данных, если вы хотите проверить одну категорию и все ее дочерние элементы. Где $categoryId - ваша указанная категория.

// Get child category IDs
$db = JFactory::getDbo();
$query = $db->getQuery(true)
    ->select('sub.id')
    ->from('#__categories as sub')
    ->join('INNER', '#__categories as this ON sub.lft > this.lft AND sub.rgt < this.rgt')
    ->where('this.id = ' . (int) $categoryId);
$db->setQuery($query);
$categoryIds = $db->loadColumn();
// Add top category too.
$categoryIds[] = $categoryId;

Затем при отображении статьи добавьте эту проверку:

<?php if (in_array($this->item->catid, $categoryIds)) : ?>
    <?php // Article is in one of the categories, do stuff ?>
<?php endif; ?>
ответил Sharky 29 J0000006Europe/Moscow 2018, 17:41:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132