2010-08-23 2 views
2

У меня есть несколько страниц, на которых я хотел бы иметь один и тот же фон, поэтому я решил, что внешняя таблица стилей - это путь. Тем не менее, фон меняется в зависимости от времени суток, поэтому мне пришлось смешать некоторый PHP в CSS. Итак, теперь у меня есть файл, background.php:Смешивание PHP и CSS на всех страницах

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

Почему страница не хочет вести себя со списком стилей?

+4

На стороне примечания я бы рекомендовал поместить все статические стили во внешнюю таблицу стилей и вывести только динамическое значение в тело документа. –

+0

Дополнительное примечание. Вы можете ссылаться на .php-файлы в виде таблиц стилей, пока вы устанавливаете заголовок в заголовок («content-type: text/css») –

+0

@ Вниз-избиратель, позаботьтесь о себе? – Aren

ответ

1

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

1

Вы получили <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> 
+1

Это все еще не исправляет. :( – Andy

+1

@ Андрю, но он должен. Если это не так, проверьте свой HTML-источник. –

3

Другой вариант - прикрепить ваш файл 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 ответ будет запутаться поэтому я добавил еще один.

0

Если вы тестируете сайт на локальном хосте, а затем попробовать

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

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

1

Давай Марко, это было супер фантастический сценарий !!! Я использовал ваш путь, чтобы установить пользовательскую ширину внутри внешнего файла 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> 

Inc luding CSS может быть очень сложным, потому что, к сожалению, он не бросает ошибку (по крайней мере, я не знаю, как ..), и это может быть проблемой.Вот почему я даю полный путь, потому что это локальный CSS, включенный локальным файлом, включенным из index.php.