如何使用PHP在标题中包含CSS?

如何使用PHP在标题中包含CSS?,php,html,header,Php,Html,Header,假设我有如下标记: <!DOCTYPE html> <html> <head> </head> <body> <?php PutIntoHeader("<script src="im_on_top"></script>") ?> </body> </html> PutIntoHeader函数将把给定的脚本放入呈现的

假设我有如下标记:

<!DOCTYPE html>
  <html>
    <head>
    </head>
  <body>
     <?php
     PutIntoHeader("<script src="im_on_top"></script>")
     ?>
  </body>
</html>

PutIntoHeader函数将把给定的脚本放入呈现的html的head部分。我可能错过了一些非常明显的东西,但我似乎无法理解。你知道该函数如何做到这一点吗

产出将是:

<!DOCTYPE html>
  <html>
    <head>
       <script src="im_on_top"></script>
    </head>
  <body>
  </body>
</html>

谢谢你的建议

编辑:->


嗨,我感觉自己像是一个傻瓜,得到了这样的答案:)我的系统非常复杂,在我写标题的时候,我不知道哪个脚本会被请求到那个特定的页面,因为它是动态的。我可以在呈现之前将所有html放在变量中,然后将其作为xml遍历,并在数组中存储脚本时手动将其放在变量中,但我不想走这条路。

您的PHP代码无法知道内容应该输出到哪里。一旦呈现页面,PHP就会失去对数据的控制

您似乎试图在
中编写内容,然后将其注入
部分为什么不在
部分输出内容?

<!DOCTYPE html>
  <html>
    <head>
        <?php echo "<script src=\"im_on_top\"></script>"; ?>
    </head>
  <body>    
      <!-- Some HTML markup here -->
  </body>
</html>

您可以尝试以下方法:

<head>
    <?php echo '<link rel="stylesheet" type="text/css" href="theme.css">'; ?>
</head>

如果你不想直接把它放在头上,因为当时你不知道需要什么,你需要事先执行逻辑

您需要将逻辑与视图分离,并将视图作为呈现信息的简单方式

首先计算关于页面的所有内容,并为自己留下变量,您可以使用这些变量提取相关信息,然后为预先计算的变量输出相关html

这可以在一个页面内完成,或者我建议使用某种库来帮助完成。像Kohana这样的东西非常擅长于此,您可以使用Kohana来分离控制器、模型等,然后使用Mustach之类的东西作为模板库。使用Mustach,您可以创建只包含最基本逻辑的视图(应该是这样的)。

在几乎所有情况下,您只需将脚本合并并缩小到单个文件中即可。这会减慢初始加载时间(第一次访问站点),但会加快进一步的访问/导航,因为文件将被缓存

当然,这取决于你的具体情况。例如,见

还有一点是,用户代理不能无限并发地连接到同一个域来加载资源

例如,请参见以下两个(有些过时)基准:

在你的评论中,你说你正在使用一百万个不同的小部件。这是否意味着这些小部件都有完全特定和不同的代码,或者只是数据不同或呈现方式不同?如果只是数据/演示,则不需要使用不同的脚本

如果你真的在谈论100万个完全不同的代码用于不同的小部件(100万突然听起来像是一个虚构的任意数字),那么不在一个脚本中加载所有内容确实是有意义的。但我们不可能回答这个问题,因为这取决于文件大小、第一次访问的加载速度、共享代码的数量以及类似的数字

回到你的问题“我如何才能在头脑中加载特定的脚本?”

一种选择是不在头部渲染,而是将其放置在
和body标记之前。这种方法的优点是,您知道该加载什么脚本。页面加载速度会更快(因为在呈现实际页面之前,头部中的资源将首先被完整下载)。这种方法的缺点是,在脚本启动之前有一个很小的延迟,因为它将是DOM中最后加载的内容

另一种选择是推迟在PHP端呈现HTML,并将其更像模板引擎一样使用。一个简单的例子是,首先获取所有要显示的小部件,然后在PHP中启动HTML呈现

一些引导文件

<?php

// load widgets from db or wherever
$widgets = [
    [
        'template' => '/templates/widget1.phtml',
        'script'   => '/js/widget1.js',
    ],
    [
        'template' => '/templates/widget2.phtml',
        'script'   => '/js/widget2.js',
    ],
];

require __DIR__ . '/templates/page.html';


另外,在上面的示例中,我使用了
script
标记,但它也可以扩展为
css
文件。。。把它写在标题里。。。?!这是一个非常简单的示例,我无法在真实场景中用header编写,因为当时我不知道最终将加载哪些脚本。请使用
echo
。另外,要小心重复引用。如果不转义这些引号,您的示例将无法运行。您正在构建cms吗?如果是这样,您可以创建一个函数,该函数可以从当前文件中获取头并附加脚本。您需要对小部件进行某种依赖性检查。存储每个小部件所需的依赖项列表。当你开始加载页面时,在你开始输出页眉之前,先弄清楚你将包含哪些小部件。嗨,我感觉自己像是一个傻瓜,得到了这样的答案:)我的系统非常复杂,在我写页眉的时候,我不知道哪个脚本会被请求用于特定的页面,因为它是动态的。我可以在呈现之前将所有html放在变量中,然后将其作为xml遍历,并在数组中存储脚本时手动将其放在变量中,但我不想走这条路。@user3370402:如果你有这种印象,我很抱歉。我建议你修改你的问题,让它完全清楚你想要达到的目标。在当前的形式中,似乎您正在尝试在页面加载完成后更改网页的结构。是的,我在问题中添加了一条注释,无论如何,感谢您的回复。@user3370402:这与Common相同
<!DOCTYPE html>
<html>
    <head>
        <title>My page with widgets</title>
        <?php foreach ($widgets) { ?>
            <script src="<?php echo $widgets['script']; ?>"></script>
        <?php } ?>
    </head>
    <body>
        <?php foreach ($widgets) { ?>
            <?php echo $widgets['template']; ?>
        <?php } ?>
    </body>
</html>