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

Eléphant du PHP | 183 Messages

30 oct. 2007, 01:33

Bonjour,

Je suis face a un problème pour ma galerie qui marche a peu prêt (création des miniature, affichage, pagination ...) je voudrais mettre une liste déroulante en fonction des dossiers et sous dossiers et que lorsque je choisi une dossier dans une liste déroulante sa me change mon url en mettant des variable comme ceci : /?dir=galerie&r=dossier&c=sous_dossier

Mais aussi car j'ai essayé des bidoullage qui ne marché pas ... mais si on met :
/?dir=galerie&r=../&c=sous_dossier il ne faudrais pas que la liste déroulante remonte d'un niveau.

pouvez vous m'aider ?

merci
_________
Fabien

Eléphant du PHP | 445 Messages

30 oct. 2007, 01:56

Tu utilises une variable de session pour contenir le repertoire courant des images (ex: ./galerie/ ).

En fonction de la liste deroulante (ou les value ne devront contenir uniquement les nom des sous-reperoire du repertoire courant sans l'arboresence) tu ajoutes le sous-repertoire au repertoire courant (ou tu le reduit si il veux revenir au repertoire parent)

A chaque nouveau repertoire, tu affiches dans la liste déroulante, tout les sous-repertoire du repertoire courant.

Au niveau de la sécurité, tu testes les value de la liste déroulante afin qu'elle ne contiennent que [A-Z]+[a-z]+[0-9] ainsi que quelques caractères speciaux (espace underscore).

Eléphant du PHP | 183 Messages

30 oct. 2007, 09:58

Bonjour,

Tu as compris ceux que je voulais mais le problème c'est que je ne sais pas le faire :?

Pour la sécu je n'avais pas pensé au [A-Z].... ! :)
_________
Fabien

Eléphant du PHP | 445 Messages

30 oct. 2007, 10:31

Je detaille un peu plus mais il faudrais au moins que tu essayes de coder et demander de l'aide quand tu as une erreur ou que tu bloques.

* Tu met ta liste deroulante dans un <form ....> avec un evenement du genre onChange="javascript:this.submit();"

* Pour les le contenu d'un repertoire tu peux utiliser opendir() readdir() et is_dir()
Tu feras attention au .(repertoire courant) et ..(repertoire parent)

Tuto sur les Sessions
Tuto sur $_GET et $_POST

Eléphant du PHP | 183 Messages

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>';
_________
Fabien

Eléphant du PHP | 445 Messages

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)

Eléphant du PHP | 183 Messages

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.
_________
Fabien

Eléphant du PHP | 445 Messages

30 oct. 2007, 11:43

Alors tu es bien parti.

Quel est le soucis dans ton code ?

Eléphant du PHP | 183 Messages

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
_________
Fabien

Eléphant du PHP | 445 Messages

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()

Eléphant du PHP | 183 Messages

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>
_________
Fabien

Eléphant du PHP | 445 Messages

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))

Eléphant du PHP | 183 Messages

31 oct. 2007, 19:44

Bonsoir,

J'ai pas compris ... :?
_________
Fabien

Eléphant du PHP | 183 Messages

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); } }
_________
Fabien

Eléphant du PHP | 183 Messages

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
_________
Fabien