我正在尝试使用PHP处理一些CSS。我想要处理的CSS是特定于页面的,所以我想在index.php
中设置一个变量,以便在设置变量时只回显CSS。
index.php
<?php
$name = 'index';
?>
<?php
include 'inc/header.php';
?>
header.php
<head>
<meta charset="utf-8">
<title></title>
<?php include 'import.php'; ?>
</head>
import.php
<link rel="stylesheet" href="css/styles.css.php" type="text/css" />
此文件的标头设置正确。并且对CSS进行解释。
styles.css.php
.jumbotron {
background-image: url(../img/jumbotron.jpg);
<?php
if ($name === "index") {
echo("height: 50VH;"); /* Does not echo anything*/
}
var_dump($name); // Evaluates to NULL
?>
}
如何确保$name
设置为index.php
中设置的值?
EDIT:我的最终解决方案是从stdClass
生成一个对象,并将我需要的变量作为属性添加到该对象中。在指向CSS文件的链接中放入一个GET请求,该文件是对象的JSON字符串的Base64。
<link>
标记对文件发出HTTP请求,该请求完全独立于包含彼此的PHP页面,因此$name
在styles.css.PHP中不可用。
要这样做,您需要将样式表链接为这样的内容,以将$name
作为get变量传递:
<link rel="stylesheet" href="css/styles.css.php?name=<?php echo $name; ?>" type="text/css" />
然后在样式表styles.css.php中使用$_GET['name']
:
if ($_GET['name'] === "index") {
echo("height: 50VH;");
}
问题是您正在从渲染的html内部链接到styles.css.php。这意味着页面将在一个单独的请求中提取(正如您在检查页面时所看到的那样)。此请求从未通过index.php,因此不会设置$name
变量。
我建议您将css包含在样式块中的渲染HTML中。这应该和将import.php更改为以下内容一样简单:
<style>
<?php include 'css/styles.css.php' ?>
</style>
这还有一个额外的好处,那就是减少了浏览器必须发出的请求数量,因此应该会加快页面的速度。
顺便说一句,这不是一种非常标准的css使用方法。我相信最好在你的body
标签上添加一些id(或数据属性),指示你所在页面的名称。在css文件(它不是通过php运行的,只是一个标准的css文件)中,你可以这样做:
.jumbotron {
background-image: url(../img/jumbotron.jpg);
}
#index .jumbotron {
height: 50vh;
}
文件styles.css.php
不知道关于$name
变量的信息-这就是为什么在执行var_dump($name)
时它为null的原因。使用<link>
,您只需将style.css.php的内容输出为普通的html/css。您需要执行include_once('styles.css.php')
或require_once('styles.css.php')
,以便正确评估$name
变量。
您有一个由index.php
生成的HTML页面。这将告诉浏览器在<link rel="stylesheet" href="css/styles.css.php" type="text/css" />
行加载外部样式表。通过浏览器加载外部数据是一个全新的请求。因此,生成样式表的PHP文件对HTML页面脚本中声明的变量一无所知。
实际上,变量$name是未设置的。由于它是通过引用var_dump
作为参数给定的(内建函数被声明为通过引用获取参数),因此引用在null
中产生。
如果只想在一个PHP脚本中区分不同的样式表,请在URL中附加一个GET参数作为查询:
<link rel="stylesheet" href="css/styles.css.php?name=<?PHP echo $name;?>" type="text/css" />
在syles.css.php中获取该参数:
<?php $name = isset($_GET['name']) ? $_GET['name'] : ''; ?>