Guest stone Posté 13 Mai 2005 Posté 13 Mai 2005 bijour, Je vous expose mon problème : je dois lister les dossiers et les fichiers contenus dans un répertoire, les cas qui peuvent se présenter sont : - Le répertoire ne contient aucun dossier ni fichier - Le répertoire contient au moins un/des dossiers - Le répertoire contient au moins un/des fichiers - le répertoire contient des fichiers et des dossiers Mon but étant d'utiliser tout simplement une seule, le problème est que si je met par exemple : <div id="principale"><!-- BEGIN DOSSIER --><table class="dossier">......</table><!-- BEGIN DOSSIER --><!-- BEGIN FICHIER --><table class="dossier">......</table><!-- BEGIN FICHIER --></div> Une table fichier va s'afficher même si il n'y a aucun fichier dans le dossier Comment faire pour contourner ce problème ???
enroc Posté 13 Mai 2005 Posté 13 Mai 2005 Bonjour et bien comme tu l'as dit il y a plusieurs cas, alors à mon avis il faut tester chaque cas, et écrire le HTML en conséquence. C'est un template seulement en HTML ou il peut y avoir du PHP,ASP,... dedans ? Et note qu'aucun répertoire n'est vide, chaque répertoire contient au moins 2 références vers des dossers: vers lui-même (.) et vers son parent (..)
Guest stone Posté 13 Mai 2005 Posté 13 Mai 2005 salut & merci pour votre réponse, les templates sont gérés par PHP Ma question est de savoir si un bloc contenu entre les marques : <!-- BEGIN DOSSIER --> et <!-- END DOSSIER --> peut ne pas être affiché parce que là si aucun dossier n'existe il va tout de même m'afficher un bloc
Guest stone Posté 13 Mai 2005 Posté 13 Mai 2005 (modifié) Salut Country, j'utilise PHPLib alors y a-t-il une solution à mon problème ?? Modifié 13 Mai 2005 par stone
Country Posté 13 Mai 2005 Posté 13 Mai 2005 En fait, si je ne me trompe pas tu voudrai que le bloc DOSSIER ne s'affiche pas si il n'est pas utilisé. Dans ce cas, ajoute : $str = preg_replace("/[ \t]*<!--\s+BEGIN [^ \t\r\n}]+\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END [^ \t\r\n}]+\s+-->\s*?\n?/sm",'', $str); dans la méthode finish() , en dessous de case 'remove' , cela supprimera le bloc dans le code. (j'utilise moi-même une modification de phplib alors je ne sait pas si ce sera exactement pareil)
Guest stone Posté 13 Mai 2005 Posté 13 Mai 2005 salut contry, Merci pour ton aide ta solution suppose que je vais modifier le fichier template.inc, n'y a-t-il pas moyen de le faire via mon code php sans toucher à template.inc
Country Posté 13 Mai 2005 Posté 13 Mai 2005 Je pense qu'il y a moyen de faire de cette façon : ob_start(); $template->p("parse"); $code=ob_get_contents(); ob_end_clean(); $code = preg_replace("/[ \t]*<!--\s+BEGIN [^ \t\r\n}]+\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END [^ \t\r\n}]+\s+-->\s*?\n?/sm",'', $code); echo $code; Enfin, je trouve cela moin propre que l'autre technique quand même
Guest stone Posté 13 Mai 2005 Posté 13 Mai 2005 houuuuuuu une expression régulière ça je peux comprendre, par contre il y a quelques fonctions que je ne connais pas, par exemple : ob_start(); ob_get_contents(); ob_end_clean(); est-il possible de m'expliquer à quoi ça sert sinon me rediriger vers un bon tutoriel merci
Country Posté 13 Mai 2005 Posté 13 Mai 2005 En fait $template->p("parse"); fait un echo du code de ta page. Grace à ob_start() on empêche l'envoi de donnée au navigateur et ces dernières sont mises dans un buffer. Avec ob_get_contents() on récupère le contenu du buffer (cad le code de la page) et on le met dans la variable $code (sur lequel on exécutera le regex). Enfin avec ob_end_clean() on vide le buffer et on peut de nouveau envoyer des informations au navigateur. Plus d'infos dans le manuel php : http://fr.php.net/ob_start
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant