¿Cómo puedo hacer eco de HTML en PHP?
Pregunta
Quiero generar HTML condicionalmente para generar una página, entonces, ¿cuál es la forma más fácil de reproducir fragmentos multilínea de HTML en PHP 4+?¿Necesitaría utilizar un marco de plantilla como Smarty?
echo '<html>', "\n"; // I'm sure there's a better way!
echo '<head>', "\n";
echo '</head>', "\n";
echo '<body>', "\n";
echo '</body>', "\n";
echo '</html>', "\n";
Solución
Hay algunas formas de hacer eco de HTML en PHP.
1.Entre etiquetas PHP
<?php if(condition){ ?>
<!-- HTML here -->
<?php } ?>
2.en un eco
if(condition){
echo "HTML here";
}
Con ecos, si desea utilizar comillas dobles en su HTML, debe utilizar ecos de comillas simples como este:
echo '<input type="text">';
O puedes escapar de ellos así:
echo "<input type=\"text\">";
3.Heredocs
4.Nowdocs (a partir de PHP 5.3.0)
Motores de plantillas se utilizan para usar PHP en documentos que contienen principalmente HTML.De hecho, el propósito original de PHP era ser un lenguaje de plantillas.Es por eso que con PHP puedes usar cosas como etiquetas cortas para hacer eco de variables (p. ej. <?=$someVariable?>
).
Hay otros motores de plantillas (como Smarty, Twig, etc.) que hacen que la sintaxis sea aún más concisa (p. ej. {{someVariable}}
).
El principal beneficio de utilizar un motor de plantillas es mantener el diseño (Lógica de presentación) separado de la codificación (Lógica de negocios).También hace que el código sea más limpio y más fácil de mantener a largo plazo.
Si tienes más preguntas no dudes en dejar un comentario.Más información está disponible sobre estas cosas en el Documentación PHP.
¡Dios los bendiga!
NOTA: Etiquetas cortas PHP <?
y ?>
no se recomiendan porque solo están disponibles si se habilitan con short_open_tag
directiva del archivo de configuración php.ini, o si PHP se configuró con la --enable-short-tags
opción. Están disponibles, independientemente de la configuración desde 5.4 en adelante..
Otros consejos
tratar de esta manera:
$variable = <<<XYZ
<html>
<body>
</body>
</html>
XYZ;
echo $variable;
Se puede usar la sintaxis sintaxis alternativa alternativa para las estructuras de control y salir de php:
<?php if ($something): ?>
<some /> <tags /> <etc />
<?=$shortButControversialWayOfPrintingAVariable ?>
<?php /* A comment not visible in the HTML but is a bit of a pain to write */ ?>
<?php else: ?>
<!-- else -->
<?php endif; ?>
Básicamente se puede poner en cualquier lugar fuera de HTML etiquetas PHP. También es muy beneficioso para hacer todo el procesamiento de datos necesario antes de indicar cualquier información, con el fin de la lógica y la presentación por separado.
La propia pantalla de datos podría estar en el fondo del mismo archivo PHP o que podría incluir un archivo PHP separada que consiste en su mayoría HTML.
Yo prefiero este estilo compacto:
<?php
/* do your processing here */
?>
<html>
<head>
<title><?=$title?></title>
</head>
<body>
<?php foreach ( $something as $item ) : ?>
<p><?=$item?></p>
<?php endforeach; ?>
</body>
</html>
Nota: puede que tenga que utilizar <?php echo $var; ?>
en lugar de <?=$var?>
dependiendo de su configuración de PHP
Soy parcial a este estilo:
<html>
<head>
<% if (X)
{
%> <title>Definitely X</title>
<% }
else
{
%> <title>Totally not X</title>
<% }
%> </head>
</html>
hago uso de etiquetas ASP, sí. La combinación de PHP y HTML se ve super legible a mis ojos. El truco está en conseguir el <%
y marcadores %>
justo.
Otro enfoque se pone el código HTML en un archivo separado y marque el área a cambiar con un marcador de posición [[Contenido]] en este caso. (También se puede utilizar en lugar de la sprintf str_replace.)
$page = 'hello world';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]',$content,$page);
echo($pagecontent);
Como alternativa, puede simplemente salida de todas las cosas php a la pantalla capturada en un buffer, y luego escribir el código HTML, a continuación, poner la salida php de nuevo en la página.
Puede parecer extraño para escribir el php a cabo, atraparlo, a continuación, escribir de nuevo, pero sí significa que usted puede hacer todo tipo de formato a la materia (la sintaxis heredoc etc), y probar emite correctamente sin la molestia de la página plantilla en el camino. (CMS Joomla hace de esta manera, por cierto) es decir:
<?php
ob_start();
echo('hello world');
$php_output = ob_get_contents();
ob_end_clean();
?>
<h1> My Template page says </h1>
<?php
echo($php_output );
?>
<hr>
template footer
Trate Esto puede ayudarle a .......
<?php
echo <<<HTML
your html tags here
HTML;
?>
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';
echo( 'Echo as HTML' . htmlspecialchars( (string)$enter_string ) );
Además de la respuesta de Chris B, si es necesario utilizar echo
todos modos, todavía quieren que sea sencillo y estructurado y no quiere hacer spam con el código de <?php stuff; ?>
, puede utilizar la sintaxis siguiente.
Por ejemplo, usted desea mostrar las imágenes de una galería:
foreach($images as $image)
{
echo
'<li>',
'<a href="', site_url(), 'images/', $image['name'], '">',
'<img ',
'class="image" ',
'title="', $image['title'], '" ',
'src="', site_url(), 'images/thumbs/', $image['filename'], '" ',
'alt="', $image['description'], '"',
'>',
'</a>',
'</li>';
}
Echo tiene múltiples parámetros por lo que con buena sangría se ve bastante bien. También usando echo
con parámetros es más eficaz que la concatenación.
No echo fuera HTML
Si desea utilizar
<?php echo "<h1> $title; </h1>"; ?>
que debería estar haciendo esto:
<h1><?= $title;?></h1>
Sólo tiene que utilizar Imprimir Función de hacerse eco de texto en el archivo PHP de la siguiente manera
<?php
print('
<div class="wrap">
<span class="textClass">TESTING</span>
</div>
')
?>
echo '
<html>
<body>
</body>
</html>
';
o
echo "<html>\n<body>\n</body>\n</html>\n";
Así es como lo hago:
<?php if($contition == true){ ?>
<input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
<p>No input here </p>
<?php } ?>