Предположим, у меня есть следующий код:
<?php echo "<div id=\"root\">"; echo "<div id=\"child_of_root\">"; echo "<img src=\"picture1.png\">"; echo "<img src=\"picture2.png\">"; echo "<img src=\"picture3.png\">"; echo "<img src=\"picture4.png\">"; echo "<img src=\"picture5.png\">"; echo "</div>"; echo "</div>"; ?>
Если бы я запустил это, следующий HTML-код будет отображать все строки без каких-либо разрывов строк:
<div id="root"><div id="child_of_root"><img src="picture1.png"><img src="picture2.png"><img src="picture3.png"><img src="picture4.png"><img src="picture5.png"></div></div>
Если я запустил следующий код:
<?php echo "<div id=\"root\">\n"; echo "\t"."<div id=\"child_of_root\">\n"; echo "\t\t"."<img src=\"picture1.png\">"."\n"; echo "\t\t"."<img src=\"picture2.png\">"."\n"; echo "\t\t"."<img src=\"picture3.png\">"."\n"; echo "\t\t"."<img src=\"picture4.png\">"."\n"; echo "\t\t"."<img src=\"picture5.png\">"."\n"; echo "\t"."</div>"."\n"; echo "</div>"; ?>
Это рана делает следующий красивый HTML:
<div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div>
Есть ли способ, которым я мог бы достичь этих красивых отступов, не помещая \t
перед каждой строкой, я хочу отступать. Я имею в виду, что я могу отложить блок вместо одной строки.
Во-первых, это разметка HTML, поэтому не имеет значения, как она отформатирована, браузер делает все равно. Использование такого инструмента, как Firebug, может дать вам гораздо лучший способ навигации по HTML на ваших веб-страницах.
С другой стороны, вам не нужно постоянно использовать команды echo
для вывода HTML. PHP – это более или менее язык шаблонов, поэтому вы можете просто выйти из PHP, вывести свой HTML в свой собственный формат и затем повторно ввести PHP.
Например:
<?php // ... your code before this ... ?> <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> <?php // ... your code after this ... ?>
Если ваш результат требует некоторого уровня динамичности, вы всегда можете использовать PHP для добавления в циклы и еще много чего.
<?php // ... your code before this ... ?> <div id="root"> <div id="child_of_root"> <?php for ($x = 1; $x <= 5; $x++): ?> <img src="picture<?php echo $x; ?>.png"> <?php endfor; ?> </div> </div> <?php // ... your code after this ... ?>
Если вам все еще нужен форматированный HTML-код, возможно, для отображения образцов кода или чего-то еще, вам придется либо продолжить вручную, используя \n
и \t
, либо вы можете проверить расширение PHP Tidy , которое создано для форматирования HTML.
Прежде всего используйте:
echo '<img src="picture1.png">';
вместо
echo "<img src=\"picture1.png\">";
Код намного яснее.
Если вы хотите вернуть HTML-код в PHP, нет другого способа делать отступы.
Однако почему вы хотите печатать HTML-код в PHP? Вы не можете просто выйти из блока PHP здесь?
<?php // do something and exit PHP block ?> <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> <?php // do again something in PHP ?>
Я бы предложил использовать HEREDOC для этого. Лучше всего хранить большие блоки HTML и Text, которые вы хотите сохранить форматированием:
//Note that I used spaces and not tabs, but that's only due to the post editor. echo <<<HTML <div id="root"> <div id="child_of_root"> <img src="picture1.png"> <img src="picture2.png"> <img src="picture3.png"> <img src="picture4.png"> <img src="picture5.png"> </div> </div> HTML;
Вы также можете сделать
$variable = <<<OPENINGTAG text text text OPENINGTAG; echo $variable;
Переменные также будут анализироваться внутри строк HEREDOC. Просто будьте осторожны с конечным тегом, это очень темпераментно. Нет пробелов до или после на линии. Я даже не знаю, разрешены ли комментарии.
Здесь он использует пример Доминика Барнса с циклом:
<?php echo <<<HTML <div id="root"> <div id="child_of_root"> HTML; for ($x = 1; $x <= 5; $x++) { echo <<<HTML <img src="picture$x.png"> HTML; } echo <<<HTML </div> </div> HTML; ?>
может также сделать:
<?php $output = <<<HTML <div id="root"> <div id="child_of_root"> HTML; for ($x = 1; $x <= 5; $x++) { $output .= <<<HTML <img src="picture$x.png"> HTML; } $output .= <<<HTML </div> </div> HTML; echo $output; ?>
NOWDOC также доступен в 5.3+, которые действуют как одинарные кавычки без переменного разбора.
Строки HEREDOC и NOWDOC могут быть объединены так же, как и обычные строки.
Если вы помещаете свои идентификаторы изображения в массив, вы можете сделать цикл foreach (), который перекликается с каждым изображением с новой строкой и символами табуляции спереди, без необходимости ее кодирования вручную. Например
echo '<div id="root">\n'; echo '\t<div id="child_of_root">\n'; $images = array('picture1', 'picture2', 'picture3', 'picture4', 'picture5'); foreach ($images as $image) { echo '\t\t<img src="'.$image.'.png">\n'; } echo '\t</div>\n'; echo '</div>';
Я попробовал Tidy, но по какой-то причине, независимо от того, как я его настраиваю, он не будет отступать. Однако кто-то еще написал код, который будет:
Функция PHP для очистки кода HTML и JavaSctipt
Существуют также некоторые разумные рекомендации по устранению необходимости в таком коде:
Получите красиво отступы HTML с вашими шаблонами PHP: два правила, которым нужно следовать
Также: fredsco.com/programming/indenting-html-output-in-php
Вот пример, который работал для меня:
<?php echo ' <div style="margin-left: 100px"> <div id="root"> <div id="child_of_root"> <img src="picture1.png" /><br /> <img src="picture2.png" /><br /> <img src="picture3.png" /><br /> <img src="picture4.png" /><br /> </div> </div> </div> '; ?>