Designs avec id > 255 non visibles dans la liste des designs depuis Accueil / Design

Salut,

J’ai remarqué un problème d’affichage depuis le menu Jeedom « Accueil » => « Design ».
Les Designs avec un id > 255 ne sont pas affichés dans la liste des designs.

Ils restent par contre accessibles en saisissant leur url directe : http://monJeedom/index.php?v=d&p=plan&plan_id=258

Rien vu d’anormal dans le code. Une limitation de la récupération en bdd ?

Génération du menu de la liste des Designs (Core)
<li>

    <a id="bt_gotoPlan" class="submenu">

        <i class="fas fa-paint-brush"></i> {{Design}}

        <label class="drop-icon" for="drop-design"><i class="fas fa-chevron-down fa-2x"></i></label>

    </a>

    <input type="checkbox" id="drop-design">

    <?php

        $echo = '';

        foreach ((planHeader::all()) as $plan_menu) {

            if (!$plan_menu->hasRight('r')) {

                continue;

            }

            $echo .= '<li><a href="index.php?v=d&p=plan&plan_id=' . $plan_menu->getId() . '">' . trim($plan_menu->getConfiguration('icon', '<i class="fas fa-paint-brush"></i>') . ' ' . $plan_menu->getName()) . '</a></li>';

        }

        if ($echo != '') {

            echo '<ul>' . $echo . '</ul>';

        }

        ?>

</li>
Requête de récupération des Designs (Core)
	public static function all() {
		$sql = 'SELECT ' . DB::buildField(__CLASS__) . '
		FROM planHeader
		ORDER BY `order`';
		return DB::Prepare($sql, array(), DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__);
	}

Après investigation, je corrige mon post précédent : les designs d’id supérieurs à 255 sont bien remontés mais l’ordre des designs reste surprenant.

image

planHeader::all() effectue la requête suivante : SELECT * FROM `planHeader` order by `order`

Les différentes valeurs présentes en base sur mon Jeedom, avec leur répartition :

Je ne sais pas quand la colonne order est mise à jour à part à la création du design (9999) ou manuellement avec la méthode setOrder() ou graphiquement depuis la configuration du design :

Mais on pourrait imaginer ajouter la méthode allById() pour la classe planheader pour un tri cohérent dans nos algos persos (faute d’ordre cohérent en pratique) ? :slight_smile:

public static function allById() {

        $sql = 'SELECT ' . DB::buildField(__CLASS__) . '

        FROM planHeader

        ORDER BY `id`';

        return DB::Prepare($sql, array(), DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__);

}

Et aussi une récupération des designs triés par leur nom :

public static function allByName() {

        $sql = 'SELECT ' . DB::buildField(__CLASS__) . '

        FROM planHeader

        ORDER BY `name`';

        return DB::Prepare($sql, array(), DB::FETCH_TYPE_ALL, PDO::FETCH_CLASS, __CLASS__);

}

Au final, j’aurais découvert que je peux maintenant forcer l’ordre d’affichage de mes designs depuis le menu Jeedom :wink:

Du coup, j’ai passé la requête suivante pour retrouver l’ordre de mes designs par ordre de création depuis le menu Jeedom :
UPDATE `planHeader` SET `order`= `id` (A vous de prendre le risque de l’exécuter :wink: )

1 « J'aime »

Bonjour,
Il faut utiliser l’interface graphique et mettre l’order a la valeur pour le tri. J’ai juste rajouté en alpha un tri secondaire sur le nom, donc si il y a le meme order il prendra le nom pour trier.