Corey
Corey

Reputation: 826

Can I configure PHP to automatically format the HTML it generates?

For example…

This PHP code

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

Generates this HTML markup

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

Are there any functions, libraries or configuration options to make PHP automatically apply some simple formatting (line breaks & indentation) based on the nesting of html tags generated in the output? So that instead something like this would be generated…

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

Upvotes: 0

Views: 1104

Answers (7)

mukama
mukama

Reputation: 979

You could try templating engines like Smarty, Savant, PHP Sugar or VLib.

Or you could go commando with output handling (which I think is a hack). ob_start('ob_tidyhandler');

For the output handling, Tidy might not be installed or enabled, typically the package you will need to install is named php-tidy and you will need to uncomment extension=tidy in your php.ini

Upvotes: 3

Raftalks
Raftalks

Reputation: 2037

If the below code looks useful to generate html with php, try this library 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');
});

Upvotes: 0

hakre
hakre

Reputation: 197767

If I understand your question right, you want to pretty-print the HTML output.

This can be done by post-processing the output of your PHP script. Either by using PHP's output handling feature combined with the tidy extension­Docs:

ob_start('ob_tidyhandler');

Tidy is an extension specialized on cleaning up HTML code, changing indentation etc.. But it's not the only way.

Another alternative is to delegate the post-processing task to the webserver, e.g. output filters in Apache HTTP Server­Docs.

Upvotes: 1

iambriansreed
iambriansreed

Reputation: 22241

You could do this (my preference):

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

Or:

<?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;

?>";

...would print:

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

Upvotes: 0

We Are All Monica
We Are All Monica

Reputation: 13334

I prefer to use heredoc strings and format/indent the HTML myself. Mixing HTML strings inside PHP code quickly leads to unreadable, unmaintainable code. Some advantages of this method:

  • Quotes don't need to be escaped.
  • You can put variables inside the heredoc strings.
  • Even when working with code that loops, you can output the HTML inside heredoc strings. If these strings are indented properly relative to your other blocks of HTML, you will still get HTML code that has good indentation.
  • It forces you to think about when you want to print HTML, and to print it in blocks instead of lots of little pieces sprinkled throughout your code (very hard to read and maintain).

It's better to separate the PHP code from the HTML as much as you can, whether this means using a templating engine or just putting all of the code before all of the HTML. However, there are still times when it's easiest to mix PHP and HTML.

Here's an example:

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

HTML;
?>

Upvotes: 1

Alexander Blacks
Alexander Blacks

Reputation: 61

...Or you can use the "<<<" operator where you can set formation by yourself:

<?php

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

Upvotes: 0

huysentruitw
huysentruitw

Reputation: 28111

You can put html in your PHP script without having to echo it. You also might want to look for a PHP template engine like smarty, so you can separate the view from logic.

Upvotes: 1

Related Questions