2010-04-20 20 views
38

Soy nuevo en PHP y no puedo entender cuáles son las reglas para usar la función de eco. Por ejemplo, si necesito repetir un gran bloque de css/js, ¿necesito agregar eco a cada línea de texto o hay una forma de repetir un gran bloque de código con un solo eco?PHP Echo un gran bloque de texto

Cuando intento hacer eco de un gran bloque de código como éste, me sale un error:

if (is_single()) { 
echo '<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{ 
width:150px !important; 
} 
.form-label-left{ 
width:150px !important; 
} 
.form-line{ 
padding:10px; 
} 
.form-label-right{ 
width:150px !important; 
} 
body, html{ 
margin:0; 
padding:0; 
background:false; 
} 

.form-all{ 
margin:0px auto; 
padding-top:20px; 
width:650px !important; 
color:Black; 
font-family:Verdana; 
font-size:12px; 
} 
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){ 
$('input_6').hint('ex: [email protected]'); 
}); 
</script>'; 
}else { 

} 

¿Hay una mejor manera de hacer eco de grandes bloques de código sin mucho trabajo (la adición de eco para cada línea, por ejemplo)?

Respuesta

60

Una opción es salir del bloque php y simplemente escribir HTML.

con su código, después de la llave de apertura de la sentencia if, poner fin a la PHP:

if (is_single()) { ?> 

luego retire la echo ' y la ';

Después de todo el HTML y CSS, antes del cierre }, escribe:

<? } else { 

Si el texto que desea escribir en la página es dinámica, se pone un poco más difícil, pero por ahora esto debería funcionar bien.

+6

-1 Esto hace que el código sea difícil de leer y propenso a errores, y definitivamente debe ser evitado. La sintaxis Heredoc, tal como lo menciona @nickf, es el camino a seguir. –

+2

Pero es una solución posible, entonces ¿por qué -1? – Black

+0

Solo porque es una solución posible, no significa que sea una recomendada. @EdwardBlack –

18

Echa un vistazo heredoc. Ejemplo:

echo <<<EOD 
Example of string 
spanning multiple lines 
using heredoc syntax. 
EOD; 

echo <<<"FOOBAR" 
Hello World! 
FOOBAR; 

El es también nowdoc pero no análisis se realiza en el interior del bloque.

echo <<<'EOD' 
Example of string 
spanning multiple lines 
using nowdoc syntax. 
EOD; 
123

Heredoc syntax puede ser muy útil:

// start the string with 3 <'s and then a word 
// it doesn't have to be any particular string or length 
// but it's common to make it in all caps. 
echo <<< EOT 
    in here is your string 
    it has the same variable substitution rules 
    as a double quoted string. 
    when you end it, put the indicator word at the 
    start of the line (no spaces before it) 
    and put a semicolon after it 
EOT; 
+6

No soy un fan de la sintaxis heredoc, pero te dan un 1 porque eres el primero de ellos para ilustrar lo que en realidad es la sintaxis heredoc aquí, por lo que es una respuesta útil. – thomasrutter

+0

@thomasrutter - Yo tampoco soy un gran fan de ella: muchos entornos de desarrollo no se ocupan de bien, y tampoco se mete hasta su hendidura código o se obtiene una cadena con un montón de espacio en blanco inútiles. – nickf

+0

puntos a tener en cuenta: si utiliza Eclipse (con PDT) para desarrollar PHP, encontrará que heredoc tiene resaltado de código incorrecto. – Raptor

5

texto Haciendo eco que contiene saltos de línea está bien, y no hay límite en la cantidad de texto o líneas que pueden hacer eco a la vez (a excepción de la memoria disponible).

El error en el código se debe a las comillas simples sin guardar que aparecen en la cadena.

Ver esta línea:

$('input_6').hint('ex: [email protected]'); 

Se necesitaría para escapar de esas comillas simples en una cadena PHP si se trata de una sola línea o no.

Hay otra buena manera de hacer eco de las grandes cadenas, sin embargo, y eso es para cerrar el bloque de PHP y abrirlo de nuevo más tarde:

if (is_single()) { 
    ?> 
<link type="text/css" rel="stylesheet" href="http://jotform.com/css/styles/form.css"/><style type="text/css"> 
.form-label{ 
width:150px !important; 
} 
.form-label-left{ 
width:150px !important; 
} 
.form-line{ 
padding:10px; 
} 
.form-label-right{ 
width:150px !important; 
} 
body, html{ 
margin:0; 
padding:0; 
background:false; 
} 

.form-all{ 
margin:0px auto; 
padding-top:20px; 
width:650px !important; 
color:Black; 
font-family:Verdana; 
font-size:12px; 
} 
</style> 

<link href="http://jotform.com/css/calendarview.css" rel="stylesheet" type="text/css" /> 
<script src="http://jotform.com/js/prototype.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/protoplus-ui.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/jotform.js?v3" type="text/javascript"></script> 
<script src="http://jotform.com/js/location.js" type="text/javascript"></script> 
<script src="http://jotform.com/js/calendarview.js" type="text/javascript"></script> 
<script type="text/javascript"> 

JotForm.init(function(){ 
$('input_6').hint('ex: [email protected]'); 
}); 
</script> 
    <?php 
}else { 

} 

U otra alternativa, que es probablemente mejor para facilitar la lectura, es poner todo ese HTML estático en otra página e incluirlo().

+0

Acabo de aprender qué hacen los "PHP Pros", pero en lo que respecta a las aplicaciones HTML, parece que usar include sería el camino a seguir. –

5

Su problema es causado por:

$('input_6').hint('ex: [email protected]'); 

Es necesario para escapar de las comillas simples para ser \'

Sin embargo: El uso de un Heredoc es una idea mucho mejor, ya que será mucho limpiador en general.

+0

uh oh, ¿quieres probar sobre un heroec? y ¿qué hay de las plantillas? ¿Y qué hay de resaltado de sintaxis? ¿Eres fanático de editar HTML enorme no como HTML sino como una cadena PHP de un solo color? –

+1

Prefiero las plantillas (Smarty), pero en este caso eso parecería un poco demasiado elaborado para su pregunta. Soy un fan de usar Heredoc sobre una declaración masiva de 'eco'. Tu solución también es buena también, pero no me permite poner variables en el texto (fácilmente). Tendría que hacer '' Que puede ser molesto. –

+0

"que puede ser molesto" ¡Dios mío, abre los ojos! cada marco actual lo usa para plantillas, en lugar de monstruoso e inútil smarty –

6

hombre, PHP no está perl!
PHP solo puede escapar de HTML :) http://www.php.net/manual/en/language.basic-syntax.phpmode.php

if (is_single()) { 
//now we just close PHP tag 
?> 
</style> 
<script> 
<blah blah blah> 
<?php 
//open it back. here is your PHP again. easy! 
} 
?> 

Me pregunto por qué muchas personas tales pegados a heredoc fea.

+2

Heredoc no es * que * feo, y es útil si desea crear una cadena y/o interpolar muchas variables. De lo contrario, el escape de PHP es una solución mucho más limpia. Pero creo que me alegro de que Perl no pueda hacer eso. – Duncan

+1

@Dancan time para aprender plantillas :) –

+1

Oh, sí ... pero el código de Perl que he estado manteniendo es suficiente de una pesadilla sin que se mezcle con HTML. Especialmente dado que HTML probablemente compilaría en Perl :) – Duncan

2

Para ampliar la respuesta de @ hookedonwinter, aquí está un suplente (limpiador, en mi opinión) sintaxis:

<?php if (is_single()): ?> 
    <p>This will be shown if "is_single()" is true.</p> 
<?php else: ?> 
    <p>This will be shown otherwise.</p> 
<?php endif; ?> 
0

prefiero concatenar varias cadenas juntas. Esto funciona bien para echo AND para variables. También algunos IDEs autoinicializan nuevas líneas si presiona intro. Esta sintaxis también genera una salida pequeña porque hay mucho menos espacios en blanco en las cadenas.

echo '' 
    .'one {' 
    .' color: red;' 
    .'}' 
    ; 

$foo = '' 
    .'<h1>' . $bar . '</h1>' // insert value of bar 
    .$bar      // insert value of bar again 
    ."<p>$bar</p>"   // and again 
    ."<p>You can also use Double-Quoted \t Strings for single lines. \n To use Escape Sequences.</p>" 
    // also you can insert comments in middle, which aren't in the string. 
    .'<p>Or to insert Escape Sequences in middle '."\n".' of a string</p>' 
    ; 

Normalmente empiezo con una cadena vacía y luego anexar poco a poco a ella:

$foo = ''; 

$foo .= 'function sayHello()' 
    .' alert("Hello");' 
    ."}\n"; 

$foo .= 'function sum(a , b)' 
    .'{' 
    .' return a + b ;' 
    ."}\n"; 

(por favor dejar de Mensajes como ¿Por qué no "uh Usted responde a un cinco jears vieja cuestión.". "Hay mucha gente buscando una respuesta. ¿Y qué hay de malo en usar ideas de cinco años? Si no encuentran" su "solución, abrirían una nueva pregunta. Entonces las primeras cinco respuestas son solo" use la función de búsqueda antes ". pides!" Así te doy otra solución para resolver este tipo de problemas.)

+0

¿Ha establecido esa sangría en su IDE (para establecer una cadena multilínea alineada con cada parte)? –

0
$num = 5; 
$location = 'tree'; 

$format = 'There are %d monkeys in the %s'; 
echo sprintf($format, $num, $location); 
1

Sólo salir a donde necesita.

<html> 
(html code) 
<?php 
(php code) 
?> 
(html code) 
</html> 

No utilice en forma abreviada.<? entra en conflicto con XML y está deshabilitado de forma predeterminada en la mayoría de los servidores.

-1

se puede lograr mediante la impresión de que su cadena como:

<?php $string ='here is your string.'; print_r($string); ?> 
Cuestiones relacionadas