Bonjour à tous,
En premier je vais remercier l'equipe Grafikart pour tous ces tutos!
J'ai suivi le tuto sur la creation de sa gallery avec upload automatique et generation des vignettes.
Tout s'est tres bien passé, tout fonctionne niquel
J'aimerai juste savoir si il est possible d'inverser l'ordre d'affichage des vignettes.
En effet de base, la derniere image uploadée se met a la fin de la gallery.
Etant donné que dans mon cas ce sera pour mon nouveau portfolio je preferai avoir la derniere image uploadée en premier dans la gallery
Est-ce possible ? si oui comment ?
Merci,
PS : pour vos réponse merci d'etre tres clair car je ne suis pas du tout codeur, je suis de l'autre coté (coté graphique).
Sur ce forum, il est question de changer le chemin d'envoi des fichiers.
Le chemin d'upload devrait être sous la forme : /homepages/40/d196229223/htdocs/V6/adminworks/rep
Hello,
Cela semble possible oui, mais il faut taper dans le code.
En gros, il doit y avoir une requête SQL qui fait un "select ... from...." et il faut rajouter un "order by [identifiant de la table] desc".
Désolé de ne pas être plus...précis, mais c'est le plus simple :)
je ne suis pas sur qu'il ya de requete SQL, mais n'etant pas connaisseur je ne veux pas dire de betise.
Voici le code entierement repris du site et du tuto sur la creation de la gallery permettant l'upload des images et la creation des thumb.
<?php
class Img{
static function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100){
// On supprime l'extension du nom
$nom = substr($nom,0,-4);
// On récupère les dimensions de l'image
$dimension=getimagesize($img);
// On cré une image à partir du fichier récup
if(substr(strtolower($img),-4)==".jpg"){$image = imagecreatefromjpeg($img); }
else if(substr(strtolower($img),-4)==".png"){$image = imagecreatefrompng($img); }
else if(substr(strtolower($img),-4)==".gif"){$image = imagecreatefromgif($img); }
// L'image ne peut etre redimensionne
else{return false; }
// Création des miniatures
// On cré une image vide de la largeur et hauteur voulue
$miniature =imagecreatetruecolor ($mlargeur,$mhauteur);
// On va gérer la position et le redimensionnement de la grande image
if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1] ){ $dimY=$mhauteur; $dimX=$mhauteur*$dimension[0]/$dimension[1]; $decalX=-($dimX-$mlargeur)/2; $decalY=0;}
if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mlargeur*$dimension[1]/$dimension[0]; $decalY=-($dimY-$mhauteur)/2; $decalX=0;}
if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]){ $dimX=$mlargeur; $dimY=$mhauteur; $decalX=0; $decalY=0;}
// on modifie l'image crée en y plaçant la grande image redimensionné et décalée
imagecopyresampled($miniature,$image,$decalX,$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
// On sauvegarde le tout
imagejpeg($miniature,$chemin."/".$nom.".jpg",90);
return true;
}
}
?>
Apres sur la page affichant les thumbs j'ai ceci (la aussi repris des tutos sur ce site):
<div id="works">
<?php
$dos = "adminworks/imgworks/thumb";
$dir = opendir($dos);
while($file = readdir($dir)) {
$allow_ext = array('jpg','png','gif');
$ext = strtolower (substr($file,-3));
if(in_array($ext,$allow_ext)){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $file; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $file; ?>" />
</a>
</div>
<?php
}
}
?>
</div>
Hello,
Alors, sans grande conviction, je te propose de remplacer :
while($file = readdir($dir)) {
par
while($file = scandir($dir,1)) {
ça devrait lire ton répertoire dans l'ordre alphabetique inverse :
(source : Fonction ScanDir)
Après, si les fichiers ont des noms différents, il est toujours possible de faire quelque chose à partir de la date de création du fichier, pour cela, il faut utiliser la fonction filectime.
Cette fonction retourne le timestamp du fichier...donc ... petite idée :
Dans la boucle :
while($file = readdir($dir)) {
Tu créés un tableau associatif avec en clé le timestamp et en valeur le nom du fichier.
Une fois le tableau réalisé, tu lui fais un ksort() en ordonnant par ordre inverse et hop, tu lis ton tableau pour afficher les images.
Ai je été assez clair ? (je fais pas d'exemple car il fait tard et ma copine attend pour regarder "60 secondes" sur NRJ12 :)
en effet j'ai pas suivi, je ne suis vraiment pas un dev tu sais ;)
ton idée de ScanDir semble pas mal mais je ne souhaite pas les trier par ordre alpha, mais pas ordre d'up, la derniere image up en premiere dans la gallery.
Donc par date d'up ou de creation des thumbs peu fonctionner, mais je ne sais pas comment coder ça et l'implementer dans mon code actuel :D
si tu peux m'aiguillé la dessus je t'en remercie d'avance,
et merci pour tes reponses actuelles :)
Bon, voici un morceau de code qui devrait fonctionner :)
Remplace :
<?php
$dos = "adminworks/imgworks/thumb";
$dir = opendir($dos);
$allow_ext = array('jpg','png','gif');
while($file = readdir($dir)) {
$ext = strtolower (substr($file,-3));
if(in_array($ext,$allow_ext)){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $file; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $file; ?>" />
</a>
</div>
<?php
}
}
?>
Par :
<?php
$dos = "adminworks/imgworks/thumb";
$dir = opendir($dos);
$allow_ext = array('jpg','png','gif');
while($file = readdir($dir)) {
$ext = strtolower (substr($file,-3));
if (file_exists($dos.$file) && in_array($ext,$allow_ext)){
//On remplit le tableau associatif avec l'heure de modif et le nom du fichier sans extension afin de prendre en compte les images uploadées simultanéement.
$tab[filemtime($dos.$file)."-".substr($file,0,-4)] = $file;
}
}
//on trie dans l'ordre inverse par les clés histoire d'avoir les plus récentes en premier
if (isset($tab)){krsort($tab);}
// ensuite on lit le nouveau tableau
foreach ($tab as $i => $value){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $value; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $value; ?>" />
</a>
</div>
<?php
}
?>
Merci pour ta reponse et le temps que tu y a consacré
Des que j'aurai eu le temps de tester ça, je reviendrai te donner mon feedback
Merci
Me revoila :)
j'ai enfin eu un peu de temps pour continuer le site, sauf que je ne bloque apres 2 petites minutes :d
j'ai remplacé comme tu l'as montrer ici en faisant un copier/coller de ton code mais il m'affiche ça sur la page :
Warning: Invalid argument supplied for foreach() in /homepages/40/d196229223/htdocs/V6/index.php on line 58
j'avoue ne pas voir quelle est l'erreur dans la ligne de code 58 donc si toi ou quelqu'un a une idée ^^
pour le moment je ne peux donc pas te dire si ça marche ou pas le coup de l'inversement des images ;)
OK :)
Essaye le script sur un répertoire avec peu d'image.
Apparemment, il doit y avoir un élément du tableau qui n'est pas rempli (soi la date, soi le nom du fichier) :)
Avant le foreach, tu peux faire un :
print_r($tab);
? tu devrais avoir le résultat du tableau, tu pourrais le poster ici ?
mmm ajouté le print ne change rien
Voici donc le code actuel que j'ai (apres avoir recopier ce que tu m'as donné) + un screen de l'erreur indiquée sur le site
Merci encore pour ton aide :)
<?php
$dos = "adminworks/imgworks/thumb";
$dir = opendir($dos);
$allow_ext = array('jpg','png','gif');
while($file = readdir($dir)) {
$ext = strtolower (substr($file,-3));
if (file_exists($dos.$file) && in_array($ext,$allow_ext)){
//On remplit le tableau associatif avec l'heure de modif et le nom du fichier sans extension afin de prendre en compte les images uploadées simultanéement.
$tab[filemtime($dos.$file)."-".substr($file,0,-4)] = $file;
}
}
//on trie dans l'ordre inverse par les clés histoire d'avoir les plus récentes en premier
if (isset($tab)){krsort($tab);}
// ensuite on lit le nouveau tableau
print_r($tab);
foreach ($tab as $i => $value){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $value; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $value; ?>" />
</a>
</div>
<?php
}
?>
lien vers l'image full size : http://img11.hostingpics.net/pics/341538SCREEN.jpg
OK, mais le fichier que tu mets là, ce n'est pas le fichier index.php, il n'y a pas de ligne 60 :)
On va essayer autre chose,
Remplace :
//on trie dans l'ordre inverse par les clés histoire d'avoir les plus récentes en premier
if (isset($tab)){krsort($tab);}
// ensuite on lit le nouveau tableau
print_r($tab);
foreach ($tab as $i => $value){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $value; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $value; ?>" />
</a>
</div>
<?php
}
Par :
//on trie dans l'ordre inverse par les clés histoire d'avoir les plus récentes en premier
if (isset($tab))
{
krsort($tab);
foreach ($tab as $i => $value){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $value; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $value; ?>" />
</a>
</div>
<?php
}
}
else
{
echo "Pas d'image à afficher";
}
Après, juste après cette ligne :
while($file = readdir($dir)) {
ajoute la ligne :
echo $file."<br>";
ça affichera les fichiers au cas où ;)
si c'est bien le code du index.php mais vu que j'ai copié que la partie qui nous interesse, ici sur le forum il ny a qu'une trentaine de ligne (jy avais pas pensé)
voici donc l'integralité du code du index.php mis a jour avec ta réponse
<html>
<head>
<title>Sylvain Klein - Digital Artist</title>
<LINK REL="favicon" href="favicon.ico"/>
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript" src="zoombox/zoombox.js"></script>
<script type="text/javascript"> $(function(){$(".thumb").zoombox();}); </script>
<link href="zoombox/zoombox.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript">
jQuery(function($){
$('a.zoombox, .thumb, .thumb a').zoombox();
gallery : true;
});
</script>
</head>
<body>
<div id="header">
<?php include("header.php"); ?>
</div>
<div class="clear"></div>
<div id="works">
<?php
$dos = "adminworks/imgworks/thumb";
$dir = opendir($dos);
$allow_ext = array('jpg','png','gif');
while($file = readdir($dir)) {
echo $file."<br>";
$ext = strtolower (substr($file,-3));
if (file_exists($dos.$file) && in_array($ext,$allow_ext)){
//On remplit le tableau associatif avec l'heure de modif et le nom du fichier sans extension afin de prendre en compte les images uploadées simultanéement.
$tab[filemtime($dos.$file)."-".substr($file,0,-4)] = $file;
}
}
//on trie dans l'ordre inverse par les clés histoire d'avoir les plus récentes en premier
if (isset($tab))
{
krsort($tab);
foreach ($tab as $i => $value){
?>
<div class="thumb">
<a href="adminworks/imgworks/<?php echo $value; ?> " class="zoombox zgallery1">
<img src="adminworks/imgworks/thumb/<?php echo $value; ?>" />
</a>
</div>
<?php
}
}
else
{
echo "Pas d'image à afficher";
}
?>
</div>
</body>
</html>
et voici le screen du resultat :
le lien hd : http://img11.hostingpics.net/pics/303639SCREEN.jpg
Merci beaucoup :)
Donc, il liste bien les images et apparemment, il ne remplit pas le tableau (vu qu'il affiche le message du tableau vide).
C'est ce bloc qui déconne :
if (file_exists($dos.$file) && in_array($ext,$allow_ext)){
//On remplit le tableau associatif avec l'heure de modif et le nom du fichier sans extension afin de prendre en compte les images uploadées simultanéement.
$tab[filemtime($dos.$file)."-".substr($file,0,-4)] = $file;
As tu essayé de mettre un echo dans ce if là ?
Pour une raison que j'ignore, le tableau ne se remplit pas.
Peux tu retirer le . dans le nom de fichier : 5a.FuckYouPablo.jpg ?
j'ai carement supprimer cette image, afin d'etre sur mais cela ne change rien
note qu'avant de mettre tes morceau de code le tableau se remplisser parfaitement, il fallait juste voir comment en inverser l'ordre d'ecriture .
Y a pas simplement une fonction ou je ne sais pas qui permettrai de simplement inverser le tableau par exemple ?
comme dit c'etait bien le seul soucis, tout fonctionnait, juste que j'aurai aimé inverser l'ordre des images, en plus il semblait deja prendre en compte la date d'upload vu qu'il mettait forcement la derniere up a la fin du tableau, d'ou mon envie de juste l'inverser.
Y a pas simplement une fonction ou je ne sais pas qui permettrai de simplement inverser le tableau par exemple ?
Non, justement, il n'y a pas de fonction qui permette cela...
Par contre, si tu ne veux pas te prendre la tête (humour), il te faut configurer ton OS pour qu'il affiche les fichiers récents en premier (par défaut c'est pas ordre alpha).
Allez, sans rigoler :)
Sur cette ligne (37):
$dos = "adminworks/imgworks/thumb";
mettre :
$dos = "adminworks/imgworks/thumb/";
What's all (pourquoi chercher loin sérieux ! ) ;)
heu ça ne change rien :D
ça a rajouté "index.php" dans ce que renvoie l'echo, c'est tout ...
Euh...j'ai fais ce test chez moi, et j'avais le même soucis...
Dans ton répertoire "adminworks/imgworks/thumb/" tu as les miniatures ou uniquement un fichier index.php ???
car
$dos = "adminworks/imgworks/thumb/";
pointe vers le répertoire des miniatures, pas les images full size...
@ vérifier donc que le répertoire n'est pas vide et que les fichiers présents sont bien dans le format autorisé :) ;)
oui oui c'est bien le repertoire des miniatures, aucun soucis a ce niveau, puisqu'avec le code de base que j'avais ça fonctionnait tres bien :)
C'est quand meme dingue qu'il n y ai rien pour controler la creation du tableau (et donc l'ordre des images)
Bizarrement en local ça fonctionne bien (du moins chez moi... pas de soucis là dessus).
Le truc c'est que pour remplir le tableau, on teste l’existence du fichier via
file_exists($dos.$file)
donc, si le tableau ne se remplit pas, c'est que le script ne trouve pas l'image, donc celle ci n'existe pas ou le chemin d'accès est faux.
Je ne vois pas d'autres explications :)
yeaaaaaaaaaaaaaaaaaaahhh !!!!! :D ça marche !!!! :D
Merci a toi !
j'avoue que je pige pas trop, j'ai simplement virer le echo et boum ça marche :D
niquel de niquel de niquel
un enooooooooooooooooooooooooooorme MERCI a toi, qui est venu a mon aide, vraiment :)
par contre j'ai un autre soucis :D
actuellement le dossier dans lequel sont up les images se trouve dans le dossier "admin" ou il y a le formulaire d'up (qui est protégé par un htaccess.
ce qui fais qu'il est impossible de voir les images et les mignatures pour un visiteur.
Du coup j'ai voulu changer de place le repertoire ou j'up les images, afin de les sortir du repertoire protégé par mot de pass
Sauf que curieusement, si je lui dis d'up ailleur cela ne marche plus, j'ai tout un tas de warning quand jessaie d'up une image (pourtant il ne me semble pas avoir oublié de corrigé de chemin ...)
pour etre precis voici tous les warning que je reçois a l'up
Warning: move_uploaded_file() [function.move-uploaded-file]: URL file-access is disabled in the server configuration in /homepages/40/d196229223/htdocs/V6/adminworks/index.php on line 14
Warning: move_uploaded_file(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.move-uploaded-file]: failed to open stream: no suitable wrapper could be found in /homepages/40/d196229223/htdocs/V6/adminworks/index.php on line 14
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpPWMbGu' to 'http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg' in /homepages/40/d196229223/htdocs/V6/adminworks/index.php on line 14
Warning: getimagesize() [function.getimagesize]: URL file-access is disabled in the server configuration in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 9
Warning: getimagesize(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.getimagesize]: failed to open stream: no suitable wrapper could be found in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 9
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: URL file-access is disabled in the server configuration in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 11
Warning: imagecreatefromjpeg(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.imagecreatefromjpeg]: failed to open stream: no suitable wrapper could be found in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 11
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 25
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'http://www.sylvainklein.com/V6/imgworks/thumb/SnowFix\_R02.jpg' for writing: No such file or directory in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 27
Re :)
Apparemment, c'est un soucis de config php.ini :
ou
grace a ton deuxieme lien j'ai compris et corrigé le truc dans mon php.ini que j'ai mis dans tous les dossiers utilisant du php (comme il le dit, sachant que jutilise egalement 1and1 comme le mec le dit)
mais a l'upload voila ce que j'ai comme erreur :
Warning: move_uploaded_file(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.move-uploaded-file]: failed to open stream: HTTP wrapper does not support writeable connections in /homepages/40/d196229223/htdocs/V6/adminworks/index.php on line 14
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpa89ZZ3' to 'http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg' in /homepages/40/d196229223/htdocs/V6/adminworks/index.php on line 14
Warning: getimagesize(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.getimagesize]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 9
Warning: imagecreatefromjpeg(http://www.sylvainklein.com/V6/imgworks/SnowFix\_R02.jpg) [function.imagecreatefromjpeg]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 11
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 25
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'http://www.sylvainklein.com/V6/imgworks/thumb/SnowFix\_R02.jpg' for writing: No such file or directory in /homepages/40/d196229223/htdocs/V6/adminworks/imgClass.php on line 27
DSL si mes soucis sont sans fin, mais c'est bien le seul et dernier soucis que j'ai, reussir a up les images dans un autre repertoire que celui proteger par mot de pass ^^
M E R C I a toi encore une fois, tu m'as sauvé :)
tout fonctionne impeccable maintenant (c'etait bien la forme des urls qui etait pas la bonne)
Merci vraiment !
A bientot peu etre :)
je cloture le sujet :)