Bouton avec image a la place du texte

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 »

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

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

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

Salut,

J’essaye en vain ta methode mais je bloque…

Mon premier essai consite a creer un Widget ‹ action › comme ceci:
image

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

C’est pas du tout ça qu’il faut faire.

Tu as fait la méthode templateWidget comme dans la doc?

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:
image

Je continue de jouer avec ça mais je pense avoir compris le principe.
Des tuyaux sont toujours les bienvenus :slight_smile:

Merci!!!

Sébastien