Ce Webservice se démarque du précédent par la possibilité de définir un offset de départ permettant ainsi de rajouter une pagination à la récupération.
idforum : ID du forum où se trouve le sujet
idcat : ID de la catégorie où se trouve la catégorie
idtopic : ID du sujet à lister
tri : ordre de récupération, 0 = ordre dans lesquels les messages ont été postés, 1 = ordre inverse
offset : Numéro de la première réponse récupérée.
limit : Nombre maximum de messages récupérés.
$param = array(
'idforum' => 1,
'idcat' => 22,
'idtopic' => 48,
'tri' => 0,
'offset' => 0,
'limit' => 10
);
$results = $sel->call('read_topic', $param); Le Webservice renvoie alors plusieurs paramètres :
topictitle : Titre du sujet
nbanswer : Nombre de réponses du sujet
messages : Flux XML contenant les messages à récupérer. Ce flux XML se décompose ainsi :
<topic> <reponse id="ID de la réponse"> <auteur>Auteur de la réponse</auteur> <date>Date et heure du message</date> <message><!--[CDATA[Contenu du message]]--></message> </reponse> </topic>
Exemple :
<topic> <reponse id="108"> <auteur>Zorro</auteur> <date>02-01-2007 à 14:05:56</date> <message><!--[CDATA[Je rajoute une réponse pour le fun.]]--></message> </reponse> <reponse id="109"> <auteur>Zorro</auteur> <date>03-01-2007 à 11:04:50</date> <message><!--[CDATA[Réponse okey]]--></message> </reponse> <reponse id="110"> <auteur>EchoCedric</auteur> <date>03-01-2007 à 11:05:36</date> <message><!--[CDATA[Ceci est une réponse pour voir]]--></message> </reponse> </topic>
Nous vous fournissons un exemple de gestion de la lecture d'un sujet via le webservice pouvant par exemple être utilisé sur un site pour inclure des commentaires à l'actualité ou aux articles.
<?php
require('nusoap/nusoap.php');
// Paramètres pour les tests
$idsite= 1;
$urlnameforum= 'forumdev';
$url_forum= 'http://forumdev.mesdiscussions.net/';
$url_webservice= 'http://forumdev.mesdiscussions.net/webservices/wservice.php';
$idcat= 22;
$idtopic= 48;
$tri= 0; // 0 = par ordre de réponse, 1 => Ordre de réponse inverse
$reponse_par_page= 5;
if (isset($_GET['idtopic'])) {
$idtopic= intval($_GET['idtopic']);
}
if (isset($_GET['page'])) {
$page= intval($_GET['page']);
} else {
$page= 1;
}
$offset= (($page-1)*$reponse_par_page)+1;
$sel = new soapclient($url_webservice);
$param = array('idforum' => $idsite,'idcat' => $idcat,'idtopic' => $idtopic,'tri' => $tri, 'offset' => $offset,'limit' => $reponse_par_page);
$results = $sel->call('read_topic_page', $param);
$sujet_titre= $results['topictitle'];
?>
<h1><?php echo $sujet_titre; ?></h1>
<p>Ici se trouve mon site.</p>
<?php
$nbrep= $results['nbanswer'];
echo $nbrep,' messages<hr />';
$nbpage= ceil(($nbrep)/$reponse_par_page); // Calcul du nombre de pages
echo 'Pages :';
for ($i=1;$i<=$nbpage;$i++) {
if ($i == $page) {
echo ' ',$i,' ';
} else {
echo ' <a href="?idtopic='.$idtopic.'&page='.$i.'">',$i,'</a> ';
}
}
echo '</hr>';
if ($nbrep == 0) { // Si le nombre de réponse est égal à 0, on affiche message different.
echo "<a href=\"$url_forum/message.php?config=$urlnameforum.inc&cat=$idcat&post=$idtopic&page=$page\">Soyez le premier à déposer un commentaire</a>";
} else {
echo "<a href=\"$url_forum/message.php?config=$urlnameforum.inc&cat=$idcat&post=$idtopic&page=$page\">Déposer un commentaire</a>";
}
echo '<hr />';
$xml_get = simplexml_load_string(utf8_encode($results['messages']));
if ($xml_get) {
foreach ($xml_get->reponse as $reponse) {
$auteur= $reponse->auteur;
$date= $reponse->date;
$contenu= $reponse->message;
echo '<blockquote>';
echo utf8_decode($auteur),' - ',utf8_decode($date),'<br />';
echo '-------<br />';
echo utf8_decode($contenu);
echo '</blockquote>';
echo '<hr />';
}
}
?>