We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36730
    • 63 Posts
    Bon, 1 problème de résolu (en fait, 2, je n'ai plus l'erreur non plus) grâce à de l'aide extérieure smiley

    Le foreach() était mal fichu. J'ai pu faire plus simple et créer la variable $output directement dans le for() au dessus

    Reste à créer le système de template maintenant.

    Pour les curieux, voilà le code actuel: http://pastebin.com/fkH5Cn50 (sera périmé dans 1 mois puisque de toutes façons ce n'est pas le définitif, je posterai à nouveau pour le code final smiley )
    Voir message ci dessous

    [ed. note: epy___ last edited this post 12 years, 9 months ago.]
      • 36730
      • 63 Posts
      Me revoilà
      Voici donc là où j’en suis: http://pastebin.com/Fhdn4Y74
      Celui là ne périmera pas.

      Pour pouvoir utiliser le système de template il faut transformer mon $picture[] en objet,
      l’objet en PHP et moi ça fait deux, j’ai besoin d’un gros coup de main là. Il y a surement des changements à faire dans tout le script (je dois éviter de faire une nouvelle boucle foreach() pour reparcourir $picture, c’est idiot et ça me bloque l’accès à $picture[’categories’][0][’url’] je ne sais pas pourquoi il n’aime pas du tout.)

      Autre chose pour laquelle il faut faire des grosse modifs, le nom de l’album à récupérer. Il faut utiliser la méthode pwg.categories.getList avec le numéro de catégorie qu’on récupère pour chaque image [’categories’][0][’id’] (donc un nouvel appel de curl dans chaque boucle ?)
      De gros changements dans le script en perspective lipsrsealed
      • Bonsoir,

        Que te donne un
        $picture
        ?
          • 36730
          • 63 Posts
          A l’affichage ?
          Avec un print_r() j’ai l’array correctement rempli:
          Array
          (
              [id] => 93
              [width] => 2048
              [height] => 1536
              [hit] => 1
              [file] => HPIM0417.JPG
              [name] => 
              [comment] => 
              [date_creation] => 2009-01-07 00:00:00
              [date_available] => 2009-07-30 17:50:45
              [tn_url] => http://galeries.aide-en-info.net/galleries/Photographie/Jardin/thumbnail/TN-HPIM0417.jpg
              [element_url] => http://galeries.aide-en-info.net/galleries/Photographie/Jardin/HPIM0417.JPG
              [categories] => Array
                  (
                      [0] => Array
                          (
                              [id] => 22
                              [url] => http://galeries.aide-en-info.net/index.php?/category/22
                              [page_url] => http://galeries.aide-en-info.net/picture.php?/93/category/22
                          )
          
                  )
          
          )
          
          • Ouep, ton histoire m’intrigue, je suis dessus smiley
            So far… (so good ?)
            <?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
            */
            
            if (!function_exists(images)) {
                function images($base_url,$ws,$format,$method,$options) {
                    // coucou MODX !
                    global $modx;
                    // 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']);
                            $output = $modx->getChunk('test',$picture);
            
                        }
                    } else {
                        $output = '<b>Il y a eu une erreur</b>. L\'url: <i>'. $url .'</i> n\'a pu être consultée.';
                    }
                    // on affiche
                    return $output;
                }
            }
            return images($base_url,$ws,$format,$method,$options);
            



            <a href="[[+element_url]]" title="[[+name]]">
            <img src="[[+tn_url]]" title="[[+name]]" />
            </a><br />
            <span>
            ID: [[+id]]<br />
            file: [[+file]]<br />
            Hits: [[+hit]]<br />
            Description: [[+comment]]<br />
            Dimensions: [[+width]] x [[+height]]<br />
            Date: [[+date_creation]]<br />
            Date Available: [[+date_available]]<br />
            
            Album: <a href="[[+cat_url]]" title="Album">[[+cat_url]]</a>
            </span>
            
              • 36730
              • 63 Posts
              Ah t’as vu c’est costaud hein :p

              Merci pour le code, je vais l’essayer (à moins que tu ne l’aie déjà fait ?)
              Il y a une galerie de test dans mon script sinon tu peux tester sur la mienne, il n’y a rien de particulier dedans

              Vu que je jongle entre deux forums et deux kits PHP, je partage les infos:
              On m’a indiqué ce script pour récupérer et afficher 5 images de 5 albums différents (il suffit de changer les paramètres en les proposant en option pour ce script)
              http://piwigo.org/forum/viewtopic.php?pid=113752#p113752
              C’est très intéressant parce qu’il est organisé pour récupérer le nom d’album comme il faut. (Et sa méthode semble débloquer l’imbrication qui t’a aussi posé problème)
              En revanche il n’est pas orienté objet (enfin pas assez) pour retomber sur les templates ModX, mais vu qu’il faut tout adapter de toutes façons ..

              Il comporte cependant quelques bizarreries que je n’arrive pas à déchiffrer: il lit 3 fois avec 3 méthodes différentes le résultat de sa requête ?
              Après il y a pas mal de choses compliquées dont je ne pense pas qu’on aie besoin ici parce qu’il fait ça en dehors d’un CMS

              Pis je vais aller dormir parce que j’ai du retard ..

              Edit: testé: et ça marche très bien smiley Bravo !
              Re-edit: à un détail près, j’ai testé un appel avec le paramètre per_page=10 pour avoir 10 images, et ça n’en affiche qu’une :$
              • Juste une petite mise à jour pour régler le problème "d’imbrication"… (je n’ai pas encore regardé le lien que tu viens de poster, ça sera pour une autre fois… ^^)

                Bonne nuitée à toi
                • Effectivement, je me suis seulement penché sur ton problème de templating et n’ai pas joué avec les autres paramètres. Pour régler le problème, corrige :
                  $output .= $modx->getChunk('test',$picture); // ajout du . devant =
                  
                    • 36730
                    • 63 Posts
                    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 sad
                    Ç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.
                      • 36730
                      • 63 Posts
                      Hello
                      Je ne trouve pas l’info dans la doc (je ne sais plus si je l’ai lu là bas ou sur le forum) pour savoir à quel endroit mettre un fichier php qui sera chargé par un snippet (avec un include)
                      Si c’est bien la bonne façon de faire bien sûr, quelqu’un a une piste ?

                      Je compte finalement faire 6 snippets (déjà 2 pour commencer) et je souhaiterai partager une fonction entre eux, sans avoir à la copier coller dans chaque.

                      Merci