Table des matières
Le SDK dispose d'une fonction appelée md_get_forum_cat_infos qui permet de récupérer les informations nécessaires à la création d'une page d'accueil personnalisée pour le forum.
Cette fonction nécessite un certain nombre de variable que nous allons étudier :
md_get_forum_cat_infos( string $current_forum, int $cat, bool $registered, bool $use_current_db, resource $dbhr, resource $dbhw, [$add_field = ''])
$current_forum : Cette variable doit contenir le nom du forum courant, initialize inscrit cette valeur dans la variable $md_db_extension
$cat : Si vous voulez récupérer les informations d'une seule catégorie, vous pouvez la préciser ici. Pour notre exemple, nous voulons toutes les récupérer, nous indiquerons donc à la variable qu'elle doit être 'NULL' ce qui aura pour conséquence de rapatrier les informations de toutes les catégories.
$registered : Certaines catégories peuvent être définies comme accessibles uniquement aux membres enregistrés, si vous fixez ce paramètre à 0, elles ne seront pas pris en compte dans le listing, autrement, elles seront pris en compte.
$use_current_db : Ce paramètre permet de renseigner la fonction à savoir si votre forum utilise une base de données unique ou plusieurs. Ce paramètre peut-être initialisé via la constante md_one_database.
$dbhr et $dbhw : Ces 2 variables sont des liens vers la connexion MySQL, elles sont initialisées dans initialize.php via les mêmes noms, $dbhr et $dbhw.
$add_field : Cette variable optionnelle vous permet de rajouter des champs à récupérer dans la base de données.
La fonction retourne un objet MySQL contenant un certain nombre de variables que nous étudierons au fur et à mesure.
(locked, cat_number, name, name_supercat, url_name, password, visible, link, target_cat, target_forum_id, use_current_forum, auto_redirect, allow_anonymous_posting, apriori_cat, orderby_creation)
Dans un premier temps, nous ne récupérerons que le nom.
Pour notre exemple, nous allons créer une mise en page originale pour présenter les catégories.
<?php
include('include/initialize.php');
include('include/common_func.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Présentation originale</title>
<style type="text/css">
html * {
margin:0;
padding:0;
}
body {
background-color:#333;
padding-top:20px;
}
#listingcategorie {
position:absolute;
display:block;
text-align:center;
width:650px;
left:50%;
margin-left:-325px;
background-color:#f00;
border:2px solid #fff;
}
#listingcategorie li {
display:block;
font-family:"Trebushet MS",Verdana,Arial;
width:200px;
height:50px;
background-color:#000;
color:#fff;
border:3px solid #555;
float:left;
margin:5px;
}
</style>
</head>
<body>
<?php
$get_cat_infos= md_get_forum_cat_infos($md_db_extension,NULL,1,1,$dbhr,$dbhw);
echo '<ul id="listingcategorie">';
while (list(,,$nom)=md_mysqlw_fetch_row($get_cat_infos)) {
echo '<li>',$nom,'</li>';
}
echo '</ul>';
?>
</body>
</html>Ce qui donne quelque chose à l'écran ressemblant à ça :

Nous voudrions maintenant que les noms soient remplacés par des liens pour se rendre sur les catégories concernées.
Pour cela, nous avons à notre disposition la fonction md_get_url_forum1 qui permet d'avoir l'url permettant d'atteindre la catégorie concernée.
Cette fonction nécessite un certain nombre de paramètres mais beaucoup sont optionnels et nous ne les aborderons pas, l'intérêt ici étant d'avoir un exemple rapidement, pour plus de précisions ou d'options, reportez vous à la documentation complète du SDK.
La fonction (sans les paramètres optionnels) : md_get_url_forum1( bool $modrewrite, string $forum_rewritten_name, bool $default, int $cat, string $cat_nom);
$modrewrite : Permet de préciser si l'URL Rewriting est activé sur votre forum, cette variable est transmise via la constante md_modrewrite.
$forum_rewritten_name : Nom d'url du forum, initialisé via $md_forum_url.
$default : Précise si le forum à atteindre est le forum par défaut ou non, nous mettrons 0.
$cat : numéro de la catégorie à atteindre.
$cat_nom : Nom d'url de la catégorie à atteindre.
Nous modifions donc une partie de notre programme en conséquence, nous modifions d'abord la partie contenant les CSS pour préciser un comportement pour nos textes qui vont devenir des liens :
#listingcategorie a {
color:#bbf;
text-decoration:none;
}
#listingcategorie a:hover {
color:#fff;
text-decoration:underline;
}Puis nous modifions la boucle de récupération des catégories pour
while (list(,$numero,$nom,,$url_nom,)=md_mysqlw_fetch_row($get_cat_infos)) {
echo '<li><a href="',md_get_url_forum1(md_modrewrite,$md_db_extension,0,$numero,$url_nom),'">',$nom,'</a></li>';
}
Ce qui nous donne quelque chose comme ça, avec le nom des catégories désormais transformé en lien et d'un clic, vous vous retrouvez sur la page de listing des sujets de la catégorie sur laquelle vous avez cliqué.

Nous souhaiterions désormais afficher la date du dernier message de chaque catégorie ainsi que l'auteur de ce dernier message.
Nous allons pour cela utiliser la fonction du SDK md_get_forum_post_infos qui fournie les informations sur les derniers messages de catégorie.
md_get_forum_post_infos( string $current_forum, int $cat, bool $use_current_db, resource $dbhr, resource $dbhw)
Celle-ci demande un certain nombre de paramètres.
$current_forum : Extention du nom de la base de données du forum en cours, fournie dans initialize.php dans $md_db_extension.
$cat : Catégorie sur laquelle nous voulons les infos, si le paramètre reste vide, les informations sur toutes les catégories seront fournies, c'est ainsi que nous l'utiliserons pour notre exemple.
$use_current_db : Utiliser la base de données du forum courant ou non, initialisée via la constante md_one_database
$dbhr et $dbhw : Ces 2 variables sont des liens vers la connexion MySQL, elles sont initialisées dans initialize.php via les mêmes noms, $dbhr et $dbhw.
Cette fonction va retourner un tableau en 2 dimensions contenant le pseudo du dernier auteur, l'identifiant de la dernière réponse, la date du dernier message et le nombre total de messages sur la catégorie.
Pour commencer, nous modifions notre CSS, nous allons agrandir légèrement la taille des blocs en hauteur et définir un aspect pour l'attribut HTML p (paragraphe).
#listingcategorie li {
display:block;
font-family:"Trebushet MS",Verdana,Arial;
width:200px;
height:70px;
background-color:#000;
color:#fff;
border:3px solid #555;
float:left;
margin:5px;
}
#listingcategorie p {
font-size:10px;
padding-bottom:5px;
}
Ensuite, nous rajoutons l'appel à la fonction et nous modifions un peu notre boucle pour y afficher nos infos.
$get_infos_last_message= md_get_forum_post_infos($md_db_extension,NULL,md_one_database, $dbhr, $dbhw);
$get_cat_infos= md_get_forum_cat_infos($md_db_extension,NULL,1,1,$dbhr,$dbhw);
echo '<ul id="listingcategorie">';
while (list(,$numero,$nom,,$url_nom,)=md_mysqlw_fetch_row($get_cat_infos)) {
echo '<li><a href="',md_get_url_forum1(md_modrewrite,$md_db_extension,0,$numero,$url_nom),'">',$nom,'</a>';
list($lastPosteur,$numreponse,$datelast,$total)= $get_infos_last_message[$numero];
echo '<p>',$total,' messages</p><p>',$lastPosteur,'<br />',$datelast,'</p>';
echo '</li>';
}
echo '</ul>';Vous obtenez quelque chose ressemblant à ça :

Nous allons désormais agrémenter de quelques infos utiles.
D'abord, rajoutons un bloc autour de notre liste de catégories pour y regrouper nos infos, ensuite, nous allons afficher le nombre total de messages du forum, pour ça, rien de plus simple, pas besoin de fonction du SDK, il suffit de mémoriser les totaux à chaque fois et d'afficher le résultat au final.
while (list(,$numero,$nom,,$url_nom,)=md_mysqlw_fetch_row($get_cat_infos)) {
echo '<li><a href="',md_get_url_forum1(md_modrewrite,$md_db_extension,0,$numero,$url_nom),'">',$nom,'</a>';
list($lastPosteur,$numreponse,$datelast,$total)= $get_infos_last_message[$numero];
$totalmessages+= $total;
echo '<p>',$total,' messages</p><p>',$lastPosteur,'<br />',$datelast,'</p>';
echo '</li>';
}
echo '</ul>';
echo '<p style="color:#fff">Nombre total de message : ',$totalmessages,'</p>';
Nous souhaiterions aussi afficher le pseudo du membre en cours. Pour cela, initialize fourni la variable $user, si $user est vide, nous savons alors que l'utilisateur n'est pas identifié et nous pouvons donc lui proposer de s'identifier.
echo '<p>';
if (empty($md_user)) {
echo '<a href="login.php?config=',$config,'">Identification</a>';
} else {
echo 'Bonjour ',$md_user;
}
echo '</p>';Nous modifions un peu notre CSS pour entourer le tout et nous obtenons un résultat semblable à ça :

Voilà, nous avons une page d'accueil du forum personnalisé qui faute d'être de bon gout permet de se rendre compte des possibilités offertes. Ci-dessous, le listing complet final qui nous permet d'obtenir la capture d'écran ci-dessus.
<?php
include('include/initialize.php');
include('include/common_func.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Présentation originale</title>
<style type="text/css">
html * {
margin:0;
padding:0;
font-family:Verdana,Arial;
font-size:12px;
}
body {
background-color:#333;
padding-top:20px;
}
#listingcategorie {
position:absolute;
display:block;
text-align:center;
width:650px;
left:50%;
margin-left:-325px;
background-color:#f00;
border:2px solid #fff;
}
#listingcategorie li {
display:block;
font-family:"Trebushet MS",Verdana,Arial;
width:200px;
height:70px;
background-color:#000;
color:#fff;
border:3px solid #555;
float:left;
margin:5px;
}
#listingcategorie p {
font-size:10px;
padding-bottom:5px;
}
#listingcategorie a {
color:#bbf;
text-decoration:none;
}
#listingcategorie a:hover {
color:#fff;
text-decoration:underline;
}
#forum {
position:absolute;
display:block;
width:680px;
background-color:#8279ff;
left:50%;
margin-left:-350px;
padding:10px;
}
#forum p {
clear:both;
color:#fff;
padding-bottom:5px;
}
</style>
</head>
<body>
<?php
$get_infos_last_message= md_get_forum_post_infos($md_db_extension,NULL,md_one_database, $dbhr, $dbhw);
$get_cat_infos= md_get_forum_cat_infos($md_db_extension,NULL,1,1,$dbhr,$dbhw);
echo '<div id="forum">';
echo '<p>';
if (empty($md_user)) {
echo '<a href="login.php?config=',$config,'">Identification</a>';
} else {
echo 'Bonjour ',$md_user;
}
echo '</p>';
echo '<ul id="listingcategorie">';
$totalmessages= 0;
while (list(,$numero,$nom,,$url_nom,)=md_mysqlw_fetch_row($get_cat_infos)) {
echo '<li><a href="',md_get_url_forum1(md_modrewrite,$md_db_extension,0,$numero,$url_nom),'">',$nom,'</a>';
list($lastPosteur,$numreponse,$datelast,$total)= $get_infos_last_message[$numero];
$totalmessages+= $total;
echo '<p>',$total,' messages</p><p>',$lastPosteur,'<br />',$datelast,'</p>';
echo '</li>';
}
echo '</ul>';
echo '<p style="float:right; padding-top:190px">Nombre total de message : ',$totalmessages,'</p>';
echo '</div>';
?>
</body>
</html>