J'étends Joomla 3.x avec un composant personnalisé.
À ce stade, mon modèle a
Maintenant, un travailleur - disons Mary - peut avoir un ou plusieurs rôles. Chaque rôle s'accompagne d'une date particulière à laquelle Mary a reçu ce rôle: Mary est enseignante depuis le 01/03/2016 et conseillère depuis le 15/02/2015.
Mon tableau de liens:links.id: 1, worker.id: 3, role.id: 2, date: 2016-03-01
links.id: 2, worker.id: 3, role.id: 3, date: 2015-02-15
Dans le backend de Joomla, j'ai un ouvrier et une vue de rôle. Dans la vue worker, j'aimerais aller au profil de Mary et ajouter/supprimer des rôles.
Je n'ai jamais vu ça.
Quel type de champ utiliserais-je pour cela? Comment est-il fait?
Si j'ai bien compris, vous voulez gérer les liens vers les rôles de Mary directement à partir du formulaire de profil de Mary, n'est-ce pas? Je ne pense pas que vous devriez utiliser un type de champ spécial pour cela, ce que vous voulez, c'est un autre formulaire correspondant à la table des liens. Vous devez ajouter une section de formulaire de lien au formulaire de profil, sous la forme d'un onglet supplémentaire sur le formulaire. Le plus simple est de laisser cette zone désactivée avant que le profil ne soit réellement enregistré, de sorte que vous ayez un identifiant à insérer dans la table des liens. Ensuite, vous ajoutez des fonctionnalités à utiliser ajax pour ajouter des liens à la table des liens.
Cela signifie que vous devez au moins créer les éléments suivants:
<jdoc:include type="component" />
_http://examlpe.com?option=com_yourcomponen&view=linkform&tmpl=ajax
_. Cela devrait seulement renvoyer le formulaire, pas de HTML supplémentaire.tmpl
et la valeur ajax
à la forme. Test avec _http://examlpe.com?option=com_yourcomponen&view=linkform&tmpl=ajax&layout=ajax
_$.get('index.php', 'option=com_yourcomponen&view=linkform&tmpl=ajax&layout=ajax', function(data){$('#somediv').html(data);})
$.post($('#form-link').attr('action'), $('#form-link').serialize(), function(data){$('#otherdiv').html(data);}
, lié au bouton submit du formulaire - lien.Peut-être que vous avez déjà certaines de ces fonctionnalités.
Il est difficile d’être plus précis, à moins de donner plus de détails et un code sur lequel travailler.
Si vous ne l'avez pas déjà fait, il serait avantageux d'utiliser un générateur de composants pour créer un squelette de composant à votre place. Les parties où j'ai écrit Vous avez peut-être déjà ceci, c'est un code qui existera probablement déjà si vous avez utilisé un générateur de composants pour créer votre squelette d'application. J'utilise composant-creator.com, c'est vraiment bon mais assez cher, et le jeu en vaut probablement la peine s'il s'agit d'un projet commercial. Mais je pense qu'il y en a aussi d'autres.
Créer un champ personnalisé serait le moyen le plus propre de le faire.
Il n'y a pas de type de champ standard qui fait ce que vous voulez, mais vous pouvez probablement créer une sous-classe de l'un d'entre eux. Le champ personnalisé vous permettrait d’injecter toute interface JavaScript dont vous pourriez avoir besoin.
Une approche probable consisterait à utiliser le champ de formulaire pouvant être répété , car il offre déjà une grande partie de la flexibilité requise et, évidemment, de multiples valeurs, ainsi que l’utilisation de votre champ personnalisé.
Ce que je ferais:
À la vue des travailleurs (je suppose que vous avez une table avec tous les travailleurs ou quelque chose du genre), vous avez des liens qui redirigent vers la vue Profil
Exemple: <a href="index.php?option=com_custom&view=profile&id=2"></a>
Dans cette vue, vous aurez toutes les informations de ce travailleur (informations personnelles, rôles qu'il est actuellement assigné) et vous pouvez ajouter les fonctionnalités de votre choix.
Personnellement, je créerais une liste déroulante multiple avec tous les rôles ou une case à cocher multiple et utiliserais ajax pour ajouter - supprimer des rôles.
Ajoutez 3 champs de formulaire à votre vue des travailleurs:
Vous pouvez utiliser un type de champ de calendrier Joomla pour le rendre agréable et facile pour vous. Dans votre fonction de sauvegarde des contrôleurs, vous pouvez prendre les 3 dates et les ajouter à un tableau comme ceci:
$assignments = array();
$assignments['manager_date'] = $manager_date
$assignments['teacher_date'] = $teacher_date
$assignments['advisor_date'] = $advisor_date
Où $ manager_date, $ teacher_date et $ advisor_date ont été extraits de l'entrée de formulaire soumise.
JSON code le tableau $ assignments et le sauvegarde dans un champ de texte de votre table workers.
Si vous avez besoin d'afficher les dates ailleurs, il suffit de json_decode les données et de les formater avec la fonction de date de php.
Très simple à faire et devrait accomplir exactement ce que vous recherchez.
Vous devriez pouvoir ajouter les 3 champs dans administrateur> composants> votre_nom_composant> modèles> formulaires> workers.xml
Cela suppose que votre composant dispose d'une fonction de sauvegarde personnalisée et n'utilise pas uniquement la relation de table Joomla par défaut. Dans le pire des cas, vous remplacez la fonction de sauvegarde et la fonction de mise à jour de votre contrôleur.