developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#474 closed new feature (fixed)

plugin image

Reported by: Lipki Owned by: Lipki
Priority: low Milestone: Jelix 1.0.3
Component: jelix:plugins Version: 1.0.2
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description (last modified by laurentj)

Le plugin image permet d'intégrer des images dans les templates jTpl, et de faire tous plein de choses avec, pour plus de détails voir ici.

Attachments (2)

function.image.zip (64.6 KB) - added by Lipki 12 years ago.
function.image.php (6.8 KB) - added by Lipki 12 years ago.

Download all attachments as: .zip

Change History (21)

comment:1 Changed 12 years ago by laurentj

  • Description modified (diff)

comment:2 Changed 12 years ago by laurentj

  • review review? deleted

C'est mieux d'attacher le fichier au ticket ;-)

comment:3 Changed 12 years ago by laurentj

  • Milestone Jelix 1.0.3 deleted

comment:4 Changed 12 years ago by Lipki

Je le ferais au boulot lundi.
Je t'ai dit que je ne connaissais rien a cet outil.

Changed 12 years ago by Lipki

comment:5 Changed 12 years ago by Lipki

  • review set to review?

comment:6 Changed 12 years ago by Lipki

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 2572500 bytes) in C:\(...)\function.image.php on line 122

{image 'boites/'.$id_produit.'.png', array('alt'=>'Image du produit, '.$label_produit.'.', 'class'=>'left', 'width'=>194, 'height'=>195, 'omo'=>true, 'zoom'=>80, 'alignh'=>-200)}

Erreur produite sur certaine image, je ne paut pas regarder tous de suite.

comment:7 Changed 12 years ago by laurentj

  • Priority changed from normal to low
  • review changed from review? to review-
  • Summary changed from plugin image to ç

Remarques générales:

  • fait "accept ticket" en bas du ticket.
  • À propos des fonctions autre que jtpl_function_html_image : il faut les appeler autrement, ils ont des noms trop banals et ça peut provoquer des collisions à l'avenir.
  • respecter la norme de codage de jelix, entre autre en ce qui concerne l'indentation : pas de tab, mais 4 espaces.
  • faire des sauts de ligne aprés un if.
* @version    $Id$

à virer.

	$www = 'http://'.$_SERVER['HTTP_HOST'].$gJConfig->urlengine['basePath'];

Et si on est en https ? ;-)

$att['alt'] = '';

Pas d'initialisation de $att, ça ne génère pas de notice ça ? Dans le même genre, vérifier que {{{ empty($paramstruc?) }}} ne fait pas de notice si truc n'existe pas.

De plus je pense qu'il serait préférable d'utiliser array_intersect_key , ça éviterait ces tests.

		$att['src'] = $origine_www;
		$att['style'] = '';
		
		if( is_file($cache_path) ) 			$att['src'] = $cache_www;

Il y a deux assignations de $attsrc? à la suite. C'est mieux de faire :

   $att['style'] = '';
	
   if( is_file($cache_path) )
       $att['src'] = $cache_www;
   else
       $att['src'] = $origine_www;

if( !is_file($cache_path) )

Il y en a plusieurs, c'est couteux. stocker le résultat dans une variable.

foreach( $att as $key => $val ) if( !empty($val) )
    $node .= ' '.$key.'="'.$val.'"';

Faire directement un echo. C'est moins couteux.

throw new jException('l\'image "'.$src.'" n\'existe pas dans "www/data/fichiers/"');

jException n'accepte pas de message en paramètre, mais une clé pour jLocale. D'ailleurs il est probable que ton problème d'erreur de mémoire vienne de là. Il y a un bug connu sur jLocale qui boucle à l'infinie dans certains cas. Donc soit tu rajoutes une locale dans le module jelix, soit tu utilises Exception.

inCache:

$origine_www = 'http://'.$_SERVER['HTTP_HOST'].$gJConfig->urlengine['basePath'].'data/fichiers/'.$src;

Même remarque à propos de https

	$dir = $path_parts['dirname'];
	$name = $path_parts['basename'];
	$ext = $path_parts['extension'];
	$file = $path_parts['filename'];

$dir, $name et $file ne sont pas utilisées. donc code inutile.

	if($mimes == 'image/gif') $image = imagecreatefromgif($origine_www);
	if($mimes == 'image/jpeg') $image = imagecreatefromjpeg($origine_www);
	if($mimes == 'image/png') $image = imagecreatefrompng($origine_www);
	if($mimes == 'image/vnd.wap.wbmp') $image = imagecreatefromwbmp($origine_www);
	if($mimes == 'image/image/x-xbitmap') $image = imagecreatefromxbm($origine_www);
	if($mimes == 'image/x-xpixmap') $image = imagecreatefromxpm($origine_www);

Faire plutôt des else if ou un switch.

   else if($array['alignh'] == 'center')	;
   else	 $posx = -$array['alignh'];

Remplacer par

   else if($array['alignh'] != 'center')
	 $posx = -$array['alignh'];

Même remarque pour le test d'après.

function mime($extension){
	if(strtolower($extension) == 'gif')
		return 'image/gif';
	else if(	strtolower($extension) == 'jpeg'
			||	strtolower($extension) == 'jpg'
			||	strtolower($extension) == 'jpe')
		return 'image/jpeg';
	else if(strtolower($extension) == 'xpm')
		return 'image/x-xpixmap';
	else if(strtolower($extension) == 'xbm')
		return 'image/x-xbitmap';
	else if(strtolower($extension) == 'wbmp')
		return 'image/vnd.wap.wbmp';
	else
		return 'image/png';
}

Faire le strtolower une seule fois. Peut être aussi que mettre les correspondances dans un tableau + un isset serait plus économique.

comment:8 Changed 12 years ago by laurentj

  • Summary changed from ç to plugin image

comment:9 Changed 12 years ago by Lipki

  • Owner set to Lipki
  • Status changed from new to assigned

arg ...

comment:10 Changed 12 years ago by Lipki

  • review changed from review- to review?

À propos des fonctions autre que jtpl_function_html_image : il faut les appeler autrement, ils ont des noms trop banals et ça peut provoquer des collisions à l'avenir.

jtpl_function_html_image_getSrc jtpl_function_html_image_inCache

array_intersect_key

je ne connaissais pas.

J'ai retiré l'exceptions, que je trouve inutile. J'ai ajouter des return dans certain cas, l'erreur a disparue, mais du coup c'est tout incache qui est squizé. Un problème d'extension ou de mime, je vais chercher.

Avec tes conseils, j'ai grandement alléger le code, ça me plait bien :)

comment:11 Changed 12 years ago by laurentj

  • review changed from review? to review-

Merci pour ces modifications. Sinon, je viens de me rendre compte que j'ai pas vu un truc : la fonction jtpl_function_html_image_getSrc est appelée plusieurs fois, et toujours avec les mêmes paramètres. Ce serait donc mieux de migrer son code au debut de jtpl_function_html_image, afin de calculer une bonne fois pour toute le nom du fichier de cache (et donc le passer à jtpl_function_html_image_inCache).

Pour le reste, ca me semble ok :-)

comment:12 Changed 12 years ago by Lipki

Ouais j'ai hésiter a l'enlever ... Mais ok.

Changed 12 years ago by Lipki

comment:13 Changed 12 years ago by Lipki

  • review changed from review- to review?

voila c'est fait

comment:14 Changed 12 years ago by laurentj

  • Milestone set to Jelix 1.0.3
  • review changed from review? to review+

ok parfait. Merci pour cette contribution. Elle sera incluse dans subversion dés que possible.

comment:15 Changed 12 years ago by Lipki

\o\ \o/ /o/

comment:16 Changed 12 years ago by Lipki

je vais refaire la doc, la faire corriger, et l'ajouter au wiki.

comment:17 Changed 12 years ago by laurentj

  • Resolution set to fixed
  • Status changed from assigned to closed

plugin inclus dans la branche 1.0.x et le trunk. svn 800.

Merci pour cette contribution.

comment:18 Changed 12 years ago by Lipki

  • Documentation needed set

comment:19 Changed 12 years ago by Lipki

  • Documentation needed unset
Note: See TracTickets for help on using tickets.