Comment trier les modes?

Bonjour,
Quelqu’un pourrais m’expliquer, si c’est possible, comment trier les différents modes, d’un équipement du plugin mode sans passer par un affichage en mode tableau?
Apparemment, le tri est systématiquement alphabétique et je voudrais pouvoir les classer de façon logique.
Même si je crées les modes dans le bon ordre l’affichage reste alphabétique.
Merci

Salut,

Depuis le résumé domotique, tu peux réorganiser l’ordre des modes :
image

Sur le Dashboard la tuile aura cet ordre
image

1 « J'aime »

J’ai toujours pesté que ça ne marchait pas directement depuis le plugin… Tu as fait ma journée ! Merci :kissing_closed_eyes:

En fait je pense que c’est un bug…
il y a bien une notion de tri depuis le plugin
image
Et en triant (en deplacant le titre à la souris comme les blocs scenario)
image
l’affichage du widget se réorganise bien en conséquence
image

Mais parfois ça marche pas !! En regardant dans la base… c’est le bordel !
image
Donc forcement dans le meilleur des cas, ça affiche l’ordre alphabetique

Coté code, les ordres sont écrits en dur pour les actions obligatoires …

		$currentMode->setName(__('Mode', __FILE__));
		$currentMode->setEqLogic_id($this->id);
		$currentMode->setLogicalId('currentMode');
		$currentMode->setType('info');
		$currentMode->setOrder(1);
		$currentMode->setSubType('string');
		$currentMode->setDisplay('generic_type', 'MODE_STATE');
		$currentMode->save();

		$previousMode = $this->getCmd(null, 'previousMode');
		if (!is_object($previousMode)) {
			$previousMode = new modeCmd();
			$previousMode->setTemplate('dashboard', 'tile');
			$previousMode->setTemplate('mobile', 'tile');
		}
		$previousMode->setName(__('Mode precedent', __FILE__));
		$previousMode->setEqLogic_id($this->id);
		$previousMode->setLogicalId('previousMode');
		$previousMode->setType('info');
		$previousMode->setOrder(1);
		$previousMode->setSubType('string');
		$previousMode->setIsVisible(0);
		$previousMode->save();
		
		$returnPreviousMode = $this->getCmd(null, 'returnPreviousMode');
		if (!is_object($returnPreviousMode)) {
			$returnPreviousMode = new modeCmd();
		}
		$returnPreviousMode->setName(__('Retour mode précedent', __FILE__));
		$returnPreviousMode->setEqLogic_id($this->id);
		$returnPreviousMode->setLogicalId('returnPreviousMode');
		$returnPreviousMode->setType('action');
		$returnPreviousMode->setOrder(3);
		$returnPreviousMode->setSubType('other');
		$returnPreviousMode->setDisplay('generic_type', 'MODE_SET_STATE');
		$returnPreviousMode->setDisplay('icon', '<i class="fas fa-reply"></i>');
		$returnPreviousMode->save();

+1
J’avais abandonné l’idée de réorganiser les modes et me forçait à mettre des noms adéquat suivant l’ordre alphabétique, ce qui parfois donnait des choses pas très compréhensible :laughing:

Voilà une correction brutale dans la fonction postSave()
Les actions obligatoires de 1 à 3
Les autres dans l’ordre d’affichage DANS le plugin

	public function postSave() {
		$currentMode = $this->getCmd(null, 'currentMode');
		if (!is_object($currentMode)) {
			$currentMode = new modeCmd();
			$currentMode->setTemplate('dashboard', 'tile');
			$currentMode->setTemplate('mobile', 'tile');
		}
		$currentMode->setName(__('Mode', __FILE__));
		$currentMode->setEqLogic_id($this->id);
		$currentMode->setLogicalId('currentMode');
		$currentMode->setType('info');
		$currentMode->setOrder(1);
		$currentMode->setSubType('string');
		$currentMode->setDisplay('generic_type', 'MODE_STATE');
		$currentMode->save();

		$previousMode = $this->getCmd(null, 'previousMode');
		if (!is_object($previousMode)) {
			$previousMode = new modeCmd();
			$previousMode->setTemplate('dashboard', 'tile');
			$previousMode->setTemplate('mobile', 'tile');
		}
		$previousMode->setName(__('Mode precedent', __FILE__));
		$previousMode->setEqLogic_id($this->id);
		$previousMode->setLogicalId('previousMode');
		$previousMode->setType('info');
		$previousMode->setOrder(2);
		$previousMode->setSubType('string');
		$previousMode->setIsVisible(0);
		$previousMode->save();
		
		$returnPreviousMode = $this->getCmd(null, 'returnPreviousMode');
		if (!is_object($returnPreviousMode)) {
			$returnPreviousMode = new modeCmd();
		}
		$returnPreviousMode->setName(__('Retour mode précedent', __FILE__));
		$returnPreviousMode->setEqLogic_id($this->id);
		$returnPreviousMode->setLogicalId('returnPreviousMode');
		$returnPreviousMode->setType('action');
		$returnPreviousMode->setOrder(3);
		$returnPreviousMode->setSubType('other');
		$returnPreviousMode->setDisplay('generic_type', 'MODE_SET_STATE');
		$returnPreviousMode->setDisplay('icon', '<i class="fas fa-reply"></i>');
		$returnPreviousMode->save();
		
		$existing_mode = array();
		if (is_array($this->getConfiguration('modes'))) {
			$i=3;
			foreach ($this->getConfiguration('modes') as $key => $value) {
				$existing_mode[] = $value['name'];
				$cmd = $this->getCmd(null, $value['name']);
				if (!is_object($cmd)) {
					$cmd = new modeCmd();
				}
				$cmd->setName($value['name']);
				$cmd->setEqLogic_id($this->id);
				$cmd->setType('action');
				$cmd->setSubType('other');
				$i=$i+1;
				$cmd->setOrder($i);
				$cmd->setLogicalId($value['name']);
				$cmd->setDisplay('generic_type', 'MODE_SET_STATE');
				if (isset($value['icon'])) {
					$cmd->setDisplay('icon', $value['icon']);
				} else {
					$cmd->setDisplay('icon', '');
				}
				$cmd->save();
			}
		}
		
		foreach ($this->getCmd() as $cmd) {
			if ($cmd->getType() == 'action' && !in_array($cmd->getLogicalId(), $existing_mode) && $cmd->getLogicalId() != 'returnPreviousMode') {
				$cmd->remove();
			}
		}
	}

@Loic @Kiboost si ça vous dit de porter la correction ou de faire mieux

1 « J'aime »

En attendant que le bug soit officiellement corrigé, on va se contenter de ta solution.
Merci
@naboleo
Effectivement, on peut déplacer les modes comme dans un virtuel mais ça ne change pas pour autant l’ordre de présentation sur le dashboard.

CTRL+F5 sinon c’est le cache qui s’affiche

C’est bien ce que j’ai fait.

Vérifie bien que tu as sauvegardé le php et le mode ensuite … Je peux t’assurer que sous Chrome ça fonctionne

image

Sachant qu’à la prochaine mise à jour, elle serait perdue, je n’ai pas modifié le code du plugin.
La solution de @kaktusatomik me convient pour le moment.
Merci quand même.

La fréquence de mise à jour de plugin est loin d’être énorme…
Et si tu modifie ton mode (ou son contenu)… Il faut recommencer le tri

Finalement, je n’ai pas pu résisté et j’ai modifié le code du plugin comme tu me l’as indiqué.
Bien évidemment, ça marche.
Juste un point, la fonction s’appelle postSave et pas post_Save.
J’ai cherché dans tous les sources à la recherche de cette fonction jusqu’à ce que je lise ton code où effectivement elle a le bon nom.
Merci encore.

J’ai corrigé le nom dans le texte, merci

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.