2016-10-14 18 views
0

私はコンテンツを配信するためにテンプレートベースのシステムを作ろうとしていますが、私は解決できないような問題に遭遇しました。インクルードからのデータを持つ変数をエコーアウトしようとすると、HTMLの間違ったセクションに出力されます。PHPがHTMLの間違った場所にエコーする

以下は、ブラウザ上で実行されるマイページである 'newstuff.php'です。違反する変数は、$php $head $contentです。

<?php 

$php = include "templates/content/newstuff/phpCode.php"; 
$head = include "templates/content/newstuff/head.html"; 
$content = include "templates/content/newstuff/content.php"; 

include realpath(dirname(__FILE__)).'/templates/templateMain.php'; 
?> 

以下は「tempalteMain.php」です。これは私のtempalteです。エコーの場所は$php $head $contentであることに注意してください。以下

<?php 
echo $php; 
?> 


<!DOCTYPE html> 
<html> 

    <head> 
     <?php echo $head; ?> 
    </head> 

    <body class="body1" onload="inputBlur2()"> 
     <div class="borderLine"></div> 
     <div class="banner"></div> 

     <div class="mainContent1" > 

      <div class="header1" > 

       <div class="headerContainer" > 

        <ul class="navList1"> 
         <li><a id = "B0" href="index.php">New Stuff</a></li> 
         <li><a id = "B1" href="MainPage.php">Products</a></li> 
         <li><a id = "B2" href="ProjectsPage.php">Projects</a></li> 
         <li><a id = "B3" href="AOrdering.php">About Ordering</a></li> 
         <li><a id = "B4" href="ContactMe.php">Contact Us</a></li> 
         <li><a id = "B5" href="FAQPage.php">FAQ</a></li> 
         <li><a id = "B6" href="SCart.php">My Cart</a></li> 
        </ul> 
       </div> 
      </div> 

      <div class="content1"> 
       <?php echo $content; ?> 
      </div> 

     </div> 
    </body> 
</html> 

この$head PHP変数によって送達されるコードを提供「head.html」です。以下

<meta charset="UTF-8"> 
<link rel="stylesheet" type="text/css" href="/../StylePR.css"> 
<title>KickUp Electronics</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 

この$content PHP変数によって送達されるコードを提供「content.php」です。

<p>Welcome to the new stuff page!!!</p> 

最後に、これはchrome DOMエディタから出力されるページソースです。 content.phpからの情報の場所が間違っていて、奇妙な '1'がエコーアウトされていることに注意してください(また、ページソースを見ると、head.htmlの情報はhtmlタグの外に置かれます)。

<!DOCTYPE html> 
    <html> 
<head><meta charset="UTF-8"> 
     <link rel="stylesheet" type="text/css" href="/../StylePR.css"> 
     <title>KickUp Electronics</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
</head> 
<body class="body1" onload="inputBlur2()"> 
<p>Welcome to the new stuff page!!!</p> <!--Wrong Location!--> 
1 





     1 



     <div class="borderLine"></div> 
     <div class="banner"></div> 

     <div class="mainContent1"> 

      <div class="header1"> 

       <div class="headerContainer"> 

        <ul class="navList1"> 
         <li><a id="B0" href="index.php">New Stuff</a></li> 
         <li><a id="B1" href="MainPage.php">Products</a></li> 
         <li><a id="B2" href="ProjectsPage.php">Projects</a></li> 
         <li><a id="B3" href="AOrdering.php">About Ordering</a></li> 
         <li><a id="B4" href="ContactMe.php">Contact Us</a></li> 
         <li><a id="B5" href="FAQPage.php">FAQ</a></li> 
         <li><a id="B6" href="SCart.php">My Cart</a></li> 
        </ul> 
       </div> 
      </div> 

      <div class="content1"> 
       1   </div> 


     </div> 

</body></html> 

無駄な解決策を何度も試してみました。これは、HTMLが完全に読み込まれる前にエコーが実行されているという問題ですか?どんな助けも高く評価されるでしょう!

+0

これは機能しません。あなたが考える方法で。 $ php = include "templates/content/newstuff/phpCode.php"; すぐにインクルードするだけです。 TBO私はPHPのための適切なテンプレートエンジンを見ています - 小枝は本当に良いと簡単に開始することです。 –

+0

ファイルを保存する場所に含めます。 'include'は、ファイルの内容ではなく真/偽を返します。 – aynber

+0

@リチャード・ハウスハムは、おなじみの小枝に言いましたが、私はそれを試してみましたが、PHPコードを含めることができませんでした:( – DiscreteTomatoes

答えて

2

あなたは間違っています。

$php = include "templates/content/newstuff/phpCode.php"; 

(すなわち、 "それは働いた!")すぐは、そのファイルの出力を出力し、1$phpを設定することです。

処理の戻り値:インクルード時にFALSEが返され、警告が表示されます。成功すると、インクルードされたファイルによって上書きされない限り、1が返されます。 - http://php.net/manual/en/function.include.php

あなたは出力をキャプチャするためにoutput bufferingを使用することができますが、よりよい解決策は、おそらくtemplateMain.phpに直接include呼び出しを移動しています。

+1

サイドノート:Laravelのような適切なフレームワークを考えてみましょう。テンプレートエンジンは、このようなものをベストプラクティスの方法で処理します。 – ceejayoz

+0

情報をいただきありがとうございます。変数をファイルのパスに設定してから、templateMain.phpの変数にエコーされる代わりにインクルードされています – DiscreteTomatoes

関連する問題