function listAlbum()

Eléphanteau du PHP | 13 Messages

06 oct. 2005, 20:08

je voudrai afficher la liste de mes albums mais en les triants selon un ordre définis, donc pas alphabetique ou aléatoire
j'ai essayé d'inclure une fonction array() mais je capte pas trop
ou placer, et le concept des variables
peut-on m'aider s.v.p ?
function listeAlbums() {
  
  $res='';
	
  if ($rep = opendir(REPERTOIRE_ALBUMS)) {
	 while ($element = readdir($rep)) {
	  
	    if (is_dir(REPERTOIRE_ALBUMS."/".$element)
		    && $element != '.' && $element != '..')
		  $res .= AlbumHTML($element);  
	  }
	  closedir($rep);
	  
    } else {
	
	  $res = 'Repertoire des albums non accessible !';
	}
	
	return $res;
  }

Mammouth du PHP | 19672 Messages

06 oct. 2005, 20:39

Déjà, mets un peu d'ordre dans le code pour pouvoir le suivre:
<?php
function listeAlbums()
{
    $res="";
    if ($rep = opendir(REPERTOIRE_ALBUMS))
    {
        while ($element = readdir($rep))
        {
            if (is_dir(REPERTOIRE_ALBUMS."/".$element) && $element != "." && $element != "..")
            {
                $res .= AlbumHTML($element);
            }
        }
        closedir($rep);
    }
    else
    {
        $res = 'Repertoire des albums non accessible !';
    }
    return $res;
}
?>
Ensuite, quand tu appelles la fonction, tu as quoi comme retour ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 13 Messages

06 oct. 2005, 20:58

afficher la liste des sous-dossier
se trouvant dans le dossier
"albums" il le fait mais affiche le
résultat dans l'ordre alphabétique
et je voudrais ordonner le résultat
j'avais posé une question similaire
mais je n'arrive pas a adapter
le résultat, voici la réponse
que j'avais reçu :
<?php
$pays = array();

$pays[] = "roumanie";
$pays[] = "albanie";
$pays[] = "zimbabwe";
$pays[] = "autriche";
?>

Mammouth du PHP | 19672 Messages

06 oct. 2005, 21:01

Ça me rapelle quelque chose en effet, mais au lieu de reposer la question, il aurait été avisé de relancer ton sujet :-k

Et ceci dit, ça ne me dit pas non plus dans quel ordre tu veux afficher tes dossiers ni sur quel critère on peut se baser pour définir l'ordre de classement souhaité.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

06 oct. 2005, 23:13

il n'ya pas de critere
la liste sera toujours fixe ,je voudrai
la définir selon un ordre precis
ex: -espagne
- argentine
-chili
- bresil
il n'y a pas de critere logique
je pense que la reponse qu'on
m'a envoyé est bonne, mais je
ne comprend pas par quoi
je dois remplacer $pays
ni ou je dois inserer ce code

Mammouth du PHP | 19672 Messages

07 oct. 2005, 08:55

Comprends bien une chose. On ne peut pas t'aider si on a pas tous les éléments nécessaires à la compréhension du problème à résoudre.

Tes pays doivent être classés dans un ordre précis : fort bien, il y a donc un critère de tri précis. Tu dois donc avoir une donnée permettant de déterminer lequel vient en premier, en second, en troisième etc... Quelle est cette donnée ? Si tu ne l'as pas, il faut la créer. Tu dois stocker quelque part une liste comportant donc le nom de chaque pays assorti d'un numéro de classement unique. Comment stockes-tu actuellement cette liste?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 13 Messages

07 oct. 2005, 09:22

actuellement je n'ai pas
créer cette liste est-ce que
ce fichier doit-etre du type
config.inc ? doit-elle etre simplement appellé
par la page qui liste les sous-dossiers ?
j'ai consulté la doc sur le site et iln'ya
aucune fonction de listage qui
s'applique a mon cas
(croissant,décroissant,numerique
je crois que je comprend mais pourrais-tu
etre plus precis?mon but a moi est simplement de faire un menu
qui sera tjrs fixe et qui pointent sur les sous-dossiers en vue d'afficher
des photos

Mammouth du PHP | 19672 Messages

07 oct. 2005, 10:13

Donc tu as besoin de créer une liste, sur un fichier texte par exemple, qui comporterait tous tes pays dans l'ordre de ton choix. Tu peux générer ce fichier avec les fonctions de manipulation de fichier en y insérant les informations dont tu as besoin, par exemple :
'nom du pays', './chemin/du/répertoire/';
'Nom d'un autre pays', './chemin/du/répertoire/';
etc...
À partir de ce fichier, tu génères ton menu de navigation. Tu devras ajouter chaque nouveau pays par la suite à ce fichier à la place où tu voudras le classer ou reclasser les pays si l'envie te prend de modifier l'ordre ou encore retirer un pays, le tout indépendament de tes répertoires.

Par exemple, si tu rajoutes un pays mais que les répertoires sont créés mais pas prêts, tu n'auras pas à te soucier d'un lien mort dans ton menu et tu ne rajouteras ton lien qu'en rajoutant ce pays dans le fichier. Comprends-tu le principe ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 13 Messages

07 oct. 2005, 12:05

non, j'ai été voir le lien mais cela reste obscure
pour plus de précision
voici le code de départ +
une fonction array que j'ai rajouté
<?php
include('config.inc.php');

function listeAlbums() {

$res='';

if ($rep = opendir(REPERTOIRE_ALBUMS)) {
while ($element = readdir($rep)) {

if (is_dir(REPERTOIRE_ALBUMS."/".$element)
&& $element != '.' && $element != '..')
$tri[$element] = AlbumHTML($element);
}
closedir($rep);

$tri = array(1 => "chairs", 2 => "sofa", 3 => "tables", 4 => "lightings", 5 => "storage", 6 => "objects", 7 => "arts");

foreach($tri as $codehtml) {
$res .= $codehtml;
}

} else {

$res = 'Non accessible';
}
return $res;
}

function AlbumHTML($album) {

$html_avant = ' <tr><td>';
$html_apres = '</td></tr>'."\n";

$res = $html_avant;
$res .= '<a href="album.php?album=';
$res .=urlencode($album).'">';
$res .=htmlentities($album).'</a>';

if ($f = @fopen(REPERTOIRE_ALBUMS.'/'.$album.'/description.txt','r')) {

$desc = htmlentities(fread($f,400));
fclose($f);

$res .= '</td><td>'.str_replace("\n" , "<br />",$desc);

} else {
$res .= '</td><td><i></i>';
}

$res .= $html_apres;

return $res;

}


?>
(est-ce que je suis dans le bon?)

Mammouth du PHP | 19672 Messages

07 oct. 2005, 12:34

Modération : Joha, édite ton message et encadre-moi ce code en utilisant le bouton [php], c'est pénible à lire sans ça, merci.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

07 oct. 2005, 12:43

Posté le: 07 Oct 2005, 11:05 Sujet du message: code

--------------------------------------------------------------------------------

non, j'ai été voir le lien mais cela reste obscure
pour plus de précision
voici le code de départ +
une fonction array que j'ai rajouté
<?php 
include('config.inc.php'); 

function listeAlbums() { 

$res=''; 

if ($rep = opendir(REPERTOIRE_ALBUMS)) { 
while ($element = readdir($rep)) { 

if (is_dir(REPERTOIRE_ALBUMS."/".$element) 
&& $element != '.' && $element != '..') 
$tri[$element] = AlbumHTML($element); 
} 
closedir($rep); 

$tri = array(1 => "chairs", 2 => "sofa", 3 => "tables", 4 => "lightings", 5 => "storage", 6 => "objects", 7 => "arts"); 

foreach($tri as $codehtml) { 
$res .= $codehtml; 
} 

} else { 

$res = 'Non accessible'; 
} 
return $res; 
} 

function AlbumHTML($album) { 

$html_avant = ' <tr><td>'; 
$html_apres = '</td></tr>'."\n"; 

$res = $html_avant; 
$res .= '<a href="album.php?album='; 
$res .=urlencode($album).'">'; 
$res .=htmlentities($album).'</a>'; 

if ($f = @fopen(REPERTOIRE_ALBUMS.'/'.$album.'/description.txt','r')) { 

$desc = htmlentities(fread($f,400)); 
fclose($f); 

$res .= '</td><td>'.str_replace("\n" , "<br />",$desc); 

} else { 
$res .= '</td><td><i></i>'; 
} 

$res .= $html_apres; 

return $res; 

} 


?> 
(est-ce que je suis dans le bon?)

Mammouth du PHP | 19672 Messages

07 oct. 2005, 12:56

Ton code ne sert à rien si tu ne saisis pas le pricipe de fonctionnement :-k
Dis moi ce que tu as compris et à quel endroit tu bloques.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 13 Messages

07 oct. 2005, 14:05

ok
d'apres ce que j'ai compris
la fonction
ListeAlbums
ouvre le répertoire et liste
les dossiers et affiche cette liste
dans l'ordre alphabétique
si l'on rajoute
sort($tri)
ce que je ne veux surtout pas
(c'est l'essentiel de mon probleme)
je voudrais lister ce répertoire
d'une maniere precise et je connais
le nom de chaque dossier et le nbre
et l'ordre de chaque dossier
ne changera jamais
pour la fonction
AlbumHTML
je suis moins sur je pense que c'est pour
afficher les descriptions des dossiers
mais rien n'est moins sur
en tout cas merci de prendre le temps

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

07 oct. 2005, 14:17

Il faut qu'en plus de lister ton tableau tu attribues un numéro d'ordre à chaque élément.
Tu auras donc un tableau du genre :
$tri
{
0 => Array
0 => "Chili"
1 => 2
1 => Array
0 => "Espagne"
1 => 6
2 => Array
0 => "Italie"
1 => 1
3 => Array
0 => "Lituanie"
1 => 3
}

Pour attribuer ce numéro, tu devras t'appuyer sur une liste pré-définie ("Chili" est le numéro 2) que tu stockeras comme tu veux: BDD, fichier texte, XML, variable PHP dans un fichier de config...Etc...

Et cette attribution devra se faire dans la boucle.
Tu pourras alors trier le tableau avec l'instruction array_multisort(), avant de créer le HTML.

Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 13 Messages

07 oct. 2005, 14:47

désolé mais ce n'est pas super clair
le
$tri {
            0 = array
            etc....
doit-il se trouver a la place du
sort($tri);
ou bien dans un fichier externe?
comment l'apeller dans la boucle?