Ticket #474 (closed new feature: fixed)

Opened 9 months ago

Last modified 4 months ago

plugin image

Reported by: Lipki Assigned to: Lipki
Priority: low Milestone: Jelix 1.0.3
Component: jelix:plugins Version: 1.0.2
Severity: normal Keywords:
Cc: Php version:
Review: review+ Hosting Provider:
Documentation needed: 0 Blocking:

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

function.image.zip (64.6 kB) - added by Lipki on 03/03/08 18:09:07.
function.image.php (6.8 kB) - added by Lipki on 03/11/08 23:34:24.

Change History

03/01/08 21:03:46 changed by laurentj

  • description changed.

03/01/08 21:04:16 changed by laurentj

  • review deleted.

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

03/01/08 21:04:26 changed by laurentj

  • milestone deleted.

03/02/08 12:04:17 changed by Lipki

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

03/03/08 18:09:07 changed by Lipki

  • attachment function.image.zip added.

03/05/08 14:13:16 changed by Lipki

  • review set to review?.

03/06/08 21:36:31 changed 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.

03/07/08 13:16:39 changed 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.

03/07/08 13:17:25 changed by laurentj

  • summary changed from ç to plugin image.

03/10/08 12:00:26 changed by Lipki

  • status changed from new to assigned.
  • owner set to Lipki.

arg ...

03/10/08 14:30:42 changed 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 :)

03/10/08 21:42:12 changed 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 :-)

03/11/08 14:30:45 changed by Lipki

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

03/11/08 23:34:24 changed by Lipki

  • attachment function.image.php added.

03/11/08 23:35:03 changed by Lipki

  • review changed from review- to review?.

voila c'est fait

03/11/08 23:56:14 changed by laurentj

  • review changed from review? to review+.
  • milestone set to Jelix 1.0.3.

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

03/12/08 00:09:52 changed by Lipki

\o\ \o/ /o/

03/12/08 00:10:52 changed by Lipki

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

03/12/08 11:16:15 changed by laurentj

  • status changed from assigned to closed.
  • resolution set to fixed.

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

Merci pour cette contribution.

03/17/08 02:15:25 changed by Lipki

  • docneeded set to 1.

07/25/08 23:55:25 changed by Lipki

  • docneeded deleted.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed