2009-02-09 16 views
48

Tengo una función de PHP que estoy usando para generar un bloque estándar de HTML. Actualmente se ve así:¿Hay alguna forma de devolver HTML en una función de PHP? (sin construir el valor de retorno como una cadena)

<?php function TestBlockHTML ($replStr) { ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php } ?> 

Quiero devolver (en lugar de repetir) el código HTML dentro de la función. ¿Hay alguna manera de hacer esto sin construir el HTML (arriba) en una cadena?

Respuesta

71

Se puede utilizar un heredoc, que apoya la interpolación de variables, dándole un aspecto bastante ordenada:

function TestBlockHTML ($replStr) { 
return <<<HTML 
    <html> 
    <body><h1>{$replStr}</h1> 
    </body> 
    </html> 
HTML; 
} 

Sin embargo, preste mucha atención a la advertencia en el manual: la línea de cierre no debe contener espacios en blanco, por lo que no puede sangrarse.

+2

También el identificador <<< HTML heredoc no debe estar sangrado, es decir, si no tiene algo como "devolver" delante de él. –

+10

puede sangrar tanto como quiera, pero debe tener una línea nueva justo después del identificador. –

+0

Puede evitar los frenos si el var es no en una matriz:

$ replStr

o

{$ array [ 'var]}

WalterV

54

Sí, se encuentra: usted puede capturar el texto echo ed usando ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php 
    return ob_get_clean(); 
} ?> 
+0

palabras Exactamente, esta sintaxis manera se destaca y clave están coloreadas como si fueran HTML normales, aparte de estar contenido en una cadena. Definitivamente una mejor respuesta para el mantenimiento, que siempre debe ser lo primero –

+0

¿Por qué usaría el buffer de salida cuando esto parece funcionar bien? ' \t

\t

ipsum de dolar

' – Joren

+1

@Joren Porque eso es explícitamente lo que el OP no quiere. –

5

Crea un archivo de plantilla y utiliza un motor de plantillas para leer/actualizar el archivo. Aumentará la capacidad de mantenimiento de su código en el futuro, así como la visualización separada de la lógica.

Un ejemplo utilizando Smarty:

archivo de plantilla

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>{$title}</title></head> 
<body>{$string}</body> 
</html> 

Código

function TestBlockHTML(){ 
    $smarty = new Smarty(); 
    $smarty->assign('title', 'My Title'); 
    $smarty->assign('string', $replStr); 
    return $smarty->render('template.tpl'); 
} 
14

Esto puede ser una solución incompleta, y te agradecería que nadie señalando si esta es una mala idea, ya que no es un uso estándar de las funciones. He tenido algo de éxito conseguir HTML de una función PHP sin necesidad de construir el valor de retorno como una cadena con lo siguiente:

function noStrings() { 
    echo ''?> 
     <div>[Whatever HTML you want]</div> 
    <?php; 
} 

El justo 'Llamada' la función:

noStrings(); 

Y lo hará salida:

<div>[Whatever HTML you want]</div> 

Usando este método, también puede definir las variables de PHP dentro de la función y el eco a cabo dentro del HTML.

+0

/mindblown se puede explicar por qué esto funciona cuando todo lo demás fallaba? –

+2

esto funciona bien sin 'echo', solo'?> Html vladkras

2

Otra manera de hacerlo es es utilizar file_get_contents() y tienen una página de la plantilla HTML

página de la plantilla

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>$title</title></head> 
<body>$content</body> 
</html> 

de funciones PHP

function YOURFUNCTIONNAME($url){ 

$html_string = file_get_contents($url); 
return $html_string; 

} 
Cuestiones relacionadas