Création d'une liste déroulante pour la galerie

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création d'une liste déroulante pour la galerie

par fabien_14 » 01 nov. 2007, 16:51

Yes ca marche Merci h0_noMan !!

Sinon une dernière chose

est'il possible pour la navigation d'améliorer l'affichage de la liste déroulante.

C'est a dire quand je suis dans le dossier :

galerie/dossier (sans dossier)
Si il n'y a pas de sous dossier alors ne pas afficher la liste déroulante

galerie/dossier (avec sous dossiers)
Si ya des sous dossiers afficher la liste déroulantes avec les sous dossier dedans et pas les fichiers éventuels qui sont a la racine du dossier.

Sinon a par cela sa a l'air de fonctionner :) je ne sais pas si tu voit des amélioration ?

par h0_noMan » 01 nov. 2007, 16:24

J'ai corrigé mon code.

Il faut le chemin complet dans is_dir().

par fabien_14 » 01 nov. 2007, 16:20

Salut,

Merci de ta réponse,

J'ai mi ce code mais je n'est plus rien dans ma liste dérouante,

je recapitule le code :

Code : Tout sélectionner

function galerie ($a) { $r = (isset($_GET['r']))?$_GET['r']:""; $c = (isset($_GET['c']))?$_GET['c']:""; $car_forbid = array('.','/'); $r = str_replace($car_forbid, "", $r); $c = str_replace($car_forbid, "", $c); $url = "/homepages/21/xxxxxxx/htdocs/lesite/galerie/".$r."/" ; $rep=opendir($url); $d=$c; $a=$url .'/' . $c; $dimg=opendir($a); while(false !== ($fichier = readdir($rep))) { if ($fichier != "." && $fichier != ".." && is_dir($fichier)) { $dname[] = $fichier; sort($dname); reset ($dname); } }

et la liste déroulante :

Code : Tout sélectionner

<select onChange="location = this.options[this.selectedIndex].value;"> <option>----------</option> <? $u=0; foreach($dname as $key=>$val) { if($dname[$u]){ print " \t\t\t<option value=\"?o=galerietest&r=" . $r . "&c=" . $dname[$u] . "\">" . $dname[$u] . "</option>\n"; $u++; } } ?> </select>

par h0_noMan » 01 nov. 2007, 16:08

Tu testes si le fichier est bien un repertoire.
while(false !== ($fichier = readdir($rep)))
{
   if ($fichier != "." && $fichier != ".." && is_dir($url.$fichier)) 
   {
   $dname[] = $fichier;
   sort($dname);
   reset ($dname);
   }         
}

par fabien_14 » 01 nov. 2007, 12:51

Salut !

est t'il possible de dire de ne pas charger la liste deroulante avec des fichier ? mais seulement avec des dossiers.

Merci

par fabien_14 » 01 nov. 2007, 00:45

Re bonjour,

Alors en effet quand je met r=../ sa ne monde pas plus de niveau

Cependant dans je suis dans le niveau 2 dans ma liste deroulante sa me liste les images et autre fichier alors que je voudrai que ca ne liste que les dossiers (a la limite que la liste deroulante ne saffiche plus quand ya plus de dossier serai le mieux)

Voici le code :

Code : Tout sélectionner

$repertoire = (isset($_GET['r']))?$_GET['r']:""; $sous_rep = (isset($_GET['c']))?$_GET['c']:""; $car_forbid = array('.','/'); $repertoire = str_replace($car_forbid, "", $repertoire); $sous_rep = str_replace($car_forbid, "", $sous_rep); $url = "./galerie/".$repertoire."/" ; $url .= ($sous_rep != "")?$sous_rep.'/':""; $rep=opendir($url); $d=$_GET['c']; $a=$url .'/' . $_GET['c']; $dimg=opendir($a); while(false !== ($fichier = readdir($rep))) { if ($fichier != "." && $fichier != "..") { $dname[] = $fichier; sort($dname); reset ($dname); } }

par fabien_14 » 31 oct. 2007, 19:44

Bonsoir,

J'ai pas compris ... :?

par h0_noMan » 30 oct. 2007, 13:38

Dans ton php.

Mets $_GET['r'] et $_GET['c'] dans des variables.
$repertoire = (isset($_GET['r']))?$_GET['r']:"";
$sous_rep = (isset($_GET['c']))?$_GET['c']:"";
$car_forbid = array('.','/');
$repertoire = str_replace($car_forbid, "", $repertoire);
$sous_rep = str_replace($car_forbid, "", $sous_rep);
$url = "./galerie/".$repertoire."/" ;
$url .= ($sous_rep != "")?$sous_rep.'/':"";
Ensuite tu test si le repertoire existe bien avant de l'ouvrir (opendir() ).
if(is_dir($url))

par fabien_14 » 30 oct. 2007, 13:17

J'ai trouvé un autre script car le 1er été moins bien

alors celui la me donne de bonne URL !

Cependant il y a des erreurs

quand je mets r=../ il me remonte un niveau et donc dans le liste deroulante je vois tout mes fichier a la racinne du site (meme les .htacess et config.php...)

Dans la liste déroulante il me liste les fichier également hors ne ne voudrais que les dossiers.

Code : Tout sélectionner

function galerie ($a) { $url= "galerie/".$_GET['r']; $rep=opendir($url); $d=$_GET['c']; $a=$url .'/' . $_GET['c']; $dimg=opendir($a); while(false !== ($fichier = readdir($rep))) { if ($fichier != "." && $fichier != "..") { $dname[] = $fichier; sort($dname); reset ($dname); } }


et la liste déroulante :

Code : Tout sélectionner

<select onChange="location = this.options[this.selectedIndex].value;"> <option>choix</option> <? $u=0; foreach($dname as $key=>$val) { if($dname[$u]){ print " \t\t\t<option value=\"?o=galerie&r=" . $_GET[r] . "&c=" . $dname[$u] . "\">" . $dname[$u] . "</option>\n"; $u++; } } ?> </select>

par h0_noMan » 30 oct. 2007, 13:01

Il te suffit de choisir soit une liste de caractères à autoriser soit une liste de caractères à exclure (. /)

Tu peux par exemple remplacer tout les . et le / par une chaine vide (str_replace() )
Par contre, si tu veux n'autoriser que les caractères de ton choix regarde du coté des epxressions régulières.

Et après tu cree ton chemin : $galerie+"/"+$r+"/"+$c
Ensuite tu verifie que ce repertoire existe bien avec is_dir()

par fabien_14 » 30 oct. 2007, 12:49

Re salut,

Peux tu m'expliquer comment on teste les value ? pour ne pas remonter d'un niveau ? car si on met r=../ on remonte d'un niveau actuellement

merci

par h0_noMan » 30 oct. 2007, 11:43

Alors tu es bien parti.

Quel est le soucis dans ton code ?

par fabien_14 » 30 oct. 2007, 11:30

Salut,

J'ai une abroresence maximum comme cela

Galerie (ou il y a tout les dossiers)
> repertoire 1
> sousrepertoire
> sousrepertoire
> sousrepertoire
>repertoire2
> sousrepertoire
etc ....

Je n'aurai pas plus de sous dossier en arboresences. donc j'ai pour reprendre ton exemple
/Galerie/vacances2006/annecy -> sous repertoire de niveau 2

Le problème c'est que je voudrais garder les 2 variable "r" et "c" car mon petit code permettant de lire les images et de crée les miniature est fait en fonction de cela.

par h0_noMan » 30 oct. 2007, 11:24

Tu as combien de niveau de sous-repertoire au maximum ?

Code : Tout sélectionner

ex : /Galerie -> repertoire de base de la galerie /Galerie/vacances2006 -> sous repertoire de niveau 1 /Galerie/vacances2006/annecy -> sous repertoire de niveau 2
Si tu veux acceder encore plus loin dans les sous-repertoire, il faut soit inclure l'arborescence dans les variables, soit utilisé les sessions avec le repertoire courant.

Si tu n'as que 2 sous-repertoire max alors :

Tu voudrais avoir par exemple : ?dir=galerie&r=vacances2006&c=annecy

Si c'est cela, tu recuperes ces 2 variables et avec tu n'en fais qu'un seul repertoire.
Et tu verifies bien sur que les noms de repertoire ne comporte pas de .(point) ou de /(slash)

par fabien_14 » 30 oct. 2007, 11:09

J'ai trouvé un ti code qui permeté de generer une liste déroulante :

j'ai mis un onchange, mais il ne gere pas les dossier et sous dossiers :s car moi je voudrais avoir via GET le dossier dans la variable r et le sous dossier dans la variable c

J'ai pas trops compris les SESSIONS avec le dossier parent etc ...
function recurse_dir($DIR) 

{ 
   if ($ODIR = opendir($DIR)) 
    { 
        while ($FILE = readdir($ODIR)) 
        { 
            if ( ($FILE != ".") && ($FILE != "..") )
            {
                $TMP = $DIR."/".$FILE ;
            	if($FILE != '')
            	{
	                if(is_dir($TMP)) 
	                {
	                    $DIR1 .= '<option value="?o=galerietestr=&'.$TMP.'">'.$TMP.'</option>';
	                    $DIR1 .= recurse_dir ($TMP) ; 
	                }
	        }
            } 
        }
       closedir($ODIR);
       return $DIR1;
    } 
}

//--> Afficher la listre déroulante

echo '<select onChange="location = this.options[this.selectedIndex].value;" >';
echo recurse_dir('galerie');
echo '</select>';