Bonjour,
J'ai découvert il y à peu la notion de représentation intervallaire d'un arbre de données en cherchant à comprendre les champs lft et rgt de la table assets.
J'ai installé deux versions de joomla 3.4.3, un avec données d'exemple d'apprentissage en fr et l'autre sans données d'exemple.
De là dans un but d'apprentissage j'ai voulu représenter graphiquement cet arbre a partir de la base de données avec un peu de php/html/css.
Et là stupeur !!! sur les deux sites j'ai une erreur (ou alors j'ai pas compris) :
Pour le site sans données d'exemple, j'ai le noeud feuille "com.user.category" au "level" 1 soit au niveau de son noeud parent "com.user".
Pour le site avec données d'exemple, j'ai le noeud "com_messages" au meme niveau que "com_contact" jusque là normal mais la borne gauche du premier est supérieur a celle du second, et la borne droite du premier inferieure a celle du second !!!! bref ils se superposent dans l'arbre !
Une image parlant mieux qu'un discours, voici le pb du site avec donnees d'example, les noeuds sont en rgba pour voir la(les) superposition :
Mon code en question si vous voulez tester chez vous, à placer sur index.php choisir assets dans le formulaire (je suis pas dev donc indulgence éxigée )
Donc dès l'instal y'a des soucis dans cette table ou alors il faut que quelqu'un m'explique qlq chose qui a du m'eechapper.
Si une âme charitable peut m'indiquer comment fonctionne les droits d'accès grâce à cette table je suis preneur aussi.
Merci
PS: j'ai reconstruit la base de données via le backend aucune modif...
J'ai découvert il y à peu la notion de représentation intervallaire d'un arbre de données en cherchant à comprendre les champs lft et rgt de la table assets.
J'ai installé deux versions de joomla 3.4.3, un avec données d'exemple d'apprentissage en fr et l'autre sans données d'exemple.
De là dans un but d'apprentissage j'ai voulu représenter graphiquement cet arbre a partir de la base de données avec un peu de php/html/css.
Et là stupeur !!! sur les deux sites j'ai une erreur (ou alors j'ai pas compris) :
Pour le site sans données d'exemple, j'ai le noeud feuille "com.user.category" au "level" 1 soit au niveau de son noeud parent "com.user".
Pour le site avec données d'exemple, j'ai le noeud "com_messages" au meme niveau que "com_contact" jusque là normal mais la borne gauche du premier est supérieur a celle du second, et la borne droite du premier inferieure a celle du second !!!! bref ils se superposent dans l'arbre !
Une image parlant mieux qu'un discours, voici le pb du site avec donnees d'example, les noeuds sont en rgba pour voir la(les) superposition :
Mon code en question si vous voulez tester chez vous, à placer sur index.php choisir assets dans le formulaire (je suis pas dev donc indulgence éxigée )
Code:
<style type="text/css"> .wrapgraph{ background:pink;position:relative; overflow:auto; } .noeud{ position:absolute; height:199px; top:0; background-color:rgba(1,1,1,0.3); overflow:hidden; border-bottom:solid 1px black; } .nomnoeud{ transform-origin:0% 100%;transform: rotate(90deg); white-space:nowrap; } .grille{ position:absolute; background-color:white; border-left:solid 1px black; } .niveau{ position:relative; height:200px } .numgrille{ position:relative; left:-5px; background-color:white; top:5px; margin:0; font-size:0.5em; } </style> <form method="post" action="index.php"> <select name="affichage" size="2"> <option value="normal" selected="selected">normal</option> <option value="assets">assets</option> </select> <input type="submit" value="Valider" /> </form> <?php if (isset($_POST['affichage']) AND $_POST['affichage'] == "assets") :?> <?php $zoom=20; $db =& JFactory::getDBO(); /////////////////////////////////////////////////////////////////////////////////*toutes les entrées*//////////////////////////////////////////////////////////////////////////// $totalquery = $db->getQuery(true); $totalquery->select($db->quoteName(array('name','lft','rgt','level'))); $totalquery->from($db->quoteName('#__assets')); $totalquery->order('level ASC'); $totalquery->order('lft ASC'); $db->setQuery($totalquery); $tout = $db->loadObjectList(); ////////////////////////////////////////////////////////////////////////////////*nombre d'elements*////////////////////////////////////////////////////////////////////////////// $countelem = $totalquery; $countelem->select('COUNT(*) AS nbrelem'); $db->setQuery($countelem); $nbrelemresult = $db->loadObject(); $nbrelem = $nbrelemresult->nbrelem; echo "nombre d'éléments : ".$nbrelem.'</br>'; ///////////////////////////////////////////////////////////////////////////////*le nombre de niveau distincts*///////////////////////////////////////////////////////////////// $lvlquery = $totalquery; $lvlquery->select('COUNT(DISTINCT level) AS total'); $db->setQuery($lvlquery); $lvlresult = $db->loadObject(); $lvlnbr = $lvlresult->total; echo 'nombre de niveaux : '.$lvlnbr.'</br>'; /////////////////////////////////////////////////////////////////////////////*root*/////////////////////////////////////////////////////////////////////////////////////////// $rootquery = $db->getQuery(true); $rootquery->select($db->quoteName(array('name','lft','rgt','level','title'))); $rootquery->from($db->quoteName('#__assets')); $rootquery->where($db->quoteName('name')." = ". $db->quote('root.1')); $db->setQuery($rootquery); $rootnode = $db->loadObject(); $rootsize = $rootnode->rgt - $rootnode->lft; ?> <div id="wrapgraph" class="wrapgraph"> <?php for ($lvl=0; $lvl<$lvlnbr; $lvl++):?> <?php $queryz = $db->getQuery(true); $queryz->select($db->quoteName(array('name','lft','rgt','level','title'))); $queryz->from($db->quoteName('#__assets')); $queryz->where($db->quoteName('level')." = ". $lvl); $queryz->order('lft ASC'); $db->setQuery($queryz); $elems = $db->loadObjectList(); //var_dump($elems); ?> <div id="niveau<?php echo $lvl; ?>" class="niveau"> <?php for ($col=0; $col<($rootsize+2); $col++):?> <div class="grille" style="width:<?php echo $zoom-1; ?>px ; height:200px; left:<?php echo $col*$zoom ?>px"></div> <?php endfor; ?> <?php foreach ($elems as $noeud) : ?> <?php $width = ($noeud->rgt - $noeud->lft)*$zoom; ?> <?php $left = $noeud->lft * $zoom; ?> <div id="<?php echo $noeud->name; ?>" class="noeud" title="<?php echo $noeud->name.', borne gauche : '.$noeud->lft.', borne droite : '.$noeud->rgt;?>" style="left:<?php echo $left;?>px; width:<?php echo $width; ?>px;"> <p class="nomnoeud" style="margin-left:<?php echo $width/2-8; ?>px;"><?php echo $noeud->title; ?></p> </div> <?php endforeach; ?> </div> <?php endfor; ?> <div style="position:relative"> <?php for ($col=0; $col<($rootsize+2); $col++):?> <div class="grille" style="width:<?php echo $zoom-1; ?>px ; height:20px; left:<?php echo $col*$zoom ?>px;"> <p class="numgrille"><?php echo $col;?></p> </div> <?php endfor; ?> </div> </div> <?php endif; ?>
Donc dès l'instal y'a des soucis dans cette table ou alors il faut que quelqu'un m'explique qlq chose qui a du m'eechapper.
Si une âme charitable peut m'indiquer comment fonctionne les droits d'accès grâce à cette table je suis preneur aussi.
Merci
PS: j'ai reconstruit la base de données via le backend aucune modif...
Commentaire