Si vous utilisez Dotclear 2, vous avez probablement déjà remarqué la zone Ping
en bas à droite du formulaire de saisie de billets. La fonction ping permet de notifier des annuaires et moteurs de recherches pour qu’ils indexent automatiquement le nouveau billet que vous venez de saisir.
Malheureusement, si vous saisissez un billet programmé, les ping seront tout de même envoyés immédiatement, et le moteur n’enregistrera donc pas votre nouveau billets. Utilisant beaucoup les billets programmés sur un autre blog, j’ai cherché à mettre en place un ping automatique lors de l’activation d’un billet programmé. L’opération est en fait bien plus simple que ce à quoi je m’attendais : il suffit de localiser la fonction mettant à jour l’état des billets et d’y ajouter un appel au plug-in ping.
Le fichier à modifier est inc/core/class.dc.blog.php. Recherchez y la fonction de mise à jour des posts : publishScheduledEntries. Cette fonction effectue d’abord une première requête en base pour chercher les posts à modifier, puis si elle en trouve, elle effectue une seconde requête pour effectuer la mise à jour. Cette seconde requête est dans un bloc if (if (!empty($to_change))). Pour envoyer un ping automatiquement quand un post est mis à jour par cette fonction, ajoutez simplement le code suivant dans le bloc if :
1 2 3 4 5 |
include("plugins/pings/lib.pings.php"); try { pingsAPI::doPings('http://blogsearch.google.com/ping/RPC2',"Titre de votre blog","http://monserveur.tld/moblog/index.php/"); } catch (Exception $e) {} |
Si vous voulez pinger plusieurs moteurs de recherche, il faudra répéter la troisième ligne autant de fois que nécessaire en changeant l’URL du ping.
Avec cette solution, si le ping sur un des moteurs de recherche échoue, le ping ne sera pas effectué sur les serveurs suivants. Pour remédier à ce problème, vous pouvez soit mettre chaque appel à doPings dans un bloc try…catch différent, soit aller modifier la fonction doPings pour qu’elle ne lève plus d’exception. Pour ce faire, éditez le fichier plugins/pings/lib.pings.php et commentez la ligne suivante :
1 |
throw new Exception($rsp['message']); |
Vous pouvez également la remplacer par une fonction vous signalant l’anomalie par mail :
1 |
mail("monemail@monserveur.tld" , "Echec du ping sur $srv_uri" ,"Le ping sur $srv_uri a échoué :-( Le serveur a répondu : ".$rsp['message']); |
Et voilà, vous avez désormais un blog qui enverra les pings au bon moment lorsque vous utiliserez la fonction de programmation des billets 🙂