We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36730
    • 63 Posts
    Bonjour à tous
    Je suis en plein creusage de cerveau pour trouver une bonne solution de galerie avec Modx

    L’addon Gallery est pas mal, mais un peu complexe à mon goût (bon, je n’ai pas un excellent niveau en code, ceci explique aussi cela)
    Je n’ai pas trouvé comment lui faire gérer des pages pour l’affichage d’un album pour éviter de tout afficher d’un coup. J’ai seulement pu indiquer une limite de 20 items affichés, mais comment afficher les suivants ?
    Quand je lui demande de m’afficher une photo "en grand" donc en cliquant sur la photo, il m’affiche les données brutes ressemblant à ceci
    �����ÿþ�;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 90 ÿÛ�C1Ú´áMò nCÛ¸¬#H‚»‘rö«ñ￾￾ÃvG¯ëMeR’¯ÝRC¡ô5ecù˜￾�<‘‘Š· ©Üp2z·¥�T¬FGÝaÉÅ'”6ÆÊS9cÜÖ²Û…‰r»MP»�”q￾“Uboc5¶¨bßxzzô¾gž•Nê~^@såüÛ}ê½µùhÁýã‘ž†«”.j‚¥G©8"¥-‰Wi©Ã:ÍågŽFìw㊳~êB¸‡+ïÏ4￾U‚ȪýÑŸÆ￾$A•#è½?Š,„g–9¦￾ä¾F ž�îE�'ÝSŒç\úÔò&øÈîpxêM1Ðm$w#￾j￾°WSÁ=:zS9P.})ÛwÆŸ9À”ॢ-ÀÏ:î•AÊ«íö¤22Û@;p«ò·¹4¼¢d}øÎIíô§€²†￾￾±¯ZŒJüÒ`*õǽ¹ 7`S#Œ+&zAîL3»wY0C˜Çd²ðÄrÆ￾Œ(NÐW•ÉOCM yÉÇ#±5,ÌGRWåÍ,¸VŒpè‹“Žæ￾²9cÉÓqÇò#HÛr¡J�;ÔÅ $ñ³bHú? =ª>￾¬0@í@Æ¡ƒnñëM“ %pB®ëRI—Y�8!³°})ƒåbä¸g±µ0x'1ïI:瞇…?oúÞpTä7· ¨￾w)ÀÚǨ>‚€À1á¸Ævã¯Zd¹8n†N?#Þ¤s´±#åë´u¤“îO:Ú￾"fP￾O9ö¨‰Ä~¥N1è}iîØidS￾ê}iZ0äF￾¥0#—pØ;³ÎIâ´4럳†…￾Ê[šÏsæÈ2¸ãŽæ€û<žËdŸJ@nÝ[ýégNOZÀ¾²ýÔ¨�Élÿ�ú«^ÎíN!”äžTš’êØIr†Ž�ÔÓ™*fHJýí¥ ú{ÔN


    Bref, ça se règle surement, mais en même temps j’ai envie d’une solution encore meilleure.
    J’ai une galerie faite avec Piwigo chez mon hébergeur, elle devait disparaitre si l’addon était suffisant pour la remplacer (je n’ai pas de besoins énormes) et finalement il semblerait qu’on puisse la réutiliser. Tant qu’à faire autant utiliser quelque chose qui est fait pour ça smiley

    Il me semblait qu’il possédait une API pour y accéder depuis "ailleurs", j’ai cherché et c’est le cas \o/
    Ils nomment cela Web Services et ça semble extrèmement pratique pour en faire un snippet, voire un addon complet smiley

    Voici sa doc: http://fr.piwigo.org/doc/doku.php?id=projet:developpement:web_services
    On peut donc absolument tout faire avec (sauf la suppression et la consultation des catégories privées je crois)

    Pour ceux qui veulent jouer avec, il y a la galerie de démo de Piwigo ici: http://fr.piwigo.org/demo/
    Et de quoi tester le système des WebServices avec: http://fr.piwigo.org/demo/tools/ws.htm (Cliquez sur "Go!" )

    Malheureusement je n’ai pas suffisament de compétences pour faire ça complètement et proprement, je vais commencer par utiliser le script proposé et tenter de le faire fonctionner en snippet modx puis chercher de la doc pour faire un vrai addon. Les paramètres seront en dur dans le code pour commencer.
    Toute aide sera la bienvenue :]
      • 36730
      • 63 Posts
      Après une longue soirée la tête dedans, j’ai réussi à pondre ceci:
      <?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) {
      		// 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 correcte ? */
      	 {
      	   /* 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, tn_url, element_url, date_creation, date_available, categories[page_url] */
      		$picture = $thumbc["result"]["images"]["_content"][$i]; 
      		
      
      		}
      		foreach ($picture as $picture) {
      			$output .= '<a href="'
      			. $picture->get('page_url') . 'title="' . '">' . '<img src="'
      			. $picture->get('tn_url') . '" title="'
      			. $picture->get('name') . '" /></a><span class="imgInfosCls">' . 'Hits :'
      			. $picture->get('hit') . '<br />'
      			. $picture->get('comment') . '<br />'
      			. $picture->get('width') . '<br />'
      			. $picture->get('height').'</span>';
      			/* $resourceArray = $resource->toArray();
      			$output .= $modx->getChunk($tpl,$resourceArray); */
      		}
      		
      	 }
      	 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);


      Qui ne marche évidemment plus depuis que j’ai essayé de mettre en place un template par défaut. C’est là que j’ai besoin d’un coup de main, j’utilise ceci: http://rtfm.modx.com/display/revolution20/Templating+Your+Snippets
      J’ai enlevé le bout de code qui activait le template pour le moment, pour essayer de sortir quelque chose sans. (Que ça m’affiche l’array des placeholders me plairait beaucoup laugh )

      Et j’obtiens ceci comme erreur:
      Fatal error: Call to a member function get() on a non-object in 
      ce qui fait référence à la ligne:
      . $picture->get('page_url') . 'title="' . '">' . '<img src="'

      Je sais que j’ai dû faire une connerie avec la façon de parcourir $picture, mais je suis trop KO ce soir pour continuer à chercher, j’ai plus de cerveau :p

      Il y a encore beaucoup de boulot pour arriver à quelque chose de propre et réutilisable par d’autres. Si quelqu’un se sent d’y mettre la tête ce serait avec plaisir.

      Merci
      • Salut Epy,

        Au premier coup d’oeil de non-expert-php, ta condition foreach me chiffonne… si je comprend bien, tu sélectionnes chaque image avec
        for ($i=0;$i<$thumbc["result"]["images"]["count"];$i++)

        Donc pour moi, pas besoin de foreach…

        Aussi, d’après tes commentaires, $picture a pour valeur (entre autre) categories[page_url] et non page_url, m’est donc avis que
        $picture->($categories['page_url'])
        

        serait plus approprié… enfin je dis ça, je dis rien, c’pas comme si j’avais 15 ans de PHP derrière moi smiley

        Bon courage à toi en tout cas!
          • 36730
          • 63 Posts
          C’est tout à fait le genre de chose qu’on ne remarque pas à 1h du mat, et sans beaucoup d’expérience, merci !

          Pour le foreach, c’est l’impression que j’avais moi aussi, mais j’ai tenté de calquer sur l’exemple puisque ça ne marchait pas sans, quitte à ce que ce ne soit pas très propre au départ ; et corriger par la suite.

          Les commentaires viennent en grande partie du code proposé dans la doc de piwigo, mais j’ai complété celui que tu cites en effet (après avoir affiché le tableau avec print_r) smiley
          Seulement, je ne suis pas certain que ce soit cette ligne qui coince, parce que je l’ai ajoutée après, et ça ne fonctionnait pas mieux.
          J’ai l’impression que je ne fais pas le parcours du tableau correctement, alors que le code est vraiment calqué sur ce que j’ai lu dans la doc: http://rtfm.modx.com/display/revolution20/Templating+Your+Snippets

          foreach ($resources as $resource) {
             $output .= '<li><a href="'.$modx->makeUrl($resource->get('id')).'">'.$resource->get('pagetitle').'</a></li>';
          }

          Bon, en acceptant le fait que je n’ai pas besoin du foreach puisque je suis déjà dans une boucle, comment puis-je récupérer les valeurs dans ce tableau:

           for ($i=0;$i<$thumbc["result"]["images"]["count"];$i++) /* (g) */
             {
              $picture = $thumbc["result"]["images"]["_content"][$i]; /* (h) */
          


          D’origine c’est fait comme ceci:
              $HTML_txt = '<a href="http://www.monsite.com/magalerie/picture.php?/'
                  . $picture['id'].'" title="'.$picture['name'].'">'.'<img src="'
                  . $picture['tn_url'].'" alt="'.$picture['name']
                  . '" /></a><span class="caption">['.$picture['width'].'x'
                  . $picture['height'].']   -  '.'Hits : '
                  . $picture['hit'].'</span><br/>';
              echo $HTML_txt;
          
          • Ah mais oui mais non!

            Au tant pour moi… dans MODX, tous les objets sont définis (schémas et classes), tu peux donc utiliser les méthodes (telle que $objet->get(’champ’)), mais dans ton cas je suppose que tu dois manipuler directement tes arrays.

            Donc dans ton cas je dirais:
            …
            		/* … 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, tn_url, element_url, date_creation, date_available, categories[page_url] */
            		$picture = $thumbc["result"]["images"]["_content"][$i]; 
            		
            
            		}
            		foreach ($picture as $picture) {
            			$output .= '<a href="'
            			. $picture['categories']['page_url'] . 'title="' . '">' . '<img src="'
            			. $picture['tn_url'] . '" title="'
            			. $picture['name'] . '" /></a><span class="imgInfosCls">' . 'Hits :'
            			. $picture['hit'] . '<br />'
            			. $picture['comment'] . '<br />'
            			. $picture['width'] . '<br />'
            			. $picture['height'].'</span>';
            			/* $resourceArray = $resource->toArray();
            			$output .= $modx->getChunk($tpl,$resourceArray); */
            		}
            …
            


            Pas tous les jours facile de passer du front au back, mais quand on obtient ce que l’on veut, qu’est-ce que c’est gratifiant !

            Encore bon courage à toi!
              • 36730
              • 63 Posts
              Donc finalement tu gardes le foreach() pour reparcourir le tableau ?

              Après ça, quand ça fonctionnera il va falloir que je repasse là dedans pour mettre ça dans un tpl par défaut, humm je vais m’amuser :]

              Effectivement c’est gratifiant d’y arriver en partant de presque rien smiley
              Et ça sera encore mieux si ça intéresse du monde et que ça rend service \o/
                • 36730
                • 63 Posts
                hum, pas réussi malgré les modifs, enfin l’erreur n’est plus la même donc ça progresse smiley
                J’ai copié le résultat du print_r($picture) pour savoir ce que ça dit, le voilà
                Array ( 
                	[id] => 145 
                	[width] => 640 
                	[height] => 480 
                	[hit] => 0 
                	[file] => Roadtrip_011.jpg 
                	[name] => 
                	[comment] => 
                	[date_creation] => 2009-01-07 00:00:00 
                	[date_available] => 2009-07-30 19:19:22 
                	[tn_url] => http://galeries.aide-en-info.net/galleries/Photographie/Roadtrip/thumbnail/TN-Roadtrip_011.jpg 
                	[element_url] => http://galeries.aide-en-info.net/galleries/Photographie/Roadtrip/Roadtrip_011.jpg
                	[categories] => Array ( 
                						[0] => Array ( 
                								[id] => 23 
                								[url] => http://galeries.aide-en-info.net/index.php?/category/23 
                								[page_url] => http://galeries.aide-en-info.net/picture.php?/145/category/23 ) ) ) 

                Il y a donc un tableau vide "0" au milieu, que j’ai donc ajouté à la correction que Romain m’a proposée, mais ça ne fonctionne quand même pas, j’ai :
                Fatal error: Cannot use string offset as an array in /core/cache/includes/elements/modsnippet/36.include.cache.php on line 51

                Ligne 51 du cache qui correspond à . $picture[’categories’][0][’page_url’] . ’title="’ . ’">’ . ’<img src="’
                Il l’aime pas. En le commentant, ça "fonctionne", j’ai bien l’affichage sur la page qui fait l’appel sur le site, ça répond des choses bizarres mais ça n’est pas le problème pour le moment smiley
                  • 2048
                  • 15 Posts
                  Sympa ça, bon je peux pas t’aider ce soir mais courage wink
                    coding Java Android and NDS
                    • 36730
                    • 63 Posts
                    Merci, j’en ai bien besoin parce que je patauge là.

                    Enfin je manque un peu de temps pour m’en occuper à cause du boulot et du déménagement en cours, mais je vais m’y remettre dès que possible
                      • 36730
                      • 63 Posts
                      Hum, j’ai refait tout le foreach, en suspectant que je faisais des erreurs en voulant trop faire à la fois.. résultat absolument identique sad

                      //$url_image = $picture['categories'][0]['page_url'] ;
                      			$url_tn = $picture['tn_url'] ;
                      			$name = $picture['name'] ;
                      			$hits = $picture['hit'] ;
                      			$comments = $picture['comment'] ;
                      			$width = $picture['width'] ;
                      			$height = $picture['height'] ;
                      			
                      			
                      			$output .= '<a href="'.$url_image.'" title="'.$name.'"><img src="'.$url_tn.'" title="'.$name.'"/></a><span class="imgInfosCls">Hits:'.$hits.'<br /></span>' ;

                      Et le code source du résultat:
                      <a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title="R"><img src="R" title="R"/></a><span class="imgInfosCls">Hits:R<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br />
                      </span><a href="" title="2"><img src="2" title="2"/></a><span class="imgInfosCls">Hits:2<br />
                      </span><a href="" title="2"><img src="2" title="2"/></a><span class="imgInfosCls">Hits:2<br />
                      </span><a href="" title="h"><img src="h" title="h"/></a><span class="imgInfosCls">Hits:h<br />
                      </span><a href="" title="h"><img src="h" title="h"/></a><span class="imgInfosCls">Hits:h<br />
                      </span><a href="" title=""><img src="" title=""/></a><span class="imgInfosCls">Hits:<br /></span>

                      C’est à ni rien comprendre ..
                      J’ai pu sans problème afficher le contenu des $picture[] avec des print ou print_r à la place des affectations aux variables dans le foreach.
                      Je ne comprends même pas d’où viennent ces R et ces 2

                      J’aimerais savoir si à cause de mon code en cours de dév (donc pas propre) ModX me bloquerait quelque chose, par sécurité ?
                      (J’ai une vilaine erreur si je décommente la première affectation,
                      Fatal error: Cannot use string offset as an array in modxR/core/cache/includes/elements/modsnippet/36.include.cache.php on line 51
                      )

                      Merci smiley