web-dev-qa-db-fra.com

JTable - Comment savoir quels champs sont mis à jour

Je crée un composant de ticket d'assistance personnalisé, où je dois suivre les activités des utilisateurs. Par exemple, si un utilisateur a créé le ticket, il doit alors être enregistré dans la table d'historique. Supposons que l'utilisateur souhaite mettre à jour l'un des champs (supposons qu'il s'agisse d'un ticket), il peut simplement éditer le sujet dans le formulaire et cliquer sur le bouton d'envoi déclenche la méthode JTable->save($data) qui enregistre le champ correspondant. (dans ce cas c'est le sujet)

Ma question est la suivante: comment savoir quels champs sont mis à jour dans la base de données?

Je vais chercher ces champs et les sauvegarder dans une base de données comme celle-ci:

John Doe a modifié l'objet du ticket le 19/05/2015

John Doe a créé son billet le 19/05/2015

Dois-je écrire un plugin pour y parvenir? Je ne m'attends pas à avoir un code. Juste un petit coup de pouce m'aiderait.

2
Sahil Purav

Votre question n'est pas tout à fait correcte. Votre bouton d'envoi appelle une méthode save() sur un contrôleur. Vous pouvez trouver le bon contrôleur en inspectant le champ de tâche du formulaire.

<input name="task" value="controllername.save" />

ou cela pourrait être dans un paramètre de l'attribut action du formulaire i.e.

<form action="index.php?option=com_component&task=controllername.save">

Ouvrez maintenant le controllername.php Et trouvez la méthode save().

Vous y trouverez un modèle en cours d'instanciation; au cas où il est implicite, tel que $this->getModel(), recherchez un modèle nommé comme contrôleur. Sinon, le nom sera épelé.

Ouvrez le modèle et recherchez-y la fonction save(). Très probablement, il obtiendra une instance d'un objet JTable, puis invoquera la méthode save().

Maintenant, au tout début de la fonction save() de votre modèle, vous aurez les nouvelles données disponibles et non encore conservées dans la base de données.

S'il s'agit d'une édition, le champ id sera défini, sinon, dans le cas d'un nouvel enregistrement, il sera 0 ou nul.

Si id est valide, interrogez la base de données pour connaître les valeurs actuelles, c.-à-d.

$oldValues = $db->setQuery('select * from #__tablename where id='.$db->quote($id))->loadObject();

Regardez la fonction et trouvez l'endroit où $someTableInstance.save() est appelée, puis examinez le résultat. Si cela réussit, l'édition a réussi.

Vous pouvez maintenant vérifier les données précédentes que vous avez stockées dans $oldValues, Les comparer avec le contenu de $data Et créer votre historique/fonctions de journalisation souhaitées.

1
Riccardo Zorn