3.1  Tutorial : Faire une page d'accueil personnalisée

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 = ''])

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);

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.

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>

3 Tutorial SDK4 Les Webservices