Il existe plusieurs possibilités pour faire des widgets personnalisés pour les plugins :
Là-dessus, rien de spécial, la fonction toHtml doit retourner le widget en html, vous avez un exemple là
L’important est surtout les 1ères lignes :
$replace = $this->preToHtml($_version);
if (!is_array($replace)) {
return $replace;
}
La fonction preToHtml renvoi :
Le système de template de widget dans le code est en fait exactement le même que celui sur la page Outils -> Widget de jeedom.
Voici un exemple :
public static function templateWidget(){
$return = array('info' => array('string' => array()));
$return['info']['string']['state'] = array(
'template' => 'tmplmultistate',
'test' => array(
array('operation' => '#value# == 2','state_light' => '<i class="icon maison-vacuum6"></i>','state_dark' => '<i class="icon maison-vacuum6"></i>'),
array('operation' => '#value# == 3','state_light' => '<i class="fa fa-pause"></i>','state_dark' => '<i class="fa fa-pause"></i>'),
array('operation' => '#value# > 3 || #value# < 2','state_light' => '<i class="fa fa-home"></i>','state_dark' => '<i class="fa fa-home"></i>')
)
);
return $return;
}
Ici, on va créer un nouveau widget basé sur le template “tmplmultistate” (vous avez la liste des templates ici c’est ceux avec tmpl dans leur nom), pour une commande de type info et sous type string.
IMPORTANT
Chaque template est pour un type et sous-type donnés, il faut donc bien vérifier que le template que vous voulez utiliser existe pour le type et sous-type
Ensuite, vu que c’est un template avec plusieurs états, il faut définir les icônes en fonction de l’état. Ça se fait dans la partie test du tableau.
Exemple : pour le premier test, on dit si la valeur de la commande vaut 2 alors il faudra remplacer le tag #_state_# (dans le code html du template) par
Un autre exemple basé sur un autre template pourrait être :
public static function templateWidget(){
$return = array('info' => array('string' => array()));
$return['info']['binary']['toto'] = array(
'template' => 'tmplicon',
'replace' => array(
'#_icon_on_#' => '<i class=\'icon_green icon jeedom-porte-ferme\'></i>',
'#_icon_off_#' => '<i class=\'icon_red icon jeedom-porte-ouverte\'></i>'
)
);
return $return;
}
Ici, je crée un widget toto basé sur le template “tmplicon” en type info et sous-type binaire. Quand il vaut 1 alors l’icône sera et quand il vaut 0, ça sera
TIPS
Petite astuce, vous pouvez à la place d’une icône mettre une balise image (attention au chemin)
Ensuite, pour utiliser votre widget :
$cmd->setTemplate('dashboard','neato::state');
$cmd->setTemplate('mobile','neato::state');
C’est comme pour un widget normal sauf pour le nom du widget qui est sous la forme id_plugin::nom_widget. Pour le 2eme exemple, ça sera id_plugin::toto