2009-09-18 4 views
13

Je voudrais envelopper un fichier css en php ... Alors j'écris l'entête du fichier css et lui donne une extension php, donc ... css.php. La question est de savoir si la page est déjà utilisée en tant qu'inclure ... ou est-ce que ce nouvel en-tête se heurtera au cadre dans lequel la page est incluse?Inclure: css avec l'extension de fichier php?

+0

Puis-je demander ce que vous voulez utiliser ce ' css.php' fichier à servir? Une sorte de styles qui sont générés par la base de données ou quelque chose? – gnarf

+0

Pouvez-vous montrer du code? Je suis un peu perdu quant à la situation. – strager

Répondre

18

gnarf l'a cloué.

je fais:

<link rel="stylesheet" type="text/css" media="screen" href="<? echo TMPL ?>css/name-of-file.css.php"> 

puis en haut de votre fichier .css.php:

<? 
header('Content-Type: text/css'); 
// print out your php-driven css... 
?> 
+2

Vous pouvez également utiliser 'header (" Type de contenu: text/css; jeu de caractères: UTF-8 ");' – Omar

+0

Est-ce que cela fonctionne avec les anciens navigateurs comme IE7 et 8? –

+0

Assurez-vous que l'en-tête est imprimé tout en haut du fichier. Si vous avez (comme je l'ai fait) une ligne vide en haut, ça ne marchera peut-être pas quelque part! – MilanG

0

Cela fonctionnera si le script incluser n'envoie aucune sortie, sinon vous aurez une erreur "Headers already sent". L'utilisation de ob_start() dans le Includeer peut être une astuce pour éviter cela et avoir tout pour fonctionner.

Les trames Html n'ont rien à voir avec PHP à la place, donc pas de conflit du tout dans ce cas.

15

Si vous avez un fichier appelé css.php, assurez-vous simplement que les premières lignes définissent l'en-tête de type de contenu approprié. Vous pouvez également diviser le contenu de votre session (s'il y en a) en bootstrap.php si ce n'est déjà fait. Un exemple rapide de charger quelques informations de style d'un databse:

<?php 
    header("Content-Type: text/css"); 
    include('bootstrap.php'); 
    // fetch some information to print out our styles 
    $result = mysql_query("SELECT * FROM site_styles"); 
    while ($row = mysql_fetch_assoc($result)) { 
    echo $row["selector"]." {\n".$row["css"]."\n}\n"; 
    } 
?> 

De l'autre fichier php, juste sortie la balise pour inclure la css.php, vous ne veulent utiliser la fonction php include() pour cette tâche!

<link rel="stylesheet" type="text/css" href="css.php"/> 

Bien que depuis la plupart des navigateurs cache votre fichier css assez agressive, vous trouverez peut-être que le changement dynamiquement le contenu de ce fichier ne fait pas beaucoup de bien. Vous pouvez forcer que la mise à jour en ajoutant un paramètre get à l'href du lien comme ceci:

<link rel="stylesheet" type="text/css" href="css.php?<?php echo $cssversion ?>"/> 

Bien que cela va recharger complètement votre fichier css chaque fois que les changements de paramètres. Il est généralement préférable de diffuser des fichiers CSS statiques pour cette raison. Si vous avez des styles qui doivent être chargés à partir de paramètres de configuration, etc., qui ne changent pas très souvent, le premier exemple devrait fonctionner pour vous.

+1

suce pour voir que votre réponse a été requinqué. – emc

6

fichier HTML:
<link rel="stylesheet" type="text/css" href="css.php"/>

fichier css.php :
<?php
header("Content-type: text/css; charset=utf-8");
//your php + css code goes here
?>

Si votre Première ligne de code dans votre fichier CSS.php n'est pas
header("Content-type: text/css; charset=utf-8");il ne fonctionnera pas