web-dev-qa-db-fra.com

Composant d'arrière-plan personnalisé Joomla 3.x - Comment utiliser la table de liens dans les nouvelles vues et les vues modifiées?

J'étends Joomla 3.x avec un composant personnalisé.

À ce stade, mon modèle a

  1. travailleurs: Peter (id: 1), Paul (id: 2), Mary (id: 3)
  2. rôles: manager (id: 1), enseignant (id: 2), conseiller (id: 3)
  3. links: relie les rôles à un travailleur

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?

1
michi

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:

  • Ajoutez ce fichier dans votre /templates/yourtemplate/ajax.php contenant uniquement _<jdoc:include type="component" />_
  • Une vue de formulaire pour l'édition de liens. Ceci est appelé depuis le formulaire de profil et devrait avoir un champ de sélection pour le rôle et un champ de calendrier pour la date. Le formulaire est affiché en utilisant ajax sur le formulaire de profil. Testez le formulaire et votre modèle ajax avec _http://examlpe.com?option=com_yourcomponen&view=linkform&tmpl=ajax_. Cela devrait seulement renvoyer le formulaire, pas de HTML supplémentaire.
  • Remplacez la vue formulaire en copiant com_yourcomponent/views/linkform/tmpl/default.php dans templates/yourtemplate/html/com_yourcomponent/ajax.php et ajoutez une entrée masquée portant le nom tmpl et la valeur ajax à la forme. Test avec _http://examlpe.com?option=com_yourcomponen&view=linkform&tmpl=ajax&layout=ajax_
  • Un contrôleur de liaison qui étend JControllerForm. Peut-être remplacer la fonction d'édition pour rediriger vers la vue sous forme de lien. Ceci gérera les entrées de la section links du formulaire de profil (créer, mettre à jour et supprimer). (Vous avez peut-être déjà cela?)
  • Un modèle de lien pour gérer les données de lien. (Vous avez peut-être déjà cela?)
  • Ajax-fonctionnalite pour charger la vue de forme de lien sur la forme de profil. Cela pourrait être un bouton appelant $.get('index.php', 'option=com_yourcomponen&view=linkform&tmpl=ajax&layout=ajax', function(data){$('#somediv').html(data);})
  • Ajax pour poster les données, quelque chose comme $.post($('#form-link').attr('action'), $('#form-link').serialize(), function(data){$('#otherdiv').html(data);}, lié au bouton submit du formulaire - lien.
  • Fonctionnalité permettant de charger des liens existants dans la vue du formulaire de profil, en utilisant ajax ou en le chargeant avec le reste du formulaire de profil.

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.

0
jonasfh

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é.

0
Craig

Ce que je ferais:

  • Créer une nouvelle vue (appelons-le profil)
  • À 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.

0
IseNgaRt

Ajoutez 3 champs de formulaire à votre vue des travailleurs:

  1. manager_date
  2. date_enseignant
  3. date du conseiller

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.

0
Terry Carter