Créer une commande message avec une liste déroulante

Hello,

dans la continuité de mon précédent post, je cherche à savoir comment faire pour avoir une liste de choix déroulante à la place du champ title sur une commande de type action/message

j’ai donc une cmd action/message, nommée ‹ ma super commande ›
lorsque je créé un scénario et que je sélectionne cette commande ‹ ma super commande › , les champs ‹ title › et ‹ message › s’affichent (classique), mais j’aimerais que ‹ title › soit une liste déroulante avec un ensemble de valeur qui aurait déjà été défini dans les param de la cmd.

possible ?

any help around here !? :slight_smile:

Salut,
tu peux faire un « template » pour la comande pour le scénario je pense avec ton propre html pour ta commande, faut que je vérifie comment ca fonctionnait, je n’ai jamais vmt utilisé ca et je ne sais même pas si cela à passé la v4 ou pas, je suppose que oui.
Mais c’est beaucoup plus de code à maintenir que le title_possibility_list, faut voir la vrai valeur ajoutée juste pour un scénario ou si tu expliques bien dans la doc les gens devraient pouvoir s’en sortir IMHO

mais … t’es sur qu’elle est lue !? :slight_smile:

Non, mais on se fera un plaisir des les renvoyer dessus quand ils poseront la question :wink:

Donc pour faire un template pour la commande pour un scénario, il faut implémenter la fonction toHtml sur la commande, celle ci sera appelée chaque fois que la commande doit être affichée.

donc faut commencer par tester si on est dans le cas du scénario ou pas puis coder les replace etc
s’inspirer de cmd::toHtml() du core et du template du core ici core\template\scenario\cmd.action.message.default.html

public function toHtml($_version = 'dashboard', $_options = '') {
    $_version = jeedom::versionAlias($_version);
    if ($_version != 'scenario') return parent::toHtml(); // pour les view & dashboard
    ...
}

edit: attention que s’il y a existe une méthode toHtml par défaut les utilisateurs ne pourront plus choisir le template de la commande (même pour dashboard et mobile)

il faut penser à définir $_widgetPossibility en propriété de la class cmd;
par exemple:

    public static $_widgetPossibility = array(
        'custom' => array(
            'widget' => true,
            'visibility' => true,
            'displayName' => true,
            'displayIconAndName' => true,
            'optionalParameters' => false,
        )
    );

ou plus simplement ceci si on veut tout permettre (voir doc développeur pour plus de détails):

    public static $_widgetPossibility = array(
        'custom' => true
        )
    );

merci @Mips, je vais creuser ça … mais ca parait en effet plus galère ! :woozy_face:

@Thibaut_T, dans la doc de discord, on voit justement des listes :

voir des messages avec plus de 5 champs :hushed:

la méthode proposée par Mips est celle que tu utilises aussi ?

je suppose (mais je suis curieux de la réponse): a savoir que si tu fais ton propre template tu es libre de rajouter d’autres champs comme on voit qui vont arriver dans le array $_options que donc tu peux gérer dans ton code cmd::execute du plugin après mais franchement je ne conseille pas du tout de le faire car alors tu casses interopérabilité avec les autres plugins gérant les messages: tous les plugins ayant des commandes messages gèrent title & message, notamment ceux permettant d’organiser les flow de notifications comme notification manager ou notification queue.

Donc si plusieurs champs c’est mieux de les « serialiser » dans le title sous forme key=value par exemple ainsi cela peut fonctionner en mode « dégradé » => l’utilisateur pourra toujours formater son title comme attendu par le plugin même s’il n’a pas le bon template affiché

1 « J'aime »

je suis preneur aussi de ton code @Mips. J’utilise aussi la méthode @Thibaut_T.
je l’ai fait dans le #plugin-freebox_os pour uniquement les scénarios. C’est peut-être pas la bonne méthode c’est peut-être l’occasion que je le mette correct

https://github.com/JEALG/Jeedom-Freebox_OS/blob/master/core/class/Freebox_OS.class.php#L846

public function getWidgetTemplateCode($_version = 'dashboard', $_clean = true, $_widgetName = '')
	{
		$data = null;
		if ($_version != 'scenario') return parent::getWidgetTemplateCode($_version, $_clean, $_widgetName);
		list($command, $arguments) = explode('?', $this->getConfiguration('request'), 2);
		if ($command == 'wol')
			$data = getTemplate('core', 'scenario', 'cmd.WakeonLAN', 'Freebox_OS');
		if ($command == 'add_del_mac')
			$data = getTemplate('core', 'scenario', 'cmd.mac_filter', 'Freebox_OS');
		if ($command == 'add_del_dhcp')
			$data = getTemplate('core', 'scenario', 'cmd.dhcp', 'Freebox_OS');
		if ($command == 'redir')
			$data = getTemplate('core', 'scenario', 'cmd.port_forwarding', 'Freebox_OS');
		if (!is_null($data)) {
			if (version_compare(jeedom::version(), '4.2.0', '>=')) {
				if (!is_array($data)) return array('template' => $data, 'isCoreWidget' => false);
			} else return $data;
		}
		return parent::getWidgetTemplateCode($_version, $_clean, $_widgetName);
	}

Merci de ton retour

Bon ba … suspens …! :slight_smile:

Hello,

J’avais pas mis le sujet en surveillé. Erreur de ma part.

Alors ma méthode était d’overide une fonction de la class cmd. Cela permet de revoyez du code HTML différents au scénario et donc de faire a peux prêt ce que tu veux.

Je pense pas que sa soit la méthode la plus propre.
Mais c’est la seul que j’ai trouvé.
Elle a également un petit défaut, c’est la charge de travail pour la rendre compatible avec la sauvegarde des scénarios.

PS : je vais regarder dans les plugin de @Mips pour voir comment il faut et savoir si cela peux être mieux.

Donc c’est presque la même technique que mips mais je pleure a chaque fois que je dois en faire

Cordialement
Thibaut

2 « J'aime »

Désolé @JAG, j’ai raté ta question (moi aussi :sweat_smile:)
Rappel noté.

1 « J'aime »

Du coup je pense qu’on parle de la même chose : méthode toHtml à implémenter.

Pas de soucis @Mips l’essentiel c’est que l on arrive à trouver qq chose de correct
Merci de ton retour @Thibaut_T Quand tu as trouvé la solution
Bonne journée

Hello,

Oui on parle de la même chose

Cordialement
Thibaut