动态php包含不同CSS页面的文件

时间:2018-01-29 18:24:59

标签: php css include

如果我的网页的每个页面上都列出了一些CSS页面,那么它们会相互负面交互。目标是将整个头部分移除到头部包含文件中以清理页面。我尝试使用php脚本查看SERVER的Request URI变量来检测当前页面,然后在if语句中使用它来选择该页面所需的css链接标记。这就是我的尝试:

<?
$currentLocation = $_SERVER['REQUEST_URI'];
if ($currentLocation == '/index.php' || $currentLocation == '/' || $currentLocation == '') 
{
echo '<link href="css/signin.css" rel="stylesheet">';
} elseif ($currentLocation == '/signup.php') {
echo '<link href="css/signin.css" rel="stylesheet">';
} elseif ($currentLocation == '/anotherPage.php') {
echo '<link href="css/anotherPageCSS.css" rel="stylesheet">';
}
?>

这是一个不错的方法吗?你看到它有什么错误吗?请指教。

我还考虑将CSS页面分解为一个样式表,并使用id属性来定位而不是使用标记选择器。你们推荐什么?

2 个答案:

答案 0 :(得分:2)

这是一个利用小班级进行页面键控的方法的基本示例。每当你想为html设置输出时,你选择它应该构建哪个pagekey(这样你的url和php文件名就可以不用担心了):

<?php
// include_handler.php
class IncludeHandler {
    private $pagekey = 'basic';
    private $cssfiles = array();
    private $jsfiles = array();

    function __construct($key) {
        $this->pagekey = $key;
        $this->cssfiles = [ // define all css files to pagekeys
                            'home' => array('home.css'),
                            'basic' => array(),// if none needed
                            'accounts' => array('accounts.css'),
                            'checkout' => array('accounts.css','checkout.css'),
                        ];
        $this->jsfiles = [  // define all js files to pagekeys
                            'home' => array('home.js'),
                            'basic' => array(),
                            'accounts' => array('accounts.js'),
                            'checkout' => array('accounts.js','checkout.js'),
                        ];
    }
    public function headlinks() { // call this in your html output <head> area
        $html = '';
        foreach ($this->cssfiles[$this->pagekey] as $cssfile) {
           $html .= '<link type="text/css" rel="stylesheet" href="/css/'. $cssfile .'" />';
        }
        foreach ($this->jsfiles[$this->pagekey] as $jsfile) {
           $html .= '<script type="text/javascript" src="/js/'. $jsfile .'"></script>';
        }
        return $html;
    }
}
?>

来自结帐页面的示例用法:

<?php
// checkout.php
require_once(__DIR__.'/include_handler.php');
$htmlincludes = new IncludeHandler('checkout');

// processing code

// html output area
?><html>
<head>
    <link type="text/css" rel="stylesheet" href="/css/global.css" />
    <?PHP echo $htmlincludes->headlinks();?>
</head>
<body></body>
</html><?PHP
?>

答案 1 :(得分:1)

这是如何做到这一点的一种方式。 我建议使用某种字典(PHP中的关联数组)

这样的东西
<?php
$currentLocation = $_SERVER['REQUEST_URI'];
$styles = [
  "/index.php"   => "first.css",
  "/"            => "first.css",
  "/another.php" => "second.css",
  //...
];

if (in_array($currentLocation, $styles))
{
    $link = "css/" . $styles[$currentLocation];
    echo "<link rel=\"stylesheet\" href=\"$link\"/>
}

?>

我的意见:))