J'essaie d'obtenir le dernier article dans une catégorie comportant un certain nombre de sous-catégories via le module Articles ContentModel.
Si j'utilise $model->setState('filter.category_id', $this->category->id);
, il ne retourne rien car la catégorie en question ne contient aucun article; tous les articles sont en sous-catégories.
Comment puis-je obtenir tous les articles de la catégorie actuelle, y compris les enfants?
Code en question:
$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
$model->getState();
// Set application parameters in model
$app = JFactory::getApplication();
$appParams = $app->getParams();
$model->setState('params', $appParams);
// Set the filters based on the module params
$model->setState('list.start', 0);
$model->setState('list.limit', 1);
$model->setState('filter.category_id', $this->category->id);
$model->setState('filter.published', 1);
// Permissions
$access = !JComponentHelper::getParams('com_content')->get('show_noauth');
$authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
$model->setState('filter.access', $access);
// Featured Item
// Get article from featured set
// $model->setState('filter.featured', 'only');
// Ordering
$model->setState('list.ordering', 'a.publish_up');
$model->setState('list.direction', 'DESC');
$items = $model->getItems();
Vous devez activer les sous-catégories avec le subcategories.filter
et spécifiez également les niveaux de sous-catégories que vous souhaitez approfondir.
$model->setState('filter.subcategories', true);
$model->setState('filter.max_category_levels', $subCategoryLevels);
Notez que la vérification des sous-catégories aura lieu si l'id de la catégorie pour le filter.category_id
est numérique, sinon, si vous transmettez un tableau d'identifiants de catégorie (provenant par exemple d'un champ de sélection à choix multiples), le modèle ne cherchera pas de sous-catégories, mais chargera les articles correspondant aux identifiants de catégorie donnés.