Le plus simple est de s'inspirer d'un composant du core Joomla 2.5 ou + (par exemple com_banners ou com_contacts).

Quelques points essentiels à ne pas oublier

  • votre table doit avoir un champ nom catid: catid int(10) UNSIGNED NOT NULL DEFAULT '0'
  • dans votre composant / administration, il faut un helper du nom du composant avec une fonction statique addSubmenu (voir administrator/components/com_banners/helpers/banners.php)
  • dans votre composant (front) il faut un helper category qui definira une classe fille de JCategories appelée VotreComposantCategories qui definira au minimum dans son constructeur le nom de la table et le nom de l'extension.
    (voir components/com_banners/helpers/category.php).
  • Pour avoir un titre spécifique à votre composant dans l'administration de vos catégories, il faut que dans votre fichier de langue soit défini les clés :
    COM_VOTRECOMPOSANT
    COM_VOTRECOMPOSANT_SECTION si vous avez plusieurs catégories et que vous utilisez donc la notion de section.

Plusieurs catégories dans un composant

Si vous avez besoin de plusieurs catégories dans votre composant, il fadra ajouer une notion de section.

Par exemple :
Composant : com_competition
La première catégorie regroupera les compétitions par circuit ou chalenge
La deuxième catégorie indiquera le calendrier regroupe les épreuves de même niveau (départemental, régionnal ou nationnal, ou selon la discipline ligue1, lugue 2, etc...).

Il faudra donc définir une 2ème classe héritant de JCategorie dans le même fichier helper de nom category.php ou dans un autre fichier à condition de l'enregistrer par un  classique JLoader::register

Il comprendra quelque chose de ce type :

class GskiepreuvesCalendrierCategories extends JCategories
{
public function __construct($options = array())
{
$options['table'] = '#calendrier_evenement';
$options['extension'] = 'com_competition.calendrier';
$options['statefield'] = 'published';
$options['key'] = 'id';
parent::__construct($options);
}
}

Avoir des rubriques spécifiques dans vos catégories

Il suffit de crée un xml des champs à rajouter (ces champs se trouveront dans l'onglet 'paramètres' de vos catégories) et structuré de la sorte :

<?xml version="1.0" encoding="UTF-8"?>
<form>
 <fields name="params">
  <fieldsetname="basic">
     ...ici les champs
  </fieldset>
 </fields>
</form>

Ce fichier s'appellera category.xml ou category.nom_de_votre_section.xml et est à placer dans /administrator/components/com_votrecomposant/models/forms

Remarque

  • une feuille de style spécifique peut-être définie pour le composant (je n'ai pas approfondi ce point -a priori dans com_votrecomposant/administrator/categories.css)

Problèmes

Joomla4 : messahe Erreur 1146 : Table mydb.myprefix_ doesn't exist

Concerne généralement les composant avec des section dans les catégories (catégories multiples)

Dans /administrator/compoents/com_mycomponent/src/Extension/MycomponentComponent.php

Il faut definir la methode getTableNameForSection de la classe CategoryServiceInterface

Exemple

 

    /**
     * Returns the table for the count items functions for the given section.
     *
     * @param   string  $section  The section
     *
     * @return  string|null
     *
     * @since   4.0.0
     */
    protected function getTableNameForSection(string $section = null)
    {
        if($section == 'calendrier'){
            return 'gskicalendrier_evenement';
        }
        return null;
    }

1054 Unknown column 'c.state' in 'field list'

Concerne généralement les composant avec des section dans les catégories (catégories multiples)

Dans /administrator/compoents/com_mycomponent/src/Extension/MycomponentComponent.php

Il faut definir la methode getStateColumnForSection de la classe CategoryServiceInterface

Exemple

 

    protected function getStateColumnForSection(string $section = null)
    {
        return 'published';
    }