Voici la première version du code (une partie est de moi, l’autre est d’une autre personne).
Il faut crééer un snippet : shortURL
Sur ce snippet il faut ajouter deux propriétés : Bitly_KEY (correspond à votre clé fourni par bit.ly), Bitly_LOGIN (votre login une fois enregistré sur ce service).
Ce code est à valider sur votre environnement de test (il n’y pas pour l’instant pas de mécanisme de sécurité type isset ou autre) :
<?php
/* Retrieve properties from DB */
$Bitly_KEY = $modx->getOption('Bitly_KEY', $scriptProperties, '');
$Bitly_LOGIN = $modx->getOption('Bitly_LOGIN', $scriptProperties, '');
$siteURL = $modx->getOption('site_url');
$docID = $modx->resource->get('id');
$docInfo = $modx->getObject('modResource',$docID);
$docname = $docInfo->get('alias');
$contentType = $docInfo->getOne('ContentType');
$description = $contentType->get('description');
$extension = $contentType->get('file_extensions');
/* Check if it is in folder */
$parent = $docInfo->get('parent');
$path='';
/* Checks if everything is correct */
if (empty($Bitly_KEY)){
$output="-No Bit.ly key, please create an account @ bit.ly website";
return $output;
die();}
else{
$output=$Bitly_KEY;
}
if (empty($Bitly_LOGIN)){
$output="-No Bit.ly key, please create an account @ bit.ly website";
return $output;
die();}
else{
$output=$Bitly_LOGIN;
}
while ($parent != 0) {
$docInfo = $modx->getObject('modResource',$parent);
$alias = $docInfo->get('alias');
$path = $alias . '/' . $path;
$parent = $docInfo->get('parent');
}
$longurl = $siteURL . $path . $docname . $extension;
$bitly = 'http://api.bit.ly/shorten?version=2.0.1&longUrl='.urlencode($longurl).'&login='.$Bitly_LOGIN.'&apiKey='.$Bitly_KEY.'&format=xml';
$response = file_get_contents($bitly);
//credits to davidwalsh.name
//parse depending on desired format
if(strtolower('xml') == 'json')
{
$json = @json_decode($response,true);
return $json['results'][$longurl]['shortUrl'];
}
else //xml
{
$xml = simplexml_load_string($response);
return 'http://bit.ly/'.$xml->results->nodeKeyVal->hash;
}
Ensuite il faut créer une TV par exemple tvShortURL et réaliser un bind avec la commande suivante
@EVAL return $modx->runSnippet('shortURL');
Il reste du travail dessus : sécuriser et
surtout récupérer automatiquement l’id du document (ici dans le code on trouve l’id 18)
Edit 1 : L’ID est maintenant récupéré automatiquement en utilisant $docID = $modx->resource->get(’id’); Le code est pleinement fonctionnel en l’état... Mais n’est sans doute pas adapté pour de la production (quid de la sécurité, de la gestion des erreurs)