A l'instar d'un répertorie téléphonique, ce module permet de lister les articles de l'ensemble du système (je vous laisse éventuellement le soin de retoucher la resquete SQL), chacun d'entre eux étant sous une rubrique nommée par la premiere lettre des titres :
- A -
Alain
Albert
Alphons
- Z -
Zoé
Bon je ne vais pas plus loin dans mon explication, je pense que vous avez compris. J'en ai eu besoin pour des raisons professionnelles comme souvent, je trouve Joomla Content super bien foutu mais un peu "pauvre" en terme de "présentations" (ou fonctionnalités) comme celle-ci.
Le principe de cet outil est en fait tres simple : je liste, après avoir lancé une requete SQL, la liste des titres des articles et je simule une rupture sur le changement de première lettre des titres. Attention toutefois à un soucis auquel j'ai été contronté : j'ai saisi mes articles avec beaucoups de copier coller. Seulement, si vous copiez-collez vos données issuée de produit Mrosoft par exemples, mais pas que, il se trouve qu'au moment de la sélection, un espace es tcopié avant la premiere lettre, ce qui vous fiche un gros bazar dans ce script : tous les article s'affiche dans une rubrique "blank" (" ")
Ceci étant dit, je vous laissi ici le code utilisé pour ce petit module qui fonctionne avec Joomla Content.
helper.php
<?php
class ModAnnuaireArticlesHelper{
public static function getAnnuaire(){
$document = JFactory::getDocument()->addStyleSheet("modules".DIRECTORY_SEPARATOR."mod_annuaireArticle".DIRECTORY_SEPARATOR."style.css");
$query = "SELECT * FROM #__content WHERE state=1 ORDER BY title";
$db = JFactory::getDBO();
$db->setQuery($query);
$articles = $db->loadObjectList();//retourne un array
$sav_lettre="";
foreach($articles as $ligne){
if (substr($ligne->title,0,1)<>$sav_lettre)
{
echo '<div class="premiere-lettre-annuaire">'.(utf8_encode(substr($ligne->title,0,1)))."</div>";
}
$rootURL = rtrim(JURI::base(),'/');
$subpathURL = JURI::base(true);
if (!empty($subpathURL) && ($subpathURL != '/')){
$rootURL = substr($rootURL,0,-1 * strlen($subpathURL));
}
//$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute($article->id, $article->catid).$ligne->id);
$url = "index.php?option=com_content&view=article&id=".$ligne->id;
echo '<div class="une-ligne-article">• <a href="'.$url.'">'.$ligne->title." (<span style=\"color: blue;\">Article n°".$ligne->id."</span>)</a></div>";
$sav_lettre = substr($ligne->title,0,1);
}
}
}
?>
mod_annuaireArticle.php
<?php
defined ('_JEXEC') or die;
require_once dirname(__FILE__) . '/helper.php';
$hello = ModAnnuaireArticlesHelper::getAnnuaire();
require JModuleHelper::getLayoutPath('mod_annuaireArticle');
?>
mod_annuaireArtticle.xml
<?xml version="1.0" encoding="utf-8" ?>
<extension type="module" version="1.0.0" client="site" method="upgrade">
<name>Afficher la liste des articles sous la forme d'une annuaire classé par la premiere lettre du titre de l'article</name>
<author>Sébastien LHUILLIER</author>
<version>1.0.0</version>
<creationDate>Novembre 2021</creationDate>
<description>Petit module permettant d'afficher la liste des articles sous la forme d'une annuaire classé par la premiere lettre du titre de l'article</description>
<files>
<filename>mod_annuaireArticle.xml</filename>
<filename module="mod_annuaireArticle">mod_annuaireArticle.php</filename>
<filename>helper.php</filename>
<filename>index.html</filename>
<filename>tmpl/default.php</filename>
<filename>tmpl/index.html</filename>
</files>
</extension>