在包含的文件中使用PHP变量在包含的文件

时间:2016-05-10 21:45:44

标签: php css

我正在尝试使用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。

4 个答案:

答案 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'] : ''; ?>