【问题标题】:How to add content to PHP include files?如何将内容添加到 PHP 包含文件?
【发布时间】:2013-12-14 23:31:52
【问题描述】:

好吧,我可能没有最好的标题,但我会尽力给出更好的解释。

假设您正在使用 PHP include() 来构建您的网站:

Header.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name=keywords content="somthiefn"/>
        <title>Website</title>
        <link rel="stylesheet" href="css/style.css" type="text/css">
        <script src="Scripts/jquery-1.8.3.min.js"></script>
        <link rel="icon" type="image/png" href="/images/favicon.ico" />
    </head>
    <body>

Footer.php

    </body>
</html>

然后是一个示例页面:

Index.php

<!--Header-->
<?php include ('includes/header.php'); ?>

   <div class="content">
       <!-- some content-->
   </div>

<!--Footer-->
<?php include ('includes/footer.php'); ?>

基本上我只是想知道是否有办法将一些脚本加载到我的标题部分。

我想实现像 ASP.NET 及其母版页这样的东西,我可以在其中添加内容的标题。例如

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
    <script src="Scripts/somescript.js"></script>
</asp:Content>

【问题讨论】:

  • 脚本最好放在页脚&lt;/body&gt;之前
  • @popnoodles 是的,我知道,这只是一个例子,因为我需要对 css 文件做同样的事情

标签: php html web include


【解决方案1】:

是的,你可以这样做:

index.php

<?php
    // Wanted page title 
    $title = "some";

    // JS Files.. 
    $scripts = array();  
    $scripts[] = '<script src="js/some.js" />';
    $scripts[] = '<script src="js/some2.js" />';
    $scripts[] = '<script src="js/some3.js" />';

    // Include header 
    include ('includes/header.php');

header.php

<title><?php echo $title ?></title>
<?php echo implode("\n",$scripts) ?>

当然,变量可以根据需要命名并包含任何数据。主要的是你可以像我展示的那样在文件之间传递它们。

【讨论】:

  • 是的,这是有道理的,但是如果我有多个脚本,一个变量可以保存它怎么办?
  • 更改了我的答案。
  • 这非常接近,但我收到一个错误implode() Invalid arguments passed in 这是将元素推送到数组的正确方法。仅当超过一个时才会出错。
  • 是的。尝试只使用 implode(" ",$scripts); 并检查您的 $scripts 数组值。
  • 试过同样的错误,这看起来是最干净的解决方案,不幸的是我得到了那个错误。
【解决方案2】:

index.php 中,在包含 header.php 之前,您可以为脚本设置一个数组,例如:

header.php

<?php if(!isset($scripts)) $scripts = array(); ?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name=keywords content="somthiefn"/>
        <title>Website</title>
        <link rel="stylesheet" href="css/style.css" type="text/css">
        <script src="Scripts/jquery-1.8.3.min.js"></script>
        <link rel="icon" type="image/png" href="/images/favicon.ico" />

        <!-- Include dynamic scripts-->
        <?php foreach($scripts in $script): ?>
        <script src="<?php echo $script; ?>"></script>
        <?php endforeach;?>

    </head>
    <body>

index.php

<?php
$scripts = array('Scripts/somescript.js', 'http://server.com/path/anoterscript.js);
?>

<!--Header-->
<?php include ('includes/header.php'); ?>

   <div class="content">
       <!-- some content-->
   </div>

<!--Footer-->
<?php include ('includes/footer.php'); ?>

【讨论】:

  • 不,因为 foreach 会在开始时中断,如果您不这样做,$scripts = array() 会设置在 header.php 的顶部以确保安全t 在你的 index.php 中定义这个没问题。
  • 使用此代码示例 $scripts 将始终为空 :) $scripts = array();
  • 真的!我改变它:&lt;?php if(!isset($scripts)) $scripts = array(); ?&gt;。我也改变了 foreach
  • 这是 php 吗? foreach($script in $scripts) 还是应该是 foreach($scripts as $script)
  • 是的,使用foreach($scripts as $script)
【解决方案3】:

您想在标题中添加 PHP 代码吗?然后你可以在标签之间添加你的代码(或者如果启用了短标签,则添加标签),但我会考虑只在 PHP 标签之间调用一个包含并在该包含中包含逻辑。

另一个选项可能是模板引擎,例如。 G。 Smarty。在大多数模板引擎中,您可以定义自己的函数并从模板中调用它们。

【讨论】:

    【解决方案4】:

    你可以这样做:

    // content.php
    <?php
    $head = "<!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv='content-type' content='text/html;charset=utf-8' />
        <meta name='keywords' content='somthiefn' />
        <title>Website</title>
        <link type='text/css' rel='stylesheet' href='css/style.css' />
        <script src='Scripts/jquery-1.8.3.min.js'></script>
        <link type='image/png' rel='icon' href='images/favicon.ico' />
      </head>
    <body>";
    $foot = "\n<body>\n</html>";
    ?>
    
    // index.php
    <?php
    include 'includes/content.php';
    $dom = new DOMDocument; @$dom->loadHTML($head);
    $hd = $dom->getElementsByTagName('head'); $hd = $hd->item(0);
    $script = $dom->creatElement('script');
    $scriptAttr = $dom->createAttribute('src');
    $scriptAttr->value= 'Scripts/somescript.js'; $script->appendChild($scriptAttr);
    $hd->appendChild($script);
    echo $dom->saveHTML().$foot;
    ?>
    

    另一种选择是使用变量来分隔您的代码,然后仅使用echo 部分。这就是我会做的。它在技术上更快。试试这个:

    // content.php
    <?php
    $headTop = "<!DOCTYPE html>
    <html>
      <head>
        <meta http-equiv='content-type' content='text/html;charset=utf-8' />
        <meta name='keywords' content='somthiefn' />
        <title>Website</title>
        <link type='text/css' rel='stylesheet' href='css/style.css' />
        <script src='Scripts/jquery-1.8.3.min.js'></script>\n    ";
    $headBottom = "\n    <link type='image/png' rel='icon' href='images/favicon.ico' />
      </head>
    <body>";
    $foot = "\n<body>\n</html>";
    ?>
    
    // index.php
    <?php
    include 'includes/content.php';
    echo "$headTop<script src='Scripts/somescript.js'></script>$headBottom$foot";
    ?>
    

    您可以看到为什么要使用第二个选项。

    【讨论】:

      【解决方案5】:

      这对我有用。它动态加载标题、脚本和样式。

      header.php

      <?php
          if(!isset($scripts))
              $scripts = array();
      
          if(!isset($styles))
              $styles = array();
      ?>
      <!DOCTYPE html>
      <html>
          <head>
              <title><?php echo $title ?></title>
              <link rel="stylesheet" href="css/somestyle.css" type="text/css">
              <script src=somescript.js"></script>
      
              <!-- include styles -->
              <?php foreach($styles as $style): ?>
                  <link href="<?php echo $style; ?>" rel="stylesheet">
              <?php endforeach; ?>
      
              <!-- include scripts-->
              <?php foreach($scripts as $script): ?>
                  <script src="<?php echo $script; ?>"></script>
              <?php endforeach;?>
          </head>
          <body>
      

      index.php

      <?php
          $title = "some dynamic title";
          $scripts = array('js/somescript.js', 'http://server.com/anoterscript.js');
          $styles = array('css/somestyle.css', 'css/anotherstyle.css');
      
          require_once ('header.php');
      ?>
      
         <div class="content">
             <!-- some content-->
         </div>
      
      <?php require_once('footer.php'); ?>
      

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 1970-01-01
        • 2011-11-30
        • 1970-01-01
        • 2020-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多