IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Classement Alphanumerique sur PHP


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut Classement Alphanumerique sur PHP
    Salut à tous,
    Je ne suis pas un spécialiste PHP, mais je me débrouille comme je peux.
    J'utilise depuis quelques temps un script PHP qui me permet de créer automatiquement une galerie d'images sur une page.

    exemple:
    https://www.blue-shaker.com/gc/Vogue/

    Voici le bout de code que je met dans la partie <body>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php 
      // Image extensions
      $image_extensions = array("jpeg","JPEG","jpg","JPG","png","PNG","gif","GIF");
     
      // Target directory
      $dir = 'images/';
      if (is_dir($dir)){
     
       if ($dh = opendir($dir)){
        $count = 1;
     
        // Read files
        while (($file = readdir($dh)) !== false){
     
         if($file != '' && $file != '.' && $file != '..'){
     
          // Thumbnail image path
          $thumbnail_path = "images/".$file;
     
          // Image path
          $image_path = "images/".$file;
     
          $thumbnail_ext = pathinfo($thumbnail_path, PATHINFO_EXTENSION);
          $image_ext = pathinfo($image_path, PATHINFO_EXTENSION);
     
          // Check its not folder and it is image file
          if(!is_dir($image_path) && 
             in_array($thumbnail_ext,$image_extensions) && 
             in_array($image_ext,$image_extensions)){
       ?>
     
           <!-- Image -->
           <a href="<?php echo $image_path; ?>">
            <img src="<?php echo $thumbnail_path; ?>" alt="" title=""/>
           </a>
           <!-- --- -->
           <?php
     
           // Break
           if( $count%100 == 0){
           ?>
             <div class="pgd-clear"></div>
           <?php 
           }
           $count++;
          }
         }
     
        }
        closedir($dh);
       }
      }
     ?>
    avec deux fichiers CSS externe pour faire joli
    - simplelightbox.min.css
    - Photo-Gallery-Directory.css

    Le script fonctionne correctement, toutefois, il ne me classe pas les images par ordre alphanumérique
    mais le classement semble aléatoire.

    Quelqu'un pourrait-il m'apporter une aide pour modifier le code php ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Les répertoires ne classent pas les fichiers par ordre alphanumérique. Il faut un traitement spécifique pour les classer. Avec php il faut insérér les path dans un tableau, trier ce tableau, et c'est ce tableau que tu listes.

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    $tab_fich[] = [];
     
    while (($file = readdir($dh)) !== false)
    {
     
        //... on défini $image_path et $thumbnail_path et on les insère dans un tableau
     
       $tab_fich[$image_path] = $thumbnail_path;
     
    }
     
    // Tri du tableau avec ordre naturel insensible à la casse
    natcasesort($tab_fich);
    ?>
     
     
    <?php foreach ($tab_fich as $impath => $thumbpath) echo '<a href="'.$impath.'"><img src="'.$thumbpath.'" alt="" title=""></a>';?>

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut
    Merci ABCIWEB

    Mais je ne suis pas assez doué pour l’intégrer dans ma page.
    J'ai essayer de copié collé ton code sans succès.
    pourrait-tu me mettre sur la bonne piste ?

  4. #4
    Membre très actif
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 251
    Par défaut
    Si ce type de photothèque qui lit les images de tout répertoires et zoom, je te donnes les sources !
    http://www.fox-infographie.com/wphoto.php

    J'avais oublié il est dans mes articles de Developpez ...https://christele.developpez.com/tut...r-phototheque/

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Salut,

    Je n'ai pas utilisé ton code car j'ai vu ça:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          // Thumbnail image path
          $thumbnail_path = "images/".$file;
     
          // Image path
          $image_path = "images/".$file;
    Ce qui veut dire que $thumbnail_path = $image_path. N'y aurait-il pas un problème ?

  6. #6
    Membre très actif
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 251
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Salut,
    Ce qui veut dire que $thumbnail_path = $image_path. N'y aurait-il pas un problème ?
    ce module passe partout, il est actif sur une vingtaine de sites ! tu as du juger un peut vite non ? regardes http://www.fox-infographie.com/wphoto.php et d'autres si tu veux !

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par JPongivart Voir le message
    ce module passe partout, il est actif sur une vingtaine de sites ! tu as du juger un peut vite non ? regardes http://www.fox-infographie.com/wphoto.php et d'autres si tu veux !
    Je ne te parles pas du module, je te parles du code qui a été donné plus haut. En l'occurrence les deux variables $thumbnail_path et $image_path sont identiques puisqu'elles sont définies avec les mêmes valeurs. Donc à moins que ces adresses soient redéfinies dynamiquement par javascript dès l'affichage du code dans la page, les deux images sont identiques. Et si l'hypothèse d'un renommage javascript est vraie, alors pourquoi définir deux variables en php puisqu'une seule suffirait.

    C'est pour cette raison que je demandais confirmation avant de donner le code final à partir du code initial. Je ne dis pas que ce module ne fonctionne pas, je dis que le code que j'ai vu, a soit une erreur, ou soit est inutilement compliqué.

  8. #8
    Membre très actif
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 251
    Par défaut
    OK excuses la confusion

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut
    Merci JPongivart pour ton script, mais sans vouloir te vexer, j'ai une préférence pour le mien en terme d’élégance et de fonctionnalité, il permet par exemple de passer les photos avec le doigt sur un smartphone.
    ABCIWEB, j'ai bien compris le problème, les deux valeurs sont identiques, mais je n'ai pas écrit ce script.
    Cela ne m'aide pas trop tout cela...
    Moi je pensais peut-etre naivement, qu'il fallait rajouter une ligne de code pour le classement.
    Je ne comprend pas sur quoi il ce base pour classer les images.
    Bref...

    la clef c'est "natcasesort" (merci ABCIWEB), mais il faut que j'arrive a le placer au bon endroit

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par kazzz57 Voir le message
    Je ne comprend pas sur quoi il ce base pour classer les images.
    Bref...

    la clef c'est "natcasesort" (merci ABCIWEB), mais il faut que j'arrive a le placer au bon endroit
    Il se base sur l'ordre dans lequel les fichiers sont enregistrés dans ton répertoire si tu te contente de lister le répertoire. Mais encore une fois ce n'est pas pas ordre alphabétique. Si tu les vois classés par ordre alphabétique dans ton explorateur de fichier c'est parce l'explorateur utilise une fonction pour les classer. Il faut donc faire l'équivalent avec php si tu veux les classer par ordre alphabétique. Ou sinon il faut passer par une bdd qui enregistre le path du fichier et l'ordre d'affichage si tu veux choisir un classement défini par toi même.

    Pour faire ton code il faut connaître la méthode que tu utilises pour stocker tes vignettes et les images agrandies. Soit on les met dans le même répertoire avec des noms différents par exemple PHOTO/maphoto.jpg pour la grande et PHOTO/maphoto-min.jpg pour la vignette, soit on les met dans des répertoires différents avec des noms identiques par exemple PHOTO/maphoto.jpg et PHOTO-MIN/maphoto.jpg. Ce sont les deux méthodes principales. Quelle méthode utilises-tu ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    ... (H.S)
    Dernière modification par Invité ; 19/03/2020 à 16h54.

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut
    voici l'ordre normal que je souhaite :

    Vogue_(1).jpg
    Vogue_(1)_en_situation.jpg
    Vogue_(2).jpg
    Vogue_(2)_en_situation.jpg
    Vogue_(3).jpg
    Vogue_(3)_en_situation.jpg
    Vogue_(4).jpg
    Vogue_(4)_en_situation.jpg
    Vogue_(5).jpg
    Vogue_(5)_en_situation.jpg

    et voici dans quel ordre les images apparaissent

    Vogue_(4).jpg
    Vogue_(1)_en_situation.jpg
    Vogue_(1).jpg
    Vogue_(5).jpg
    Vogue_(2)_en_situation.jpg
    Vogue_(3).jpg
    Vogue_(4)_en_situation.jpg
    Vogue_(3)_en_situation.jpg
    Vogue_(2).jpg
    Vogue_(5)_en_situation.jpg

    Merci jreaux62 pour ton code, mais je n'ai pas réussi à m'en servir

    Voici mon code page en entier
    si une âme sensible à mes appels ce propose d'implanter son code..je dit pas non..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
     
     
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
     
    <title>Photo Gallery Directory</title>
     
     
    <!-- Photo-Gallery-Directory -->
    <link href='//www.blue-shaker.com/scripts/Photo-Gallery-Directory/simplelightbox.min.css' rel='stylesheet' type='text/css'>
    <link href='//www.blue-shaker.com/scripts/Photo-Gallery-Directory/Photo-Gallery-Directory.css' rel='stylesheet' type='text/css'>
     
    <link rel="stylesheet" type="text/css" href="//www.blue-shaker.com/gallery/css/fonts1.css" />
    <link rel="stylesheet" type="text/css" href="//www.blue-shaker.com/gallery/css/style-boutons1.css" />
     
    <style type="text/css">
     
    html {
      height: 100%;
     
    }
     
    body {
    	margin-left: 0px;
    	margin-top: 0px;
    	margin-right: 0px;
    	margin-bottom: 0px;
    	height: 100%;
    	background-color: #E0E0E0;
    	}
     
     
    .X1conteneur { 
    	margin:5% 0%; /* espacement horizontal entre les blocs */
    	width:100%;
    	display:inline-block;
    	vertical-align:middle;
    	text-align:center; /* on rétablit l'alignement du texte */ 
    	  font-family: 'Montserrat', sans-serif;
      font-size: 30px;
      font-weight: 300;
    }
     
    </style>
     
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    <script type="text/javascript" src="//www.blue-shaker.com/scripts/Photo-Gallery-Directory/simple-lightbox.js"></script>
    <script type="text/javascript" src="//www.blue-shaker.com/scripts/Photo-Gallery-Directory/Photo-Gallery-Directory.js"></script>
     
     
    </head>
     
    <body>
     
     
    <div class="X1conteneur">
      <p>&nbsp;</p>
      <p><a >Galerie Vogue</a><br>
        <a class="h9" >Vogue Gallery</a><br>
        <a class="b2" href="<?php echo $_SERVER['HTTP_REFERER']; ?>">‹ Retour</a></p>
    </div>
     
     
    <div class='pgd-container'>
     <div class="pgd-gallery">
     
      <?php 
      // Image extensions
      $image_extensions = array("jpeg","JPEG","jpg","JPG","png","PNG","gif","GIF");
     
      // Target directory
      $dir = 'images/';
      if (is_dir($dir)){
     
       if ($dh = opendir($dir)){
        $count = 1;
     
        // Read files
        while (($file = readdir($dh)) !== false){
     
         if($file != '' && $file != '.' && $file != '..'){
     
          // Thumbnail image path
          $thumbnail_path = "//www.blue-shaker.com/gc/Vogue/images/".$file;
     
          // Image path
          $image_path = "//www.blue-shaker.com/gc/Vogue/images/".$file;
     
          $thumbnail_ext = pathinfo($thumbnail_path, PATHINFO_EXTENSION);
          $image_ext = pathinfo($image_path, PATHINFO_EXTENSION);
     
          // Check its not folder and it is image file
          if(!is_dir($image_path) && 
             in_array($thumbnail_ext,$image_extensions) && 
             in_array($image_ext,$image_extensions)){
       ?>
     
           <!-- Image -->
           <a href="<?php echo $image_path; ?>">
            <img src="<?php echo $thumbnail_path; ?>" alt="" title=""/>
           </a>
           <!-- --- -->
           <?php
     
           // Break
           if( $count%100 == 0){
           ?>
             <div class="pgd-clear"></div>
           <?php 
           }
           $count++;
          }
         }
     
        }
        closedir($dh);
       }
      }
     ?>
     </div>
    </div>
     
    <div class="X1conteneur">
    <a href="<?php echo $_SERVER['HTTP_REFERER']; ?>">‹ Retour</a>
     
    </div>
     
     
    <button onclick="topFunction()" id="myBtn" title="Go to top">↑</button>
     
     
    <script>
    // When the user scrolls down 20px from the top of the document, show the button
    window.onscroll = function() {scrollFunction()};
     
    function scrollFunction() {
        if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
            document.getElementById("myBtn").style.display = "block";
        } else {
            document.getElementById("myBtn").style.display = "none";
        }
    }
     
    // When the user clicks on the button, scroll to the top of the document
    function topFunction() {
        document.body.scrollTop = 0;
        document.documentElement.scrollTop = 0;
    }
    </script>
     
     
     
    </body>
    </html>

  13. #13
    Invité
    Invité(e)
    Par défaut
    LOL...
    C'est normal... j'avais complètement oublié le but de la manœuvre ! (et j'avais fait une erreur de code)

    Le principe :
    1- on crée d'abord un array avec comme clés le nom des images (en minuscules -> important pour le TRI)
    2- on trie cet array en fonction des clés -> ksort()
    3- on affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <div class='pgd-container'>
     <div class="pgd-gallery">
    <?php 
    // -------------------
    // Image extensions
    $image_extensions = array("jpeg","jpg","png","gif"); // en minuscules
    // Target directory
    $dir = 'images/';
     
    $arr_images = array(); // array
    // -------------------
    // 1- On parcourt le dossier 
    // + on crée un array $arr_images
    if (is_dir($dir))
    {
    	if ($dh = opendir($dir))
    	{
    		// Read files
    		while (($file = readdir($dh)) !== false)
    		{
    			if($file != '' && $file != '.' && $file != '..')
    			{
    				// Thumbnail image path
    				$thumbnail_path = "images/".$file;
     
    				// Image path
    				$image_path = "images/".$file;
     
    				$thumbnail_ext = strtolower( pathinfo($thumbnail_path, PATHINFO_EXTENSION) ); // en minuscules
    				$image_ext = strtolower( pathinfo($image_path, PATHINFO_EXTENSION) ); // en minuscules
     
    				// Check its not folder and it is image file
    				if(!is_dir($image_path) && 
    				in_array($thumbnail_ext,$image_extensions) && 
    				in_array($image_ext,$image_extensions))
    				{
    					$index = strtolower($file); // en minuscules (important pour le TRI)
    					$arr_images[$index]['image'] = $image_path;
    					$arr_images[$index]['thumbnail'] = $thumbnail_path;
    				}
    			}
    		}
    		closedir($dh);
    	}
    }
    // -------------------
    if( !empty($arr_images))
    {
    	// 2- Tri
    	ksort( $arr_images ); // Trie un tableau suivant les clés (ici, le nom des images)
     
    	// 3- Affichage
    	$count = 1;
    	foreach( $arr_images as $html_image )
    	{
    		echo '<a href="'.$html_image['image'].'"><img src="'.$html_image['thumbnail'].'" alt="" title=""/></a>';
    		// Break
    		if( $count%100 == 0)
    		{
    			echo '<div class="pgd-clear"></div>'."\n";
    		}
    		$count++;
    	}
    }
    // -------------------
    ?>
     </div>
    </div>
    Dernière modification par Invité ; 19/03/2020 à 17h05.

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2018
    Messages : 8
    Par défaut
    Bingo mon ami !!

    Merci ça fonctionne nickel !!!

    hip hip hip pour jreaux62

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EasyPHP] Informations diverses sur PHP
    Par paradoxham dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/03/2006, 11h59
  2. Envoi d'une variable en shell script sur php
    Par Ponchi dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2006, 13h54
  3. Classement membre sur 1 an
    Par kileak dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 24/10/2005, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo