Hello!
Pour donner quelques news (projet pas abandonné, j’ai juste pas mal d’impératifs en ce moment)
Voilà où j’en suis:
<?php
/* Utilisation des Web services Piwigo pour afficher les photos dans une page ModX
* Code provenant de la doc Piwigo:
* http://fr.piwigo.org/doc/doku.php?id=projet:developpement:web_services
* Amélioré par: Romain (Forums ModX)
*/
if (!function_exists(images)) {
function images($base_url,$ws,$format,$method,$options) {
// coucou MODX !
global $modx;
$tpl = $modx->getOption('tpl',$scriptProperties,'piwigoWsTpl'); // Template par défaut
$infoCls = $modx->getOption('infoCls',$scriptProperties,'piwigoInfoCls'); // Classe des infos photo par défaut
// Initialisation de la session
$session = curl_init();
// Valeurs par défaut
$output = '';
$base_url = (isset($base_url)) ? $base_url :'http://fr.piwigo.org/demo/';
$ws = (isset($ws)) ? $ws : 'ws.php';
$format = (isset($format)) ? $format : 'php';
$method = (isset($method)) ? $method : 'pwg.categories.getImages';
$options = (isset($options)) ? $options : 'order=random&per_page=1';
/* Construction de l'URL */
$url = $base_url . $ws .'?format='.$format . '&method=' . $method . '&' . $options;
// Configuration des options de CURL
curl_setopt($session, CURLOPT_URL,$url);
curl_setopt($session, CURLOPT_HEADER, 0);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Exécution de la session
$response = curl_exec($session); /* Ici nous réceptionnons le tableau sérialisé de la requête */
$thumbc = unserialize($response);/* que nous "désérialisons" */
curl_close($session); /* Fermeture des ressources */
if ($thumbc["stat"]=='ok') {
// Réponse ok
/* On isole chaque élément du tableau des résultats (comprendre les images)… */
for ($i=0;$i<$thumbc["result"]["images"]["count"];$i++) {
/* … Et pour chaque élément, on “charge” une variable $picture qui contiendra toutes les infos relatives à chaque image.
* dans $picture nous avons : id, width, height, hit, file, name, comment, date_creation, date_available, tn_url, element_url, categories[0][id,url,page_url] */
$picture = $thumbc["result"]["images"]["_content"][$i];
$modx->setPlaceholder('cat_url',$picture['categories'][0]['url']);
print_r($picture['infoCls']);
$picture['infoCls'] = $infoCls;
$output .= $modx->getChunk($tpl,$picture);
}
} else {
$output = '<b>Il y a eu une erreur</b>. L\'url: <i>'. $url .'</i> n\'a pu être consultée.';
}
return $output;
}
}
return images($base_url,$ws,$format,$method,$options);
Ça devrait gérer un template par l’option &tpl= mais j’ai l’impression qu’il ne tient pas compte du tout de ce que je lui donne en paramètre, il prend toujours celui par défaut. Le comportement par défaut avec ces paramètres devrait faire afficher les placeholders disponibles quand on ne passe aucun template en paramètre non ?
Et c’est censé gérer une classe CSS pour les infos d’image, mais ça ne fonctionne pas. Il prend bien la classe par défaut, mais n’accepte pas l’option &infoCls=
(comme les templates quoi)
J’ai suivi:
http://rtfm.modx.com/display/revolution20/Templating+Your+Snippets
Mais il y a une ligne que je ne peux pas mettre sous peine d’erreur:
$resourceArray = $resource->toArray();
En remplaçant les variables par les miennes, ça foire, mais c’est peut être dû au cas un peu particulier ?
Je vais un peu me pencher sur l’autre version du script qu’on m’a donné pour pouvoir récupérer les noms d’album, ça impose de tout refaire malheureusement.
Il faudra aussi que je regarde comment appeler le snippet pour ne récupérer que les albums et afficher une image (précise ou aléatoire, en option) de l’album ou seulement le nom en texte.
Ça fait encore pas mal de boulot, voyez vous autre chose à faire pour le rendre souple et plein d’options (et accessoirement, publiable pour tous)?
Edit: Je viens de me rendre compte d’un assez gros problème, global :
Si je change de méthode dans l’outil WS (pwg.categories.getList par exemple), la gestion derrière est totalement différente
Ça amène deux options:
- Ce même snippet, gavé de if elseif (ou switch case ?) pour gérer la réponse de chaque méthode différemment, ça risque de faire lourd pour chaque appel du snippet
- Soit un snippet pour chaque méthode, et là ça fait vraiment beaucoup de snippets à faire.. même si on a pas besoin de toutes les méthodes (celles de modifications typiquement, à moins que quelqu’un ne l’intègre complètement dans l’interface d’admin à la manière de "Gallery" ? )
ça fait quand même beaucoup.
Et c’est exactement le même souci si on change le format de sortie (php, json, xml ..)
Il faudrait un switch dans ce cas, pour que selon le format de sortie on applique une fonction qui mette les infos dans un tableau, comme c’est déjà le cas pour la sortie php actuellement. Après ça la gestion est identique je crois.
Des idées ?
=>
J’ai fait un petit récap des paramètres nécessaires à mon avis:
Adresse base galerie:
Emplacement et nom de l’outil WS:
Méthode:
* pwg.categories.getImages: Liste des images selon catégorie ou toutes
* pwg.categories.getList: Liste des catégories
* pwg.getInfos: Infos sur le contenu de la galerie
* pwg.images.getInfo: Infos sur 1 image (avec id)
* pwg.tags.getImages: Liste des images selon tag
* pwg.tags.getList: Liste des tags utilisés
Options de la méthode: variable selon la méthode
Cela voudrait dire qu’il faudrait 6 snippets pour les prendre en compte (et chacun une copie du système pour découper XML, JSON ou PHP ou un autre php inclus dedans ?)
ou 6 switch case dans un même snippet.