我希望在css文件中运行PHP。原因是我想根据网站是在开发还是生产中动态设置背景图像的URL。即
<?php Header ("Content-type: text/css; charset=utf-8");
$baseUrl = $this->basePath();
if (defined('RUNNING_FROM_ROOT'))
{
$baseUrl .= '/public';
}
?>
.readersSlidersOne {
background: url("<?php echo $baseUrl ?>/Images/backGroundImages/side_wallet.png") scroll 0 0 transparent ;
}
上面的 if子句基本上决定了是应该使用完整的BASE URL还是仅使用/ public
我从this answer知道解决方案是创建一个带有php结尾的css文件,然后将下面的代码放在文件的顶部:
标题(“内容类型:text / css; charset = utf-8”);
我确实试过这个,确实用PHP标签创建了一个CSS文件(css.php)。
然而,一旦我在文件中放置了实际的PHP代码,它就会停止工作。
即
$baseUrl = $this->basePath();
答案 0 :(得分:4)
在这种情况下我通常做的是,我在所需页面的顶部添加特定的css并动态更改值。这是因为css是特定于页面的
<?php
$path = 'http://www.example.com/image.jpg';
?>
<style>
.className{
background: url(<?php echo $path; ?>);
}
</style>
或者如果您想将它放在标题包含文件中,基本上在所有文件的一个位置,添加if else语句并在页面顶部添加$ page变量
<?php
// define this before including the file contaiting $path
$page = 'index'; ?>
<?php
if($page == 'index'){
$path = 'http://www.example.com/image01.jpg';
}elseif($page == 'contactus'){
$path = 'http://www.example.com/image02.jpg';
}
?>
答案 1 :(得分:2)
CSS文件应该是静态的和可缓存的。您不应该通过PHP动态生成CSS文件。
<style>
部分,然后通过PHP生成(或应用style=".."
属性受影响的元素直接);你可以通过PHP动态地操作它。答案 2 :(得分:1)
除非此文件包含在类定义中的某处,否则$this->
不在上下文中。您将不得不想出另一种方法来获得正确的路径。
使用:
$Livedomain = "mysite.com";
$Devdomain = "localhost/mydomain";
$baseUrl = strpos($Livedomain, $_SERVER['PHP_SELF']) === false ? $Devdomain : $Livedomain;
此外,您可以发送缓存标头以防止过多请求并快速加载页面..
$seconds_to_cache = (60 * 60 * 24 * 90); // 3 months-ish
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: max-age=$seconds_to_cache");
答案 3 :(得分:0)
你走在正确的轨道上 - 在CSS文件中运行PHP代码,你会创建一个*.php
文件并通过它发送一个CSS头,如下所示:
确保在Header()
<?php Header("Content-type: text/css; charset=utf-8"); ?>
<?php
$wht = '#ffffff';
$blk = '#000000';
// This line probably isn't working because $this is not defined
$baseUrl = $this->basePath();
?>
div#id {
background-color: <?php echo $blk; ?>;
color: <?php echo $wht; ?>;
background-image: url('<? echo $baseUrl; ?>/images/myimage.jpg');
}
话虽如此,你是否尝试过像LESS或SASS这样的预处理器,这可以用来做我认为绝大多数你想要完成的事情?
答案 4 :(得分:0)
这只是一个想法....你不容易在html中只注入背景图片吗?例如:
// Somewhere in your html oh Head
<?php
$image = 'http://www.tld.com/yourImage.jpg';
?>
<div id="myId" style="background-image:<? echo $image; ?>"></div>
然后你不需要在CSS的本质上做任何事情,这将节省你的时间! :)