Joomla Builder
C'est un outil de génération de composants pour Joomla développé par Llewellyn van der Merwe.
Il permet sans quasiment écrire une ligne de code de générer l'arborescence de fichiers et le code du composant pour l'administration et le site.
L'outil est téléchargeable sur le JED Joomla ou directement sur son site github pkg-component-builder/releases
Une belle présentation est disponible sur le magazine Jooma tools-to-build-a-component-7-joomla-component-builder
- Joomla Builder
- Le sujet
- La modélisation
- La création du composant dans component builder
- Création des champs associés au composant
- Création des vues administrateur associées au composant
- Classes générées par Component Builder
- Associer les vues au composant
- Compiler le composant
- Installer le composant
- Tester le dashboard
- Ajouter un bouton à la vue admin
- Test du bouton Calculer
- Gestion des vues pour le site
Le sujet
Il s'agit de créer un composant qui permettra de calculer ses impôts en fonction du revenu et de son nombre de parts.
Le calcul est fait en fonction des tranches d'impôts de l'année considérée et d'un coefficient à appliquer pour chaque tranche.
On se contentera d'un calcul simple en déduisant les dons aux associations et les placements du type "PER".
La modélisation
Pour commencer à utiliser "Component Builder", il faut faire une modélisation des données utilisées pour le composants.
Dans notre cas il s'agira des données de calcul , à savoir les tranches d'impôts et coefficients à appliquer pour une année fiscale.
Concernant les données du revenu on utilisera le revenu net fiscal, le mode de déductions de frais (10% ou réel) le nombre de parts, les dons aux associations et le placement sur le PEL.
![]() |
Baptisons notre composant com_jtax |
Pour faire la modélisation, j'utilise l'outil
PlantUML
![]() |
Les 2 "classes" vont être mappées sur 2 tables de la base de données Joomla `#__jtax_impot` et `#__jtax_annee` On créera un lien entre chaque ligne de la table "impot" et une ligne de la table de donnée "annee"
|
La création du composant dans component builder
Aller dans l'interface administrateur sous Components/Component Builder/Joomla Components
Cliquer sur Nouveau
Pour ma part j'ai juste rempli les champs pour "System Name" et "Short Description" et "Company Name" "Author" "Author Email" "Author Website"
Création des champs associés au composant
On crée un champ ("Field") pour chaque ligne et chaque table reflétant la modélisation.
J'ai créé un type de champ ("Fieldtype") de nom "Revenu" pour indiquer les min et max de tous les champs de ce type
Nom | Type |
---|---|
tranche1 à tranche4 | Revenu |
coef1 à coef4 | FLOAT |
revenu | Revenu |
deduction | Revenu |
nom | STRING |
nbparts | FLOAT |
PEL | Revenu |
Exemple pour le champ PEL on lui donne pour type Revenu
On précise le format dans la base de données
Pour le champ nombre de parts j'ai mis un step à 0.5 pour avoir les demi parts
Création des vues administrateur associées au composant
Ce sont les vues (admin views) qui déterminent l'association entre les listes de champs et les tables de la base de données, et la création des contrôleurs/modèles associés
L'association est faite au travers des "Linked Fields", pris par rapport aux "Fields" créés précédemment.
Pour ma part 2 vues:
- la vue Année, (Year dans la configuration) associée aux 2 vues Years (pour la liste d'éléments) et Year pour chaque élément
Impôt - read/write
Edit View: impot
List View: impots
Linked Fields (Impot)
Field | Admin Behaviour | Order in list views | Tab | Order in Edit |
---|---|---|---|---|
Name (Key - Required) [name - text] | Show in All List Views | 1 | Details | 1 |
Tranche 1 [tranche1 - revenu] | Default | 0 | Details | 2 |
Tranche 2 [tranche2 - revenu] | Default | 0 | Details | 3 |
Tranche 3 [tranche3 - revenu] | Default | 0 | Details | 4 |
Tranche 4 [tranche4 - revenu] | Default | 0 | Details | 5 |
Taux tranche 1 [taux1 - taux] | Default | 0 | Details | 6 |
Taux tranche 2 [taux2 - taux] | Default | 0 | Details | 7 |
Taux tranche 3 [taux3 - taux] | Default | 0 | Details | 8 |
Taux tranche 4 [taux4 - taux] | Default | 0 | Details | 9 |
- la vue impots, associée aux 2 vues Impôts (pour la liste d’éléments) et Impôt pour chaque élément
Year - read/write
Edit View: year
List View: years
Linked Fields (Annee)
Field | Admin Behaviour | Order in list views | Tab | Order in Edit |
---|---|---|---|---|
Name (not-required) [name - text] | Show in All List Views | 1 | Details | 0 |
Year [year - sql] | Show in All List Views | 2 | Details | 1 |
Revenu [revenu - revenu] | Show in All List Views | 3 | Details | 2 |
Nombre de parts [nbparts - integer] | Show in All List Views | 4 | Details | 3 |
Déduction [deduction - radio] | Show in All List Views | 5 | Details | 4 |
PEL [pel - revenu] | Default | 0 | Details | 6 |
Dons [dons - revenu] | Default | 0 | Details | 7 |
Classes générées par Component Builder
Associer les vues au composant
C'est à faire dans l'edition du composant
J'ai coché les cases pour ajouter les liens au "dashboard" et au menu
Compiler le composant
Cela permet de générer un package installable avec tous les sources associés
Aller dans le Menu Component Builder/Compile
Installer le composant
cliquer sur le bouton "Install com_jtax xxx"
Tester le dashboard
On obtient le "dashboard" suivant:
Et si on clique sur year add
Et si on clique sur Impot add
Ajouter un bouton à la vue admin
Aller dans la vue admin/onglet Custom Buttons
Le code php sera rajouté au controleur associé.
Test du bouton Calculer
Gestion des vues pour le site
On doit d'abord créer les "Dynamic Get"
Ajout des Dynamic Get
Pour ma part j'en ai ajouté 2 un pour la liste des Impôts et un pour l'affichage de l'impôt
Pour la liste j'ai séléctionné le type getListQuery.la table Impôt
Le principal intérêt est de pouvoir filtrer les modèles non publiés (onglet "Tweak" )
Pour la liste j'ai ajouté une jointure pour récupérer le nom de l'année considérée ("year_name") au niveau du modèle
Pour les items "Impôt" j'ai sélectionné le type getItem
Ajout de la vue Site pour les liste d'Impôts
Ajout d'un code spécifique pour la vue List du site
Le code ajouté est celui-ci (Add/edit Custom code)
<table class="table table-striped">
<?php foreach ($this->items as $i => $item): ?>
<?php
$canCheckin = $this->user->authorise('core.manage', 'com_checkin') || $item->checked_out == $this->user->id || $item->checked_out == 0;
$userChkOut = Factory::getContainer()->
get(\Joomla\CMS\User\UserFactoryInterface::class)->
loadUserById($item->checked_out ?? 0);
$canDo = JtaxHelper::getActions('impot',$item,'impots');
?>
<tr class="row<?php echo $i % 2; ?>">
<td class="hidden-phone">
<a href="<?php echo $edit; ?>&id=<?php echo $item->id; ?>"><?php echo $this->escape($item->name); ?></a>
</td>
<td class="hidden-phone">
<?php echo $this->escape($item->year_name); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<div style="display:none;">
<?php echo LayoutHelper::render('input', []); ?>
</div>
Ajout de la vue Site associée à la vue admin
A déclarer dans la vue admin
Classes générées par la partie site