J'ai un composant Joomla 3 personnalisé qui permet de créer des utilisateurs dans l'interface et d'ajouter des champs à une autre table. Maintenant, je dois un peu changer cette procédure: je dois envoyer un email au nouvel utilisateur avec son nom d'utilisateur et son mot de passe lorsqu'il est enregistré.
En théorie, c'est vraiment trivial. Dans mon modèle, je devrais mettre à jour la fonction save () et, après la sauvegarde, j'envoie le courrier électronique. Et c'est correct. Mais le problème est le suivant: comment savoir que je crée un nouvel utilisateur et non une mise à jour et ancien utilisateur? J'ai consulté la documentation de Joomla3, mais je ne sais pas comment faire cela ...
Pouvez-vous m'aider s'il vous plaît?
J'ai essayé toutes les méthodes possibles et l'option la plus sûre consiste à ajouter un répartiteur avant les fonctions de sauvegarde, puis à le détacher.
Implémentez la fonction de sauvegarde de cette manière dans votre modèle:
public function save ($data)
{
$dispatcher = JDispatcher::getInstance();
$eventHandler = new EventHandler($dispatcher, $this);
$return = parent::save($data);
$dispatcher->detach($eventHandler);
return $return;
}
Ajoutez la classe suivante à votre modèle:
class EventHandler extends JEvent
{
private $model = null;
public function __construct (&$subject, $model)
{
parent::__construct($subject);
$this->model = $model;
}
public function onContentBeforeSave ($context, $event, $isNew)
{}
public function onContentAfterSave ($context, $event, $isNew)
{
if ($context != 'com_dpcalendar.event' && $context != 'com_dpcalendar.form')
{
return;
}
if ($isNew)
{
// send mail
}
}
public function onContentBeforeDelete ($context, $event)
{}
public function onContentAfterDelete ($context, $event)
{}
public function onContentChangeState ($context, $pks, $value)
{}
}
Je sais que cela ressemble à une grosse surcharge mais cela vous fera économiser.
Si votre modèle est hérité de la classe JModelAdmin
, vous pouvez rechercher un nouvel enregistrement comme suit:
$isNew = $this->getState($this->getName() . '.new');
Sinon, vous devriez vérifier les données que vous enregistrez - que la clé primaire soit définie ou non. Voir cette partie du code de JModelAdmin
class.