$id = isset($get['id']) ? $get['id'] : null;
$rs = $core->blog->getPost(array('post_id' => $id));
$date = strtotime($rs->post_dt);
# Différence en secondes entre maintenant et la date de publication
$delta = $date - time();
Maintenant que nous avons l'information voulue, il est possible de la transformer pour qu'elle adopte le format de votre choix. On peut par exemple imaginer passer en paramètre dans l'url le format souhaité et convertir le
# Création de l'enveloppe
$rsp = new xmlTag();
# Ajout du noeud "value" dans le noeud "rsp" contenant la variable $delta
$rsp->value($delta);
# On retourne le tout
return $rsp;
Le fichier XML généré sera donc de cette forme :
65765432456
$core->rest->addFunction('getPostRemainingTime',array('myPluginRestMethods','getPostRemainingTime'));
Ce code est a placer dans le fichier [[files#structure-generale-d-un-plugin|_prepend.php]] du plugin. Maintenant que notre service est déclaré, il est accessible via l'URL **//ADMIN_URL/services.php?f=getPostRemainingTime&id=1//**. Testez par vous-même si il fonctionne correctement, si il retourne les bonnes valeurs avant de passer à la suite.
$(function(){
$('#remaining-time').click(function(){
$.get('services.php',
{f: 'getPostRemainingTime',id: $('#id').val()},
function(rsp){
$('#remaining-time-display').html('Temps restant avant la publication :'+$(rsp).find('value').text()+'
');
});
});
});
Lors du clic sur l'élément ayant pour id **remaining-time**, une requête est faite auprès du service **getPostRemainingTime** en passant en paramètre le service que l'on veut utiliser + l'id du billet en cours récupéré via le champ caché du formulaire ayant pour id **id**. La réponse est alors affiché dans le conteneur ayant pour id **remaining-time-display**.
===== Gestion des erreurs =====
Le code ci-dessus ne prend pas en compte les erreurs qui peuvent survenir lors de l'interrogation du service. L'avantage d'être passé par la classe //xmlTags// pour générer le fichier XML est que si une exception est levée, l'XML résultant sera de la forme :
Message d'exception
Par exemple pour notre service, si aucun id n'est passé en paramètre, on va lever une exception afin d'en informer l'utilisateur
$id = isset($_GET['id']) ? $_GET['id'] : null;
if ($id === null) {
throw new Exception(__('No ID given'));
}
Il est donc très facile d'intercepter ce type d'XML pour le traiter différemment. Par exemple :
$(function(){
$('#remaining-time').click(function(){
$.get('services.php',
{f: 'getPostRemainingTime',id: $('#id').val()},
function(data){
var rsp = $(data).children('rsp')[0];
if (rsp.attributes[0].value == 'ok') {
$('#remaining-time-display').html('Temps restant avant la publication :'+$(rsp).find('value').text()+'
');
} else {
alert($(rsp).find('message').text());
}
});
});
});
Ce code informera l'utilisateur via un //alert()// qu'une erreur est survenue lors de la requête ou du traitement par le service.