Toujours dans l'exploitation et la mise en page des données issues de Joomla Content, aujourd'hui nous allons voir comment j'ai fait une vue sous la forme d'un arbre n-aire des hashtags décrits dans Joomla content.
J'entends déjà les puristes d'ici, alors je mets tout de suite mon alerte : oui, je suis absolument nul en javascript, je hais ce langage et je n'ai pas fait d'affichage d'un arbre avec ouverture et fermetures des branches pour ce module (manque de temps). En plus, même si j'avais su le faire, je ne l'aurais pas fait puisque l'idée est bien de proposer à l'utilisateur la possbilité de "naviguer" dans l'arbre des tags, et pour pouvoir intellectuellement naviguer dans cet arbre, il faut afficher toute l'organisation de l'arbre, des synonymes existant. L'unicité des synonymes étant effectuée par le chemin complet du hashtag.
Parenthèse faite, regardons le code. Le principe est de rechercher directement dans la base de données (puisque je n'ai pas trouvé d'objets Joomla avec les données qui m'interessaient, mais peut être y'en a-t-il !) l'ensemble des enregistrements pouvant reformer cet arbre. En analysant les données de cette table, je me suis rendu compte que la table contenait le champ path, champs de type chaine. C'est donc parfait pour faire un tri dessus au moment de la requête SQL, permettant aissi d'avoir un arbre trié.
helper.php
<?php
class mod_vuearbre{
public static function getArbre(){
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'|| $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$t= $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
$e = explode('index',$t);
JLoader::register('mod_vuearbre',__DIR__.'/helper.php');
$savligne="";
$document = JFactory::getDocument()->addstylesheet("modules/mod_vuearbre/style.css");
include("variables.php");
echo '<div class="descriptif">'.$description.'</div>';
echo '<div style="overflow:auto;height:500px;width:600px;">';
$conf = JFactory::getConfig();
$username = $conf->get('user');
$password = $conf->get('password');
$dbname = $conf->get('db');
$servername = $conf->get('host');
$conn = new mysqli($servername,$username,$password,$dbname);
$sql = "select * from doc_tags where published=1 order by path";
$result = $conn->query($sql);
echo '<div style="background-color:yellow;width:100%;text-align:center;"></div>';
$body = "<html>";
$body .= "<head>";
$body .= '<meta charset="utf-8" />';
$body .= '<meta name="viewport" content="width=device-width, initial-scale=1.0" />';
$body .= '<base href="http://localhost/doc/Joomla_3915-Stable-Full_Package_French_v1/index.php/page-accueil/test-tags" />';
$body .= '<title>Affichage hiérarchisé des tags</title>';
$body .= '</head>';
$body .= '<body>';
if ($result->num_rows>0)
{
while ($row=$result->fetch_assoc())
{
$t=array();
$a = substr_count($row["path"],'/');
for ($i=1;$i<$a;$i++)
{
echo " ";
}
$ligne = '<span style="color:red;">📁</span>'.utf8_encode(ucfirst($row["title"])).'<br>';
$ligne = '<span style="color:red;">📁</span>'.preg_replace('/[\x00-\x0B\x0B\x0C\x0E-\x1F\x7F-\x9F]/u','',utf8_encode(ucfirst($row["title"]))).'<br>';
echo '<a class="label-arbre_tag" href="/index.php/component/tags/tag/'.$row["path"].'"><span style="color:red;">📁</span>'.utf8_encode(ucfirst($row["title"])).'</a><br>';
$savligne .= $ligne;
}
$conn->close();
}
echo "</div>";
$fin = "</body></html>";
//On sauvegarde le fichier
file_put_contents("AbredesTags.html",$body.$savligne.$fin);
$ligne= '<div style="color:red;font-size:200%;padding:5px;"><a target="_blank" href="'.$e[0].'AbredesTags.html" download><img src="/images/download.png">Télécharger le fichier par clic droit</a><span style="font-size:10px;">Les images ne seront pas encodées</span></div>';
return ($ligne);
}
}
?>
mod_vuearbre.php
Dans ce fichier, des donées liées au HTML dont en dur, n'hésitez pas à les personnaliser
<?php
defined('_JEXEC') or die;
require_once dirname(__FILE__).'/helper.php';
$hello = mod_vuearbre::getArbre();
require JmoduleHelper::getLayoutPath('mod_vuearbre');
echo $hello;
mod_vuearbre.xml
<?xml version="1.0" encoding="utf-8" ?>
<extension type="module" version="1.0.0" client="site" method="upgerade">
<name>Vue en arbre des hashtags</name>
<author>Sébastien LHUILLIER</author>
<version>1.0.0</version>
<creationDate>Juillet 2021</creationDate>
<description>Ce module permet de voir en arbre les tags</description>
<files>
<filename>mod_vuearbre.xml</filename>
<filename module="mod_vuearbre">mod_vuearbre.php</filename>
<filename></filename>
<filename></filename>
<filename></filename>
<filename></filename>
</files>
</extension>
style.css
.descriptif{
color:red;
font-size:10px;
}
#explications-treeview{
margin-left:70px;
padding:10px;
}