web-dev-qa-db-fra.com

si l'article fait partie de la catégorie ou de l'un de ses enfants

Je sais que je peux avoir le category id et parent category id, mais ce que je veux vraiment, c'est une catégorie et toutes les catégories d'enfants.

Je fais un groupe d'articles et je veux faire une substitution à ajouter une classe à tous les articles d'une catégorie et à toutes les catégories d'enfants, quel que soit le nombre de catégories d'enfants que j'ajoute.

Est-ce possible? Je ne veux pas faire IF parent category id OR parent category id OR parent category id parce que si je le fais, je devrai le mettre à jour chaque fois que j'ajouterai une nouvelle catégorie.

Je veux connaître les catégories d'articles et toutes les sous-catégories

J'ai vérifié cet article mais ce n'est pas vraiment la solution entière https://stackoverflow.com/questions/43647327/get-joomla-parent-category-id

Merci d'avance.

1
Eoin

J'ai rencontré un problème similaire il y a quelque temps et ne trouvant pas une bonne réponse, je suis venu avec une réponse désordonnée simple. Voir:

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;
}

C'est une fonction statique publique parce que je l'avais dans une classe d'assistance, mais j'espère que vous pourrez voir l'idée. Notez également qu’il n’ya que 4 catégories parentales en profondeur, mais qu’il devrait être assez facile pour être approfondi si nécessaire.

2
jamesgarrett

Méthode de la base de données lorsque vous souhaitez vérifier une catégorie et tous ses enfants. Où $categoryId est votre catégorie spécifiée.

// 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;

Ensuite, lors de l'affichage de l'article, ajoutez cette vérification:

<?php if (in_array($this->item->catid, $categoryIds)) : ?>
    <?php // Article is in one of the categories, do stuff ?>
<?php endif; ?>
2
Sharky