Aller au contenu

Problème de template


Guest stone

Sujets conseillés

Guest stone

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 :huh:

Comment faire pour contourner ce problème ???

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Guest stone

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

Lien vers le commentaire
Partager sur d’autres sites

Guest stone

Salut Country, j'utilise PHPLib alors y a-t-il une solution à mon problème ??

Modifié par stone
Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

Guest stone

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Guest stone

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...