f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009
-
26 juin 2009 à 11:44
f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009
-
6 juil. 2009 à 17:49
Salut,
J'ai un code php qui génère un fichier xml, mais les résultats s'affichent dans un ordre aléatoire, hors j'aimerais trier les données dans un ordre alphabétique.
Est-ce que je dois créer un xsl ou est ce qu'il y a moyen de trier dans le code php?
Merci
le code php(il s'agit d'une galerie flash) :
function listerIMG($s_nomrep_courant)
{
global $s_xml;
global $listeRepertoires;
/*--- Liste des images du Répertoire ---*/
if( strlen($s_nomrep_courant) > 1 )
{
$repActu = opendir($s_nomrep_courant);
// Scan du répertoire
while($scanimg=readdir($repActu))
{
// Verification de l'extension d'image
$ext = strtolower(substr($scanimg, strrpos($scanimg, '.') + 1));
// à modifier suivant l'extension des images du répertoire
//if (($ext=="PNG") || ($ext=="png"))
if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="JPEG") || ($ext=="JPG") )
{
$nomrep = substr($s_nomrep_courant, 2);
$s_param = explode(".", $scanimg);
$nomimage = $s_param[0];
/*--- création des miniatures ---*/
$s_chemin_mini = substr($s_nomrep_courant, 2);
$s_mini_img = $scanimg;
// on ne redimensionne pas la miniature
if( substr($s_mini_img, 0, 5) != "mini_" )
{
if( file_exists($s_chemin_mini."/mini_".$s_mini_img) )
{
//echo " le fichier existe : ".$s_chemin_mini."/mini_".$s_mini_img."
";
}
else
{
//echo "creation de la miniatures
";
resize( $s_chemin_mini."/", $s_mini_img);
}
// mise à jour du fichier xml
$s_xml .="<detail nomimage="".$nomimage."" urlimage="".$s_nomrep_courant."/".$scanimg."" nomrepertoire="".$nomrep."" vignette="".$s_nomrep_courant."/mini_".$scanimg."" >Des commentaires optionnels)
</detail>";
}
// remplit le tableau des répertoires
array_push ($listeRepertoires, $nomrep);
}
}
}
closedir($repActu);
return true;
}
}
// entrée : le nom du répertoire (le chemin), le nom du fichier à redimensionner
// sortie : true or false
// fonction : redimensionne des images
function resize($s_chemin, $file)
{
$size = getimagesize($s_chemin.$file);
# getimagesize() retourne un tableau de 4 éléments.
# L'index 0 contient la largeur. L'index 1 contient la longueur. L'index 2 # contient le type de l'image : 1 GIF, 2 JPG, # 3 PNG, 5 PSD, 6 = BMP.
# L'index 3 contient la chaîne à placer dans les balises
# HTML : "height=xxx width=xxx"
# (source www.php.net)
$dest_width = ($size[0]/4); //détermine la taille de la miniature, ici l'on désire quelles soient d'un sixième de leur taille normale
$dest_eight = ($size[1]/4);
//$dest_width = 200;
//$dest_eight = 200;
f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009 30 juin 2009 à 10:04
Ceci doit être la fonction qui remplit le fichier xml, donc je suppose que c'est cette fonction que je dois attaquer.
J'ai essayé de m'inspirer du tableau $listeRepertoires, et mon tableau s'appelle $tri.
Si tu penses que je n'attaque pas la bonne partie, tout le code est dans le premier post.
// entrée : le nom du répertoire à scanner
// fonction : liste les images d'un répertoire et met à jour le fichier xmlfunction listerIMG($s_nomrep_courant)
{
global $s_xml;
global $listeRepertoires;
global $tri;
/*--- Liste des images du Répertoire ---*/
if( strlen($s_nomrep_courant) > 1 )
{
$repActu = opendir($s_nomrep_courant);
// Scan du répertoire
while($scanimg=readdir($repActu))
{
// Verification de l'extension d'image
$ext = strtolower(substr($scanimg, strrpos($scanimg, '.') + 1));
// à modifier suivant l'extension des images du répertoire
//if (($ext=="PNG") || ($ext=="png"))
if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="JPEG") || ($ext=="JPG") )
{
$nomrep = substr($s_nomrep_courant, 2);
$s_param = explode(".", $scanimg);
$nomimage = $s_param[0];
/*--- création des miniatures ---*/
$s_chemin_mini = substr($s_nomrep_courant, 2);
$s_mini_img = $scanimg;
// on ne redimensionne pas la miniature
if( substr($s_mini_img, 0, 5) != "mini_" )
{
if( file_exists($s_chemin_mini."/mini_".$s_mini_img) )
{
//echo " le fichier existe : ".$s_chemin_mini."/mini_".$s_mini_img."
";
}
else
{
//echo "creation de la miniatures
";
resize( $s_chemin_mini."/", $s_mini_img);
}
// mise à jour du fichier xml
$s_xml .="<detail nomimage="".$nomimage."" urlimage="".$s_nomrep_courant."/".$scanimg."" nomrepertoire="".$nomrep."" vignette="".$s_nomrep_courant."/mini_".$scanimg."" >Des commentaires optionnels)
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 30 juin 2009 à 18:01
Bonjour f0nzy,
Je préconiserai la méthode suivante (qui fera un tri sur le nom de l'image) :
// Ici tu mets à jour ta variable $s_xml
$s_xml .="<detail nomimage="".$nomimage."" urlimage="".$s_nomrep_courant."/".$scanimg."" nomrepertoire="".$nomrep."" vignette="".$s_nomrep_courant."/mini_".$scanimg."" >Des commentaires optionnels
</detail>";
// on rajoute ici le nom de l'image à l'array tri pour ensuite le trier
$tri[] = $nomimage;
// Cette partie viendra en dehors de la boucle pour effectuer le tri
sort($tri);
// Initialization d'un array qui contiendra la liste triée.
trie=array();
foreach ($tri as $key => $val) {
// Vérification de la présence de l'image ...
if (preg_match($val, $s_xml)) {
// Extraction de cet 'item' de la liste ...
$regex='/(<detail.?nomimage="'.$val.'".?urlimage="[^"]+?".?nomrepertoire="[^"]+?".?vignette="[^"]+?".?>[^<]*?</detail>)/i';
if (preg_match($regex, $s_xml, $res)) {
// Sauvegarde de l'item dans l'array final ...
$trie[]=$res[0];
}
}
}
// Enfin, ta variable $s_xml peut être réécrite ...
unset($s_xml);
foreach ($trie as $key => $val) {
$s_xml .= $val;
}
// Ici donc, $s_xml sera normalement une variable triée !
// Verification de l'extension d'image
$ext = strtolower(substr($scanimg, strrpos($scanimg, '.') + 1));
// à modifier suivant l'extension des images du répertoire
//if (($ext=="PNG") || ($ext=="png"))
if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="JPEG") || ($ext=="JPG") )
{
$nomrep = substr($s_nomrep_courant, 2);
$s_param = explode(".", $scanimg);
$nomimage = $s_param[0];
/*--- création des miniatures ---*/
$s_chemin_mini = substr($s_nomrep_courant, 2);
$s_mini_img = $scanimg;
// on ne redimensionne pas la miniature
if( substr($s_mini_img, 0, 5) != "mini_" )
{
if( file_exists($s_chemin_mini."/mini_".$s_mini_img) )
{
//echo " le fichier existe : ".$s_chemin_mini."/mini_".$s_mini_img."
";
}
else
{
//echo "creation de la miniatures
";
resize( $s_chemin_mini."/", $s_mini_img);
}
// mise à jour du fichier xml
$s_xml .="<detail nomimage="\"".$nomimage."\"" urlimage="\"".$s_nomrep_courant."/".$scanimg."\"" nomrepertoire="\"".$nomrep."\"" vignette="\"".$s_nomrep_courant."/mini_".$scanimg."\"">Des commentaires optionnels)
foreach ($tri as $key => $val) {
// Vérification de la présence de l'image ...
if (preg_match($val, $s_xml)) {
// Extraction de cet 'item' de la liste ...
$regex='/(<detail.?nomimage .?urlimage="[^" ]+?".?nomrepertoire="[^" ]+?".?vignette="[^" ]+?".?="">[^<]*?)/i';
if (preg_match($regex, $s_xml, $res)) {
// Sauvegarde de l'item dans l'array final ...
$trie[]=$res[0];
}
}
}
unset($s_xml);
foreach ($trie as $key => $val) {
$s_xml .= $val;
}
}
// Verification de l'extension d'image
$ext = strtolower(substr($scanimg, strrpos($scanimg, '.') + 1));
// à modifier suivant l'extension des images du répertoire
//if (($ext=="PNG") || ($ext=="png"))
if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="JPEG") || ($ext=="JPG") )
{
$nomrep = substr($s_nomrep_courant, 2);
$s_param = explode(".", $scanimg);
$nomimage = $s_param[0];
/*--- création des miniatures ---*/
$s_chemin_mini = substr($s_nomrep_courant, 2);
$s_mini_img = $scanimg;
// on ne redimensionne pas la miniature
if( substr($s_mini_img, 0, 5) != "mini_" )
{
if( file_exists($s_chemin_mini."/mini_".$s_mini_img) )
{
//echo " le fichier existe : ".$s_chemin_mini."/mini_".$s_mini_img."
";
}
else
{
//echo "creation de la miniatures
";
resize( $s_chemin_mini."/", $s_mini_img);
}
// mise à jour du fichier xml
$s_xml .="<detail nomimage="".$nomimage."" urlimage="".$s_nomrep_courant."/".$scanimg."" nomrepertoire="".$nomrep."" vignette="".$s_nomrep_courant."/mini_".$scanimg."" >Des commentaires optionnels)
foreach ($tri as $key => $val) {
// Vérification de la présence de l'image ...
if (preg_match($val, $s_xml)) {
// Extraction de cet 'item' de la liste ...
$regex='/(<detail.?nomimage="'.$val.'".?urlimage="[^"]+?".?nomrepertoire="[^"]+?".?vignette="[^"]+?".?>[^<]*?</detail>)/i';
if (preg_match($regex, $s_xml, $res)) {
// Sauvegarde de l'item dans l'array final ...
$trie[]=$res[0];
}
}
}
unset($s_xml);
foreach ($trie as $key => $val) {
$s_xml .= $val;
}
}
f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009 2 juil. 2009 à 11:35
Ah oui, tu as raison, je viens de remonter le code et j 'ai du changement, mais il y a une petite erreur dans le code :
Warning: preg_match() [function.preg-match]: Delimiter must not be
alphanumeric or backslash in ...
Après des recherches google, il dit d'utiliser la fonction strpos(), ca marche pour la premiere ligne ("if (preg_match($val, $s_xml))"), mais pour la seconde qui contient trois valeurs, c'est un autre problème
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 2 juil. 2009 à 18:42
Bonsoir f0nzy,
Je n'avais pas testé ce petit script. Je m'en excuse. Je croyais que tu pourrais le déboguer. Et en effet, il y a des bugs. Voici un code corrigé et qui fonctionne de la 2ème partie :
// Cette partie viendra en dehors de la boucle pour effectuer le tri
sort($tri);
// Initialization d'un array qui contiendra la liste triée.
$trie=array();
foreach ($tri as $key => $val) {
// Vérification de la présence de l'image ...
if (preg_match('/(nomimage="'.$val.'")/', $s_xml)) {
// Extraction de cet 'item' de la liste ...
$regex='/(<detail\snomimage="'.$val.'"\surlimage="[^"]+?"\snomrepertoire="[^"]+?"\svignette="[^"]+?"\s>[^<]*?<\/p><\/detail>)/';
if (preg_match($regex, $s_xml, $res)) {
// Sauvegarde de l'item dans l'array final ...
$trie[] = $res[0];
}
}
}
// Enfin, ta variable $s_xml peut être réécrite ...
unset($s_xml);
foreach ($trie as $key => $val) {
$s_xml .= $val;
}
// Ici donc, $s_xml sera normalement une variable triée !
echo $s_xml;
Les parties en rouge sont celles qui ont été corrigées/rajoutées pour que ça fonctionne.
f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009 3 juil. 2009 à 11:47
Je n'avais pas vu ton message sur la deuxième page, j'ai recopié ton code et il est bon merci
Mais j'ai toujours le problème xml, je copie/colle la partie de mon post précédent
Mon message d'erreur :
Warning: sort() expects parameter 1 to be array, null given in /homez.151/photograg/www/galerie...
Je me demande si ce n'est pas à cause du 'unset', car une partie du xml est définie avant de boucler et le unset détruit cette partie non?
cs_TropNul
Messages postés340Date d'inscriptiondimanche 18 septembre 2005StatutMembreDernière intervention22 octobre 2009 3 juil. 2009 à 16:05
Le sort() est avant le unset() donc je ne pense pas que ça soit cela. Normalement, selon le code que je t'ai donné, $tri doit être déclaré comme un array() avant toute chose. Puis tu le remplis via la commande $tri[] = $unevaleur, où $unevaleur, dans mon cas, était le nom de l'image. A toi de voir si c'est bien comme ça que tu l'utilises. Autrement, je te laisse le soin de trouver ce qui ne fonctionne pas. Le message dit ceci : " la commande sort() veut un tableau (array) en paramètre et pas autre chose ". Ce qui est logique.
f0nzy
Messages postés22Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention24 juillet 2009 3 juil. 2009 à 17:51
Salut,
tu as encore raison, j'ai oublié de déclarer mon tableau, mais j'ai tout de même erreur, je te met mon code, si tu sais jeter un oeil sinon c'est pas grave, tu m'as déjà bien aidé
// entrée : le nom du répertoire à scanner
// fonction : liste les images d'un répertoire et met à jour le fichier xml
function listerIMG($s_nomrep_courant)
{
global $s_xml;
global $listeRepertoires;
/*--- Liste des images du Répertoire ---*/
if( strlen($s_nomrep_courant) > 1 )
{
$repActu = opendir($s_nomrep_courant);
// Scan du répertoire
while($scanimg=readdir($repActu))
{
// Verification de l'extension d'image
$ext = strtolower(substr($scanimg, strrpos($scanimg, '.') + 1));
// à modifier suivant l'extension des images du répertoire
//if (($ext=="PNG") || ($ext=="png"))
if (($ext=="jpg") || ($ext=="jpeg") || ($ext=="JPEG") || ($ext=="JPG") )
{
$nomrep = substr($s_nomrep_courant, 2);
$s_param = explode(".", $scanimg);
$nomimage = $s_param[0];
/*--- création des miniatures ---*/
$s_chemin_mini = substr($s_nomrep_courant, 2);
$s_mini_img = $scanimg;
// on ne redimensionne pas la miniature
if( substr($s_mini_img, 0, 5) != "mini_" )
{
if( file_exists($s_chemin_mini."/mini_".$s_mini_img) )
{
//echo " le fichier existe : ".$s_chemin_mini."/mini_".$s_mini_img."
";
}
else
{
//echo "creation de la miniatures
";
resize( $s_chemin_mini."/", $s_mini_img);
}
// mise à jour du fichier xml
$s_xml .="<detail nomimage="".$nomimage."" urlimage="".$s_nomrep_courant."/".$scanimg."" nomrepertoire="".$nomrep."" vignette="".$s_nomrep_courant."/mini_".$scanimg."" >Des commentaires optionnels)
</detail>";
$tri[]=$nomimage;
}
// remplit le tableau des répertoires
array_push ($listeRepertoires, $nomrep);
}
}
}
sort($tri);
// Initialization d'un array qui contiendra la liste triée.
$trie=array();
foreach ($tri as $key => $val) {
// Vérification de la présence de l'image ...
if (preg_match('/(nomimage="'.$val.'")/', $s_xml)) {
// Extraction de cet 'item' de la liste ...
$regex='/(<detail\snomimage="'.$val.'"\surlimage="[^"]+?"\snomrepertoire="[^"]+?"\svignette="[^"]+?"\s>[^<]*?<\/p><\/detail>)/';
if (preg_match($regex, $s_xml, $res)) {
// Sauvegarde de l'item dans l'array final ...
$trie[] = $res[0];
}
}
}
// entrée : le nom du répertoire (le chemin), le nom du fichier à redimensionner
// sortie : true or false
// fonction : redimensionne des images
function resize($s_chemin, $file)
{
$size = getimagesize($s_chemin.$file);
$dest_width = ($size[0]/3); //détermine la taille de la miniature, ici l'on désire quelles soient d'un sixième de leur taille normale
$dest_eight = ($size[1]/3);
//$dest_width = 200;
//$dest_eight = 200;
<t id="90">Chargement du xml en cours...</t>
<t id="91">Chargement de l'image en cours...</t>
<t id="92">Chargement en cours...</t>
<t id="93">test</t>
/*--- mise en utf8 des caractères accentués ---*/
$s_accentues = array("à","ç","è","é","ê","ë","î","ô","ù");
$s_utf8 = array("à","ç","è","é","ê","ë","î","ô","ù");