2012-04-03 7 views
0
例えば

...生成するHTMLを自動的にフォーマットするようにPHPを設定できますか?

このPHPコード

<?php 
echo '<html>'; 
echo '<body>'; 
echo '<h1>Header One</h1>'; 
echo '<p>Hello World!</p>'; 
echo '</body>'; 
echo '</html>'; 
?> 

このHTMLマークアップ

<html><body><h1>Header One</h1><p>Hello World!</p></body></html> 

はPHPが自動的にいくつかの簡単な書式設定(改行を適用させるために、任意の関数、ライブラリや設定オプションが用意されて生成します&インデント)出力で生成されたhtmlタグのネストに基づいていますか?代わりに、このようなものが生成されるように...

<html> 
     <body> 
      <h1>Header One</h1> 
      <p>Hello World!</p> 
     </body> 
</html> 
+3

[PHPのTidy](http://php.net/manual/en/book.tidy.php)これを行います。 –

+2

なぜあなたはHTMLマークアップをエコーし​​ていますか?あなたは単にPHPタグの外にそれを入力することができます – xbonez

+0

または、HEREDOCを使用し、各行をエコーするのではなく自分でフォーマットしてください... –

答えて

0

あなたはこの(私の好み)を行うことができます:

<html> 
     <body> 
      <h1>Header One</h1> 
      <p>Hello World!</p> 
      <?php echo '<p>Hello Hello!</p>'; ?> 
     </body> 
</html> 

か:

<?php 

$html = '<html><body><h1>Header One</h1><p>Hello World!</p></body></html>'; 

$tidy = new tidy(); 
$tidy->parseString($html, array('indent'=> true,'output-xhtml'=> true), 'utf8'); 
$tidy->cleanRepair(); 

echo $tidy; 

?>"; 

...印刷する:

<html> 
     <body> 
      <h1>Header One</h1> 
      <p>Hello World!</p> 
     </body> 
</html> 
+0

PHPを使って私に仕事をさせる方法があるのか​​どうか不思議です。私は手動で書式を追加し、PHPに侵入することができます。 – Corey

+0

はい。更新されます。 – iambriansreed

+0

@Corey最後の例は 'tidy'を使います。これはxhtmlをあなたのために元の要求としてフォーマットします。続きを読む:http://www.php.net/manual/en/tidy.examples.basic.php – iambriansreed

1

あなたはそれをエコーすることなく、あなたのPHPスクリプトでHTMLを置くことができます。 smartyのようなPHPテンプレートエンジンを探して、ビューをロジックから分離することもできます。

0

...それとも、あなたが自分で生成を設定することができます "< < <" 演算子を使用することができます。

<?php 

echo <<<DATA 
<html> 
     <body> 
      <h1>Header One</h1> 
      <p>Hello World!</p> 
     </body> 
</html> 
DATA; 
+0

これで何も間違っ回答。実際、私は自分のコードでこのテクニックを使用しています。なぜなら、HTMLを印刷したいときに考えるべきことと、コード全体に散らばった小さな断片の代わりにブロックで印刷することです。 – jnylen

1

heredoc stringsを使用して、HTMLを自分で書式設定/インデントすることをお勧めします。 PHPコード内でHTML文字列を混ぜると、コードを読みにくく、維持できなくなることがあります。この方法のいくつかの利点:

  • 引用符をエスケープする必要はありません。
  • heredoc文字列の中に変数を入れることができます。
  • ループするコードを操作する場合でも、HTMLをheredoc文字列の中に出力することができます。これらの文字列が他のHTMLブロックに対して適切にインデントされていれば、インデントの良いHTMLコードを取得できます。
  • これは、HTMLを印刷したいときに考えて、コード全体に散らばった小さな断片ではなく、ブロック単位で印刷するように強制します。

テンプレートエンジンを使用している場合でも、すべてのHTMLの前にすべてのコードを置いている場合でも、できるだけPHPコードをHTMLから分離する方がよいでしょう。しかし、PHPとHTMLを混在させるのが最も簡単な時があります。

<?php 
$text = 'Hello World!'; 
echo <<<HTML 
<html> 
    <body> 
     <h1>Header One, with some '"quotes"'</h1> 
     <p>$text</p> 
    </body> 
</html> 

HTML; 
?> 
+0

Downvoter:コメントしますか? – jnylen

+0

有効なコード+1;) –

+0

PHPを使って私に仕事をさせる方法があるのか​​不思議です。私は手動で書式を追加し、PHPに侵入することができます。 – Corey

3

あなたはSmartySavantPHP SugarまたはVLibのようなテンプレートエンジンを試みることができる:

は、ここでの例です。

また、output handling(私はハックだと思う)と戦うこともできます。ob_start('ob_tidyhandler');

+0

+1実際に質問に答えるためではなく、暴言に行くより:) – jnylen

+0

素敵な素敵な。 'ob_tidyhandler'は私にとって新しいものです。ニース! – iambriansreed

1

私は右のあなたの質問を理解していれば、あなたはHTML出力をかなり-印刷したいです。

これは、PHPスクリプトの出力を後処理することで実行できます。どちらかtidy extension­Docsと組み合わせるPHPの出力処理機能を使用して:

ob_start('ob_tidyhandler'); 

Tidyの

は、HTMLコードをクリーンアップなどのインデントを変更するには特殊な拡張子は..ですしかし、それは唯一の方法ではありません。

もう1つの方法は、後処理タスクをWebサーバーに委任することです。 output filters in Apache HTTP Server­Docs

+0

あなたはTidyを拡張できますか?そのコード行は唯一必要なことですか、それともそれ以上にありますか? – Corey

+0

その1行のコードは、出力処理コールバックを初期化しています。 ['' ob_tidyhandler'](http://php.net/ob_tidyhandler)と['' ob_start'](http://php.net/ob_start)を参照してください。頭の中からきちんとしたハンドラオプションを設定する方法がわからない。独自のハンドラを作成し、バッファを整えてバッファを処理することもできます。 – hakre

0

以下のコードはPHPでHTMLを生成するために便利に見える場合は、このライブラリを試してみてください https://github.com/raftalks/Form

Html::make('div', function($html)) 
{ 
    $html->table(function($table) 
    { 
     $table->thead(function($table) 
     { 
      $table->tr(function($tr) 
      { 
       $tr->th('item'); 
       $tr->th('category'); 
      }); 
     }); 


     $table->tr(function($tr) 
     { 
      $tr->td()->ng_bind('item.name','ng-bind'); 
      $tr->td()->ng_bind('item.category','ng-bind'); 

      $tr->setNgRepeat('item in list','ng-repeat'); //using second parameter to force the attribute name. 
     }); 

     $table->setClass('table'); 
    }); 

    $html->setClass('tableContainer'); 
}); 
関連する問題