IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Un CSS dynamique en PHP ne fonctionnant pas


Sujet :

CSS

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Points : 51
    Points
    51
    Par défaut Un CSS dynamique en PHP ne fonctionnant pas
    Bonjour à tous.

    J'ai effectué une recherche dans les forums mais pas trouvé d'aide/réponses sur mon problème.

    Mon application web comporte une liste d'éléments sur la gauche. Ces éléments sont récupérés dans une table de la base de données.
    Si je récupère des éléments j'affiche en haut de cette liste une petite div avec le nombre d'éléments.
    Si je ne récupère aucun élément (table de la base vide) je n'affiche pas cette petite barre.
    En conséquence l'affichage, ou non, de cette petite barre modifie la hauteur de la "marge" que je dois laisser entre le haut de ma page/fenêtre et le début de la div de la liste.

    J'ai donc passé mon CSS en php, j'ai changé l'extension, inclus le header php tout en haut du CSS pour lui indiqué le type, et évidement modifié l'extension lors de l'appel du CSS dans mon index.
    Dans mon CSS à l'endroit ou je fait le echo de la variable ca me dit que la variable est inconnue.

    Je me dit que cela vient peut être du fait que le CSS est chargé avant mon traitement qui défini la valeur de la variable.
    Du coup pour tester j'ai déclarée ma variable avant l'appel du CSS dans le header du HTML en lui donnant une valeur par défaut.
    Mais même la ca ne fonctionne pas :s (Ma variable est pourtant bien définie avec une valeur avant l'appel du CSS.

    Voici le code du CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    	header("Content-type: text/css; charset=UTF-8");
    ?>
    ....
    #sidebar_list
    {	
            ...
    	top: <?php echo $topsidebarlist; ?> ;
            ...
    }
    Voici le code dans le HTML/PHP de mon index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    ...
     
    <?php
          $topsidebarlist = "47px";
          if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== FALSE )
         {
                echo "<link rel='stylesheet' type='text/css' href='designs/IEDesign.php'/>";
          }
          else
         {
                echo "<link rel='stylesheet' type='text/css' href='designs/design.php'/>";
         }
    ....
    <?php 
         $nb_elem = $db->requestSELECT("*", $table_oupper, "", "", "", "", "");
         $nb_elem = mysql_num_rows($nb_elem);
         if($nb_elem > 0)
         {
                $topsidebarlist = "73px";
                 echo "<!--Liste --><div id='nb-elem'><span>".$nb_elem." élément(s)</span></div>";
                 unset($nb_elem);
          }
          else
          {
                $topsidebarlist = "47px";
           }
    ?>
     
     <!--Liste -->
     <div id="sidebar_list" >
            <?php require_once('includes/list.php');?>
     </div>
    Comme vous le voyez dans le code HTML/PHP de mon index j'ai passé ma div de la petite barre avant celle de ma liste pour être sur que ma variable soit définie avant que la liste soit générée et affichée.

    Mais le problème c'est que malgré tout ca le résultat reste ca :


    Le CSS se trouve ne pas avoir de valeur pour le top de ma div et du coup seul la propriété bottom est prise en compte, ma div se retrouve alors collée en bas avec un espace vide alors que ma liste devrait faire tout la hauteur de ma fenêtre.

    Pour voir le résultat en vrai et regarder tout le code : http://www.tibimac.com/SecretBox/

  2. #2
    Membre habitué Avatar de Dionyzos
    Homme Profil pro
    Développeur & Designer Web
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur & Designer Web

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 156
    Points
    156
    Par défaut
    Bonjour Tibimac,

    Si j'ai bien compris ton soucis, je pense que tu te compliques la vie pour rien.
    En fait, plutot que de parser ton CSS en PHP avec des variables, je te conseillerais plutot de déclarer plusieurs classe CSS pour ton 'sidebar_list' et et ecrire tel nom de classe ou tel autre en fonction de la situation via des IF/ELSE en PHP
    Ce qui donne pour le fichier CSS (et plus PHP) :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ....
    #sidebar_list
    {	
            ...
    }
     
    .basse { top: 73px; }
    .haute { top: 47px; }
    ...

    et pour le index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    ...
     
    <?php
          if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE' ) !== FALSE )
         {
                echo "<link rel='stylesheet' type='text/css' href='designs/IEDesign.php'/>";
          }
          else
         {
                echo "<link rel='stylesheet' type='text/css' href='designs/design.php'/>";
         }
    ....
    <?php 
         $nb_elem = $db->requestSELECT("*", $table_oupper, "", "", "", "", "");
         $nb_elem = mysql_num_rows($nb_elem);
         if($nb_elem > 0)
         {
                $classeCSS = "basse";
                 echo "<!--Liste --><div id='nb-elem'><span>".$nb_elem." élément(s)</span></div>";
                 unset($nb_elem);
          }
          else
          {
                $classCSS = "haute";
           }
    ?>
     
     <!--Liste -->
     <div id="sidebar_list" class="<?php echo $classeCSS; ?>" >
            <?php require_once('includes/list.php');?>
     </div>

    Du coup, tu n'as plus besoin de devoir parser ta CSS, et tu allèges par la même occasion le traitement coté serveur.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 101
    Points : 51
    Points
    51
    Par défaut
    Bonjour Dionyzos,

    Effectivement je n'avait pas pensé à ca !
    Je te remercie je test ca de suite et dit le résultat

    [EDIT] Ca fonctionnneee !!! PPP Ah joie et bonheur ! MERCI !!!! [/EDIT]

    Du coup http://www.tibimac.com/SecretBox <- résultat

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Wamp] scripts en php ne fonctionnent pas sur wampserver
    Par unggoyer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 10/04/2008, 22h16
  2. Le test10() de test.php ne fonctionne pas.
    Par Laplix dans le forum PhpMyObject
    Réponses: 8
    Dernier message: 16/03/2008, 20h24
  3. Fonction mail() php ne fonctionne pas
    Par silverspike dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 18/12/2007, 10h11
  4. [UBUNTU] Le php ne fonctionne pas
    Par zuxion dans le forum Ubuntu
    Réponses: 29
    Dernier message: 07/06/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo