J’essaye de développer un plug-in, après avoir lut le tutoriel de ZygOm4t1k je rencontre un pb.
En effet pour commencer je voulais juste que mon plug-in créer un commande info (numeric) et une action (un spider) pour pouvoir la modifier. Le tout avec les widget de basse.
La création se passe bien, je peu modifier manuellement ma commande info (via un scénario) par contre ma commande action reste sans effet.
ci dessous ma fonction postSave et mon plugin s’appelle « liteAuto »
public function postSave() {
$info = $this->getCmd(null, 'duree');
if (!is_object($info)) {
$info = new liteAutoCmd();
$info->setLogicalId('duree');
$info->setName(__('Durée', __FILE__));
$info->setIsVisible(0);
$info->setisHistorized(0);
}
$info->setEqLogic_id($this->getId());
$info->setType('info');
$info->setSubType('numeric');
$info->save();
$action = $this->getCmd(null, 'var_duree');
if (!is_object($action)) {
$action = new liteAutoCmd();
$action->setLogicalId('var_duree');
$action->setName(__('Var_Durée', __FILE__));
}
$action->setEqLogic_id($this->getId());
$action->setConfiguration('infoName', $info->getId());
$action->setValue($info->getId());
$action->setType('action');
$action->setSubType('slider');
$action->save();
}
si vous voulez que la commande action fasse une action alors il faut coder … l’action ! ca ne va pas se faire tout seul
cf. la doc et la methode execute
sinon c’est inutile de refaire le save des commandes à chaque postSave si la commande existe déjà
Un widget n’est qu’un affichage, il ne se passera donc rien en faisant bouger le slider sauf changer la valeur du slider lui même.
Il faut donc prendre en compte ce changement dans le code du plugin, comme l’indique Mips, et faire les actions souhaité donc par exemple définir la valeur de la commande info.
Ma commande a un id logic ‹ consigne_cursor ›
Quand on bouge le slider, cela lance la fonction execute.
Je souhaite mettre à jour ma commande de type info pour voir la valeur qui s’appelle consigne. voilà le bout de code que j’ai mis en place et qui fonctionne :
class thermoPIDCmd extends cmd {
// Exécution d'une commande
public function execute($_options = array()) {
if ($this->getLogicalId() == 'consigne_cursor') {
$eqlogic = $this->getEqLogic();
$cmd = $eqlogic->getCmd('info', 'consigne');
$cmd->event($_options['slider']);
//$eqlogic->execute();
}
}
}
Il est préférable d’utiliser la fonction checkAndUpdateCmd() de l’eqLogic. Cette fonction effectue quelques vérifications (est-ce que l’équipement est actif, par exemple) et valide la valeur avant d’appeler la fonction event() de la commande.
checkAndUpdateCmd($_logicalId, $_value, $_updateTime = null) $_logicalId peut être le logicalId de la commande à mettre à jour ou un objet cmd.
Je pense n’être pas trop mal ou, au moins, moins brouillons :
public function execute($_options = array()) {
log::add('liteAuto','debug','Exécution de la fonction Execute par ' . $this->getEqLogic()->getHumanName());
switch ($this->getSubType()) {
case 'slider':
log::add('liteAuto','debug','- Action sur Slider ');
$virtualCmd =virtualCmd::byId( $this->getConfiguration("infoName"))->getLogicalId();//Récupération du logicalId de la commande à modifier.
$eqlogic->checkAndUpdateCmd($virtualCmd, $_options['slider']);
break;
}
}
le « infoName » est définit dans le postSave et définit la commande de type info à modifier associé avec la commande
la variable se nomme virtualCmd mais tu y met un logicialId (un string), c’est trompeur; (et ca n’a rien d’une commande d’un virtuel )
et en fait c’est inutile, passe l’objet commande directement à checkAndUpdateCmd qui gère ca;
tu appelles la class virtualCmd qui appartient au plugin virtuel! si le plugin n’est pas installé, ton code crash.
$eqlogic n’est défini null part, ca ne peut pas fonctionner
donc ces points ensembles donnent:
$cmd = cmd::byId($this->getValue()); //Récupération de la commande à modifier.
$this->getEqLogic()->checkAndUpdateCmd($cmd, $_options['slider']);
// ou $cmd->event($_options['slider']; // comportement légèrement différent
Le but était de comprendre comment fonctionne les plug-in, le tutoriel de ZygOm4t1k est vraiment bien fait mais il n’explique pas comment modifier une commande info depuis une action (pas en passant le $cmd en argument à checkAndUpdateCmd).