Sattaz
Janvier 24, 2023, 5:54
1
Bonjour a tous!
Je souhaiterai avoir un bouton dans mon plugin avec une image dessus a la place du texte.
Y’a-t-il un moyen de faire cela lors de la creation des commandes depuis la function postSave() du plugin? (ou une autre technique?)
Merci,
Sebastien
1 « J'aime »
Mips
Janvier 24, 2023, 6:34
2
Salut,
L’image c’est juste une icone comme celles qu’on peut sélectionner dans la liste des commandes ou vmt une image?
Pour les icones oui, regardes d’autres plugins officiels
Pour les images je pense que le plus simple c’est un widget avec le « nouveau » systeme intégré au core
Sattaz
Janvier 24, 2023, 7:10
3
Bonsoir @Mips ,
Merci de toujours repondre a mes questions, c’est sympa!
Oui, vraiment une image …
Je sais le faire avec un widget mais je ne vais quand meme pas demander aux utilisateurs de faire ca ou bien ?
On peut pas automatiquement creer ce widget et l’assigner aux commandes? (ou un truc dans ce style …)
Sinon c’est pas bien grave, c’est juste de l’estetique.
Merci encore,
Sebastien
Mips
Janvier 24, 2023, 7:55
4
Oui
Et il n’y a même pas besoin d’écrire le moindre bout de code html.
Tu peux regarder le code de plugin-kroomba comme exemple
La fonction à écrire est templateWidget
(il y a certainement d’autres plugins qui le font mais c’est le premier qui me vient à l’esprit)
Et la doc est ici https://doc.jeedom.com/fr_FR/dev/widget_plugin
Sattaz
Janvier 25, 2023, 8:06
5
Salut,
J’essaye en vain ta methode mais je bloque…
Mon premier essai consite a creer un Widget ‹ action › comme ceci:
Puis de l’appeler dans le plugin a la creation des commandes:
$action = $this->getCmd(null, 'EVSE_Start');
if (!is_object($action)) {
$action = new OpenEVSECmd();
$action->setLogicalId('EVSE_Start');
$action->setName(__('StartCharge', __FILE__));
}
$action->setType('action');
$action->setSubType('other');
$action->setDisplay("showNameOndashboard",0);
//$action->setTemplate('dashboard','OpenEVSE::BoutonOn');
$action->setTemplate('dashboard','BoutonOn');
$action->setEqLogic_id($this->getId());
$action->setOrder(10);
$action->save();
Mais bon ca ne fonctionne pas … je seche …
Un petit coup de pouce?
Merci,
Sebastien
Mips
Janvier 26, 2023, 5:42
6
C’est pas du tout ça qu’il faut faire.
Tu as fait la méthode templateWidget
comme dans la doc?
Sattaz
Janvier 26, 2023, 10:07
7
OK je crois avoir compris, j’ai fais ça :
Dans ma class.php j’ai rajouté la fonction templateWidget comme ceci
public static function templateWidget(){
$return = array('info' => array('string' => array()));
$return['action']['other']['On'] = array(
'template' => 'tmplicon',
'replace' => array(
'#_icon_on_#' => '<img class="img-responsive" src="plugins/OpenEVSE/core/img/on.jpg">',
'#_icon_off_#' => '<img class="img-responsive" src="plugins/OpenEVSE/core/img/on.jpg">'
)
);
$return['action']['other']['Off'] = array(
'template' => 'tmplicon',
'replace' => array(
'#_icon_on_#' => '<img class="img-responsive" src="plugins/OpenEVSE/core/img/off.jpg">',
'#_icon_off_#' => '<img class="img-responsive" src="plugins/OpenEVSE/core/img/off.jpg">'
)
);
return $return;
}
→ Bon je ne vois pas trop pourquoi je dois specifier icon_on et icon_off … je veux juste une image sur mon bouton…
Puis j’assigne comme ceci :
$action = $this->getCmd(null, 'EVSE_Start');
if (!is_object($action)) {
$action = new OpenEVSECmd();
$action->setLogicalId('EVSE_Start');
$action->setName(__('Start', __FILE__));
}
$action->setType('action');
$action->setSubType('other');
$action->setDisplay("showNameOndashboard",0);
$action->setTemplate('dashboard','OpenEVSE::On');
$action->setEqLogic_id($this->getId());
$action->setOrder(10);
$action->save();
Et ça donne:
Je continue de jouer avec ça mais je pense avoir compris le principe.
Des tuyaux sont toujours les bienvenus
Merci!!!
Sébastien