Bonsoir à tous,
je poursuis donc mon chemin,
-> decouverte de Piwigo
-> forum Anglais
-> topic Installation
-> topic Utilisation
-> Gallerie opérationnelle
-> topic plugins existants
-> Mon propre plugin !
Pour continuer la discussion commencée sur http://fr.piwigo.org/forum/viewtopic.ph … 1&p=16 ,
je ne lache pas la faire sur cette histoire de redimensionnement des images à la volée, pour optimiser la performance et la bande passante.
A vue de nez, pour rappel:
http://piwigo.cumulodata.com/test/server_resize.php
http://piwigo.cumulodata.com/test/client_resize.php
(photo originale en 1400, redim en 700 => temps de téléchargement divisé par 4)
Grâce aux indications de cljosse, je rentre dans le systeme des templates , c'est du bonheur à utiliser !
aucun probleme donc pour brancher ImageMagick sur le téléchargement des images,
http://piwigo.cumulodata.com/picture.ph … category/5
je m'attaque maintenant a la recuperation de la taille :
(..)
(2h plus tard)
(..)
bah en fait c'est bon, j'ai résolu mes problemes !
http://piwigo.cumulodata.com/picture.ph … category/5
ca tourne !!!! exactement ce que je voulais :
Les images font 1440 de large de base,
là elles sont téléchargées à la bonne taille ! redimensionnées sur mon serveur.
temps de calcul : entre 0,3 et 0,5s par image. (largement compensé en temps de téléchargement !)
Pour tester, changez la taille de la fenetre, rafraichissez, et téléchargez l'image pour voir son poids / taille (ou 'propriétés de l'image) sous firefox.
J'ai maintenant besoin de vous pour la suite, si vous etes interessé par la fonctionnalité en plugin.
- déja, petit sondage , qui est interessé ? sachant qu'il faut imagick pour le faire tourner, et qu'un serveur dédié est préférable (le redimensionnement pompe 1/2s de proc à fond a chaque image)
- pour l'instant ca ne tourne que sur le theme 'stripped', vu que je me plugge sur son systeme de rechargement d'image.
Pour l'adapter à tous les themes, je peux me baser sur autosize, si cjosse tu as la gentillesse d'heberger mon code client ;)
- quels sont les ecueils que je vais rencontrer pour m'adapter à tous les cas de figure ?
- est ce qu'un plugin peut modifer le js d'un theme ?
- j'utilise jquery.cookie, je ne vois ce plugin jquery que dans le theme simple, dois-je du coup l'embarquer dans mon plugin ?
Voilà, merci pour vos commentaires.
- Arno
Hors ligne
Oui ce serais super si tu faisais un plugin :-)
Non cjosse ne va pas 'hébergé' ton code, tu vas faire ton propre plugin ;-)
Mais oui bien sur tu peux partir de ce qu'il a fait pour adapter (penser à renommer les fonctions)
oui tu dois embarquer le JS dans ton plugin mais ne le charger que s'il n'est pas encore charger
La souplesse de Piwigo, permet à l'aide d'un plugin de charger et modifier pratiquement tout
Donc félicitation pour le la mise en route en direction d'un nouveau plugin :-)
Hors ligne
Pour être compatible avec l'existant, je dois me baser sur ce qui existe : le js de stripped, par exemple, ou autosize pour les autres themes.
e plugin comporte 2 parties, une partie pour le redimmensionnement coté serveur, et l'autre pour la récupération de la bonne taille coté client.
Quand je parlais d'heberger, il s'agissait d'heberger 2 lignes de codes pour que autosize transmette à DynamicSize les parametres de l'image redimensionnée
Hors ligne
arno a écrit:
Quand je parlais d'heberger, il s'agissait d'heberger 2 lignes de codes pour que autosize transmette à DynamicSize les parametres de l'image redimensionnée
Ok
Ce que je ne perçois pas (je fais sans doute une mauvaise analyse des choses)
Si tu redimensionne coté serveur l'image, pour moi tu n'as plus besoins Autosize, tu affiches après l'image dans le navigateur à sa taille réelle ?
Donc je pense que tu dois faire un plugin autonome ? et donc interroger toi même pour obtenir la taille à envoyer ? (rien ne t'empêche de copier cette partie dans Autosize)
Hors ligne
arno a écrit:
Pour être compatible avec l'existant, je dois me baser sur ce qui existe : le js de stripped, par exemple, ou autosize pour les autres themes.
e plugin comporte 2 parties, une partie pour le redimmensionnement coté serveur, et l'autre pour la récupération de la bonne taille coté client.
Quand je parlais d'heberger, il s'agissait d'heberger 2 lignes de codes pour que autosize transmette à DynamicSize les parametres de l'image redimensionnée
Bonjour.
Pas de problème pour inclure tes lignes de code.
Mais je pense faire évoluer affiche_sript.js.
Le but de cette évolution serait de pouvoir utiliser le corps de "autosize" pour récupérer la taille de l'image recalculée en fonction de variables en entrée, de façon que chaque thème(plugins) puisse utiliser ces informations pour gérer l'affichage directement, en évitant ainsi un redimentionnement en aval.
A+
Dernière modification par cljosse (2011-01-19 09:20:02)
Hors ligne
Bravo arno, on attend la suite !
Hors ligne
Hum,
bon, je me suis lancé dedans tete baissée mais je me suis pris un mur ^^
J'ai étudié tout ce qui se trouvait dans
http://fr.piwigo.org/doc/doku.php?id=pr … nt:plugins
qui est globalement assez clair, mais je reste un peu sur ma faim..
- environnement général et creation des options, ok tres bien.
- triggers : je commence à bloquer:
"Dans les fonctions de Piwigo, nous trouvons dans la plupart des cas des triggers de la forme :"
ok, je vois le principe du event handler réattribuable, tres intelligent comme systeme.
mais:
* je ne comprend pas trop comment on peut savoir quels evenements existent, quand ils sont déclenchés, quels sont les parametres supplémentaires .. , y'a t'il une nomenclature quelque part ?
- en fait, j'ai l'impression que ce n'est pas ce que j'ai besoin, moi pour l'instant j'ai a ma disposition comme code modifié :
* un template modifé picture_content.tpl
* un nouveau fichier php qui doit se trouver pas loin
* un nouveau js jquery.cookie (qui existe déja dans le theme 'simple')
* une modification de themes/stripped/template/header.tpl
* 2 lignes de codes rajoutées dans themes/stripped/js/scripts-tpp.js, au beau milieu de la fonction jQuery("document").ready(function(jQuery) {
je ne vois pas trop comment les triggers vont m'aider :/
Voilà, si vous pouviez me donner un coup de main pour démarrer ca serait sympa !
merci !
- Arno
Hors ligne
Yoo...
Bon, je vais essayer de faire court parce que j'ai plein d'autres trucs à faire...
Bon, déjà, non, il n'y a pas de nomenclature des triggers :-/ ... (Si tu veux en faire une, on t'aidera, promis ^^ !)
En fait les triggers permettent de rajouter du code PHP à un moment bien précis du script. Le script en soi n'est pas très compliqué à suivre ; c'est un peu rébarbatif, mais globalement on finit par arriver à suivre à peu près ce qui se passe entre le début et la génération du HTML.
Donc généralement quand on a besoin de faire effectuer une action par le PHP avant la génération du HTML, on cherche le trigger qui s'approche le plus du moment où cette action est requise -- enfin moi c'est comme ça que j'ai fait jusqu'ici.
Ensuite Smarty s'occupe à proprement parler de la gnération du HTML. Avec $template->assign(), on "passe" des variables à Smarty, qu'on peut utiliser ensuite dans les TPL. Si on veut modifier des template avec un plugin, il ne faut pas passer par un template-extension, qui sert à modifier un template dans un thème, mais par un préfiltre. Je t'invite à effectuer une recherche sur ce terme dans les messages du forum, ou prefilter dans le forum anglophone, pour mieux voir comment utiliser les préfiltres. Regarde aussi [extension by ] , pour ça.
Tu dis que tu as un fichier PHP. Mais comment faire pour qu'il soit utilisé sans effectuer de modification dans un autre fichier ? En faisant appeler ses fonctions par des triggers, déclarés dans le main.php de ton plugin.
Bon courage ; à bientôt !
Hors ligne
ok ...c'est un peu plus clair, mais juste un peu !
je vais essayer de faire sans template en fait, pour l'instant en tout cas
un premier point obscurs :
je rajoute add_event_handler('loc_begin_picture') dans mon plugin, ok.
concretement, j'ai besoin de changer la valeur de 'SRC_IMG' envoyé au template:
-est ce que je dois recopier tout le contenu de la méthode d'origine dans le plugin ?
et si le code venait à etre modifié ?
- est ce qu'il y a un autre moyen de reaffecter la valeur sans recopier toute la méthode ?
- je comprend le mécanisme des prefiltres pour les templates, mais en fait je ne comprend pas bien le mécanisme utilisé pour modifier les méthodes elles meme :P
- je comprend que les handlers peuvent etre multiples , donc du coup les plugins se juxtaposer, dnas quel ordre sont ils appliqués ? quels impacts peuvent il avoir les uns envers les autres ?
Merci !
-Arnaud
Hors ligne
arno a écrit:
concretement, j'ai besoin de changer la valeur de 'SRC_IMG' envoyé au template:
-est ce que je dois recopier tout le contenu de la méthode d'origine dans le plugin ?
et si le code venait à etre modifié ?
Tu 'intercepte la valeur et tu la réaffecte par exemple :
global $template;
$srcimg = $template->get_template_vars('SRC_IMG');
//ton code qui donne la nouvelle valleur à $srcimg
$template->assign('SRC_IMG', $srcimg);
Hors ligne
Hum, décidément, je dois etre plus bête que la moyenne ..
dans main.inc.php, j'ai :
add_event_handler('loc_begin_picture','dynamic_resize_picture_content'); // this is the custom handler that generates the display for the element function dynamic_resize_picture_content(){ global $template; $srcimg = $template->get_template_vars('SRC_IMG'); echo 'var SRC_IMG interecepted from template:'.$srcimg.'<br/>'; (..) }
ca m'affiche une belle chaine vide !
sachant que le template /web/themes/stripped/template/picture_content.tpl
contient bien une variable SRC_IMG ..
Ou est-ce que je fais une erreur ?
Hors ligne
arno a écrit:
Hum, décidément, je dois etre plus bête que la moyenne ..
Je te rassure tout de suite : tu es utilisateur Piwigo -- et en plus même, tu crées un plugin --, ce n'est donc pas le cas !! ^^
arno a écrit:
(...) ca m'affiche une belle chaine vide !
sachant que le template /web/themes/stripped/template/picture_content.tpl
contient bien une variable SRC_IMG ..
Ou est-ce que je fais une erreur ?
Es-tu sûr que, au moment où tu cherches à récupérer sa valeur, la variable SRC_IMG a déjà été définie ? Effectue une recherche dans les fichiers PHP susceptibles de la définir, tu dois trouver à un moment un
$template->assign('SRC_IMG', <une certaine valeur>);
ou
$template->assign(array(
(...),
'SRC_IMG' => <une certaine valeur>,
(...)
));
Hors ligne
bon ça va je suis rassuré alors ;)
la variable SRC_IMG semble venir de picture.php directement :
'SRC_IMG' => $element_info['image_url']
du coup, ca doit etre effectivement pour ca que mon
$srcimg = $template->get_template_vars('SRC_IMG');
ne renvoie rien
j'ai essayé directement de lire $SRC_IMG , mais la variable ne semble pas visible dans le plugin
je suis un peu perdu dans le scope des variables ...
Hors ligne
arno a écrit:
la variable SRC_IMG semble venir de picture.php directement :
'SRC_IMG' => $element_info['image_url']
du coup, ca doit etre effectivement pour ca que mon
$srcimg = $template->get_template_vars('SRC_IMG');
ne renvoie rien
Si le trigger loc_begin_picture est appelé avant le
'SRC_IMG' => $element_info['image_url']
alors effectivement $srcimg = $template->get_template_vars('SRC_IMG'); reverra une chaîne vide, dans une procédure déclenchée par ce trigger. D'autant plus que Smarty est ainsi codé : si on lui demande la valeur d'une de "ses" variables, car comme expliqué ci-dessous SRC_IMG est plus une "variable Smarty" qu'une "variable PHP" (noter les guillemets car cette explication est très schématique), alors que cette variable n'est pas définie, contrairement à PHP qui produirait au moins un warning, Smarty renverra 0 ou une chaîne vide. Ce qui peut être parfois souple, mais parfois moins pratique.
arno a écrit:
j'ai essayé directement de lire $SRC_IMG , mais la variable ne semble pas visible dans le plugin
je suis un peu perdu dans le scope des variables ...
Oui, alors attention : il n'existe pas de variable $SRC_IMG !
Smarty est... comment dire ça sans écrire une grosse bêtise me valant l'ire de l'équipe ?... Mettons : Smarty est une couche supplémentaire en plus du PHP. Lorsque les fichier .tpl sont lus par Smarty, tout le contenu inclus entre les balises { et } est "parsé" pour produire du code PHP. Il faut regarder dans le répertoire ./_data d'une instal Piwigo : on y trouve les templates après "parsage" (en quelque sorte une compilation) du Smarty au PHP, et de fait on y trouve des fichiers .php . Ces fichiers sont tout simplement les templates compilés (par Smarty), à l'intérieur desquels toutes les balises Smarty ( { (...) } ) sont remplacées par du PHP ( <?php (...) ?> ). Smarty permet donc de générer du PHP "répétitif".
Bon, où voulais-je en arriver, au fait, moi :-/ ???...
Ah oui : alors dans les templates (donc, en Smarty), on peut avoir besoin de variables. Pour ce faire, on affecte grâce à $template->asssign('TestVar', $valeur) , des valeurs qui peuvent varier, à des chaînes de caractères qui peuvent être appelées dans Smarty, de la façon suivante : {$TestVar} . $TestVar n'est pas défini "dans PHP", mais "dans Smarty" !! (Noter les guillemets :-/ .) Si on a besoin de récupérer cette valeur dans PHP (avant la génération du template, càd le "passage" du code de PHP à Smarty), et que l'on ne sait pas récupérer la variable $valeur qui est en fait la source de la valeur de {$TestVar} dans Smarty, alors on peut effectivement utiliser $template->get_template_vars('TestVar') dans PHP. Mais c'est un moyen un peu "lourd", comme on voit dans cette présente explication lumineuse et hyper-claire * .
Des questions ?? ^^
(*) C'est un gag :-| .
Hors ligne
as tu essayé avec
add_event_handler('loc_end_picture','dynamic_resize_picture_content');
Hors ligne