web-dev-qa-db-fra.com

Comment obtenir des informations sur la catégorie principale affichée dans un plugin de contenu

J'ai un plugin qui doit prétraiter la description d'une catégorie en fonction de ses paramètres avant d'afficher toutes les sous-catégories qu'elle contient.

Pour les articles (context = com_content.article), le plugin onContentPrepare événement passe $article et $params donnant tout ce dont on aurait besoin, mais quand le contexte est com_content.category, $params est vide et $article a seulement $article->text.

Je sais que la catégorie d'intérêt se trouve dans la chaîne de requête, mais existe-t-il un meilleur moyen de trouver des informations sur la catégorie, etc. déjà récupérées?

Avec index.php?option=com_content&view=category&id=123&Itemid=456

public function onContentPrepare($context, &$article, &$params, $page=0)
    if($context == 'com_content.category') {
        // $article has only article ->text
        // $params is empty
        // how can I get category params here?
    }
2
GDP

Comme @codinghands l'a souligné, la catégorie n'est pas techniquement satisfaisante, de sorte que (par sa conception) toutes les informations d'intérêt ne sont pas disponibles, ne laissant que le titre de la catégorie généralement disponible pour modification.

L’autre "attrapé" lorsqu’il énumère toutes les sous-catégories et articles de la catégorie est que l’événement du plug-in est déclenché pour tous , donc si vous en avez plus que quelques catégories et/ou articles, le code du plugin va tirer beaucoup , à moins qu’il ne soit prévu de ne tirer qu’une fois.

Pour obtenir les paramètres de seule la catégorie principale étant affichée, mon hypothèse est que la première fois que le plugin est activé, il est pour la catégorie principale. (Cela a été prouvé vrai dans mon cas, mais je ne peux pas être sûr que d'autres paramètres pourraient changer cela).

index.php? option = com_content & view = categorie & id = 123

static $isMainCat = true;
if($isMainCat){
    $catid = JFactory::getApplication()->input->getInt('id');

    $basePath = JPATH_ADMINISTRATOR . '/components/com_categories';
    require_once $basePath . '/models/category.php';
    $category = new CategoriesModelCategory(array('table_path' => $basePath . '/tables'));
    $item = $category->getItem($catid);

    $params = new JRegistry;
    $params->loadString($item->params);
    $image = $params->get('image','noimage.gif');

    $isMainCat = false; // Prevent this code from running on any but the first category
}
1
GDP

En regardant view.html.php pour com_content.category, L'appel de déclenchement est le suivant:

$dispatcher->trigger('onContentPrepare', array ('com_content.category', &$item, &$item->params, 0));

qui envoie les paramètres $item (article). Pas bien.

En regardant la ligne 72 du même fichier (parent::commonCategoryDisplay();), qui est elle-même dans JCategoryView ( code ici ), le $params sont stockés (dans view.html.php, $this->params), mais en tant que catégorie non techniquement contenu, l'événement contentPrepare n'est pas déclenché à ce stade.

Vous pouvez remplacer ce view.html.php Pour déclencher l'événement. Voir ce guide - mais cela nécessite un plugin spécial.

2
codinghands