Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用不同的css和js创建php标头?_Php_Html - Fatal编程技术网

如何使用不同的css和js创建php标头?

如何使用不同的css和js创建php标头?,php,html,Php,Html,快速和应该是简单的问题,但我找不到答案!!!因此,我试图制作一个名为header.php的通用头文件。现在唯一的问题是一些页面有5个css样式表,而其他页面只有2个。有些页面的标题中有5个js链接,而有些页面只有1个。如何解释标题中css和js链接的这种可变性?我应该使用if语句吗?变量?谢谢 考虑将资源组合为单个资源。这将最大限度地减少HTTP请求,这是一个非常复杂的问题。在每个页面中加载所有CSS和JS文件与第一次加载后没有多大关系,它们将被缓存,不再被检索 因此,您可以将它们捆绑起来,而不

快速和应该是简单的问题,但我找不到答案!!!因此,我试图制作一个名为header.php的通用头文件。现在唯一的问题是一些页面有5个css样式表,而其他页面只有2个。有些页面的标题中有5个js链接,而有些页面只有1个。如何解释标题中css和js链接的这种可变性?我应该使用if语句吗?变量?谢谢

考虑将资源组合为单个资源。这将最大限度地减少HTTP请求,这是一个非常复杂的问题。

在每个页面中加载所有CSS和JS文件与第一次加载后没有多大关系,它们将被缓存,不再被检索


因此,您可以将它们捆绑起来,而不必担心当前页面是否真的需要某个特定文件。

与其创建静态header.php,不如创建一个动态包含javascript文件的函数。例如,page1只需要jquery&jqueryuijs引用,因此调用

include_js('jquery','jqueryui')

其中include_js是将插入相应js文件的函数

类似地,在第2页中,您需要假设您需要jquery&jquery.fancybox


include_js('jquery','jquery.fancybox')
您应该使用这样的设置。当然,您可能希望这样做,以便从视图而不是控制器中包含样式。在不了解您的设置的情况下,无法给出更好的答案

在控制器中

$styles_for_layout = array();
$scripts_for_layout = array();

//and whenever you need to include a script in for your particular view
$scripts_for_layout[] = 'script_for_page.js';
$styles_for_layout [] = 'style_for_page.css';
headerp.php



你是否建议我将所有css合并到一个文件中,将所有javascript文件合并到一个文件中?不是css和js,而是将所有css合并到一个文件中,将所有js合并到另一个文件中:)我一直在考虑这个问题,但如果我将5页样式表合并到一个样式表中,可能会使查找困难。这是另一个问题(尽量合理地构造样式表)但是如果你想提高性能,你可能想在最后压缩css,这样压缩时可读性就无关紧要了。@Ben这个问题可以通过在开发周期中加入一个构建脚本来解决。如果我错了,请更正我,但我不必担心http请求吗?那么如果一个页面只需要一个css样式表,如果e header包括5个样式表和5个javascript文件,这难道不会为一个页面生成9个额外的http请求并降低速度吗?对于那个特定的页面,是的,它会降低速度。但是,正如我提到的,它将被缓存,对这些文件的后续请求不会在那个浏览会话中再次加载。我不同意。Ne请注意,一次加载所有的脚本/样式可能会严重破坏代码(在不应该的情况下触发事件/应用样式)这是不必要的。如果您想从一个非常轻松的页面预加载资源,这是可以理解的,但不是必需的。注意:只有在资源头设置正确的情况下,缓存才能有效工作。Gunner,这种情况下的问题是加载-加载多个资源时,即使没有(或很少)资源,浏览器速度也会减慢都被实际使用了。@JohnP我们是否同意这是不必要的、丑陋的和混乱的?@fabrik当然你可以重构代码来帮助用户,所以像
echo$scriptsForLayout()这样的一行代码
就足够了,但我认为这是一种方法。只有当他有~2个CSS/JS文件且没有重叠时才没有必要。PHP框架也有这种方法well@JohnP不,这不是我要说的。这将很难维护,它以一种糟糕的方式混合了代码和html,所以我将避免使用它。这怎么很难维护ntain?一旦你把它放进去,你就不会碰你的布局。PHP总是混合代码和HTML(看看众多框架中的任何一个).就像我说的,你可以把它移到一个助手函数或其他什么东西上,那么当你需要新的页面、新的脚本等的时候呢?你会先接触你的PHP代码而不是HTML?看起来太不受欢迎了。如果我错了,请纠正我(很晚,很累)但这并不能真正回答@Ben的问题。每个页面都会有不同的参数被传递到包含函数中,因此每个标题最终都会不同。Ben希望为每个页面使用一个通用标题。@Moses他可以为标题、元标记等其他内容使用universal header.php,并使用此函数添加JS r引用。如果您想在header.php内完成所有操作,那么使用if-else会使代码看起来非常难看。它可能看起来像“include_once”header.php;include_js('jquery')。Ben,您可能想使用输出缓冲。这是一种广泛使用的机制,允许在呈现页面后在页面中执行操作。
<?php if(!empty($styles_for_layout))?>
  <?php foreach ($styles_for_layoutas $style) : ?>
     <link rel='stylesheet' href='<?php echo $style ?>'>
  <?php endforeach; ?>
<?php endif; ?>

<?php if(!empty($scripts_for_layout))?>
  <?php foreach ($scripts_for_layout as $script) : ?>
     <script type='text/javascript' src='<?php echo $script ?>'>
  <?php endforeach; ?>
<?php endif; ?>