我正在尝试使用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
中设置的值?
编辑:我的最终解决方案是从stdClass
创建一个对象,并将我需要的变量作为属性添加到对象中。将GET请求放入CSS文件的链接中,该文件是对象的JSON字符串的Base64。
答案 0 :(得分:3)
<link>
标记对文件的HTTP请求完全独立于彼此包含的PHP页面,因此styles.css.php中不提供$name
。
要这样做,您需要链接样式表,将$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;");
}
答案 1 :(得分:1)
问题是您从渲染的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;
}
答案 2 :(得分:0)
文件styles.css.php
知道 关于$name
变量 - 这是{em> null 的原因{{ 1}}。使用var_dump($name)
,您只需将style.css.php的内容输出为普通的html / css。您需要执行<link>
或include_once('styles.css.php')
,以便正确评估require_once('styles.css.php')
变量。
答案 3 :(得分:0)
您正在使用index.php
生成的HTML页面。这告诉浏览器在行<link rel="stylesheet" href="css/styles.css.php" type="text/css" />
加载外部样式表。通过浏览器加载外部数据是一个全新的请求。因此,生成样式表的PHP文件对提供HTML页面的脚本中声明的变量一无所知。
实际上,变量$ name未设置。由于它是作为参数通过引用var_dump
给出的(内置函数被声明为通过引用获取参数),引用结果为null
。
如果只想在一个PHP脚本中区分不同的样式表,请将GET参数作为查询附加到URL:
<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'] : ''; ?>