Смешивание PHP и CSS на разных страницах - PullRequest
2 голосов
/ 24 августа 2010

У меня есть несколько страниц, на которых я хотел бы иметь один и тот же фон, поэтому я подумал, что лучше использовать внешнюю таблицу стилей. Однако фон меняется в зависимости от времени суток, поэтому мне пришлось смешать немного 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 ]

4 голосов
/ 24 августа 2010

Другой вариант - прикрепить файл CSS с атрибутом <link>.

Так что в вашем 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 голос
/ 09 марта 2011

Да ладно, Марко, это был супер фантастический сценарий !!! Я использовал ваш способ, чтобы установить пользовательскую ширину во внешнем 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 может быть очень сложным, потому что, к сожалению, оно не выдает ошибку (по крайней мере, я не знаю, как ...), и это может быть проблемой. Вот почему я даю полный путь, потому что это локальный CSS, включенный в локальный файл, включенный в себя из index.php.

1 голос
/ 24 августа 2010

Оооо, проблема в том, что функция day () определена в отдельном файле, я забыл переместить ее, когда реорганизовывал сайт.

1 голос
/ 24 августа 2010

У вас есть тег <html> внутри вашей таблицы стилей PHP, что означает, что вы получите дубликаты <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>
0 голосов
/ 24 августа 2010

Если вы тестируете свой сайт на localhost, попробуйте

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

вместо require_once(background.php);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...