跨页面混合PHP和CSS

时间:2010-08-23 23:20:21

标签: php css

我有一些页面,我希望有相同的背景,所以我认为外部样式表将是要走的路。但是,背景会根据一天中的时间而变化,所以我不得不将一些PHP混合到CSS中。所以现在我有一个文件,background.php:

<html>
<style type="text/css">

body
{
    background-image: url('<?php echo (day() == 1 ? 'images/day_sheep.jpg'
                                                : 'images/night_sheep.jpg'); ?>');
    background-position: 50% 50%;
    background-repeat: no-repeat;
    background-color: silver
}

a {text-decoration:none;}
a:link {color:#ff0000;}
a:visited {color:#0000FF;}
a:hover {text-decoration:underline;}

</style>
</html>

从两个不同的页面调用。一个页面工作得非常好,但是当我添加行require_once 'background.php'时,另一个页面完全破坏了,我的意思是根本不再显示任何内容。违规页面如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Penelope's Conquests</title>

    <?php require_once 'background.php'; ?>

    <style type="text/css">

     table {
         margin: 10px;
         margin-left: 50%;
         margin-right: 50%;
         padding: 12px;
         border: 10px;
         text-align: center;
         background-color: #fffb40;
         border-style: ridge;
         border-collapse: separate;
         border-color: #9c6ad6;
         outline-style: inset;
           }

     td.cap {
            text-transform: capitalize;
            font-variant: small-caps;
            }

     td.str {
            font-weight: bolder;
            font-size: 1.4em;
            }

    </style>
</head>
<body>
    <h2>To date, Queen Penelope has destroyed:<br /><br /></h2>


    <?php

    require_once 'victims.php';
    require_once 'mysqlSheep.php';



   echo '<table border="3"
                frame="box"
                cellpadding="5">
         <caption>Penelope\'s Victims.</caption>
         <tr><th>Victim</th><th>Times Zapped</th>';

       $hits = mysql_query("
               SELECT *
               FROM victims
               ORDER BY amount
                          ");

       if( $hits )
       {
            while( $row = mysql_fetch_array($hits) )
            {
                   echo '<tr><td class="cap">'.$row['victim'].'</td>
                         <td>'.$row['amount'].'</td></tr>';
            }
       } 
       else
       {
            echo '<p>' . mysql_error() . '</p>';
       }

   echo '</tr></table><br /><br />';

   echo '<table border="3"
                frame="box"
                cellpadding="5">
         <caption>Button Clicks.</caption>
         <tr><th>Hour of day</th><th>Times Clicked</th>';

   $time = mysql_query("
                       SELECT *
                       FROM time
                       ORDER BY hits
                       ");

   while( $row = mysql_fetch_array($time) )
   {
       print "<tr><td class='str'>".$row['hour']."</td>";
       print "<td>".$row['hits']."</td></tr>";
   }


    ?>
</body>
</html>

为什么页面不希望使用样式表?

5 个答案:

答案 0 :(得分:4)

另一种选择是使用<link>属性附加css文件。

所以在你的background.php地方

<?php
    header("Content-type: text/css");
?>
body
{
    background-image: url('<?php echo (day() == 1 ? 'images/day_sheep.jpg'
                                                : 'images/night_sheep.jpg'); ?>');
    background-position: 50% 50%;
    background-repeat: no-repeat;
    background-color: silver
}

a {text-decoration:none;}
a:link {color:#ff0000;}
a:visited {color:#0000FF;}
a:hover {text-decoration:underline;}

然后使用

调用它
<link rel="stylesheet" type="text/css" href="background.php" />

将这个放在一个答案会变得混乱,这就是为什么我又添加了另一个。

答案 1 :(得分:1)

您的PHP样式表中有一个<html>标记,这意味着您将获得重复的<html>标记..不太好

删除它,只使用<style>代码..

<强> background.php

<style type="text/css">

body
{
    background-image: url('<?php echo (day() == 1 ? 'images/day_sheep.jpg'
                                                : 'images/night_sheep.jpg'); ?>');
    background-position: 50% 50%;
    background-repeat: no-repeat;
    background-color: silver
}

a {text-decoration:none;}
a:link {color:#ff0000;}
a:visited {color:#0000FF;}
a:hover {text-decoration:underline;}

</style>

答案 2 :(得分:1)

哦,问题是函数day()是在一个单独的文件中定义的,我忘记在重组网站时将其移除。

答案 3 :(得分:1)

来吧Marko,这是超级棒的剧本!我用你的方式在外部css文件中设置自定义宽度,它工作得很好。

如果需要,我会做所有的PHP内容:

<?php
    header("Content-type: text/css");

    $width= $_COOKIE['scr_width']-10;
?>

然后我在css文件中使用下面的变量,如下所示:

width:<?PHP echo $width."px;";?>

我完成了这样的包含:

 <head>
<link rel="stylesheet" href="<?PHP echo myLocVars::$mySpacePath."style.php";?>">
</head>

包含CSS可能非常棘手,因为不幸的是它不会抛出错误(至少我不知道如何...),这可能是一个麻烦。这就是我给出完整路径的原因,因为它是本地文件包含的本地文件,包含在index.php中。

答案 4 :(得分:0)

如果您在localhost上测试您的网站,请尝试

require_once(dirname(background.php) . "/background.php");

而不是require_once(background.php);