2012-09-21 22 views
21

Necesito repetir mucho PHP y HTML.Cadena PHP multilínea con PHP

ya he intentado lo obvio, pero que no está funcionando:

<?php echo ' 
<?php if (has_post_thumbnail()) { ?> 
     <div class="gridly-image"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail('summary-image', array('class' => 'overlay', 'title'=> the_title('Read Article ',' now',false)));?></a> 
     </div> 
     <?php } ?> 

     <div class="date"> 
     <span class="day"> 
     <?php the_time('d') ?></span> 
     <div class="holder"> 
     <span class="month"> 
      <?php the_time('M') ?></span> 
     <span class="year"> 
      <?php the_time('Y') ?></span> 
     </div> 
    </div> 
    <?php } ?>'; 
?> 

¿Cómo puedo hacerlo?

+4

¿Está literalmente, tratando de hacerse eco de código PHP? –

+0

bien además de los problemas obvios con las comillas no guardadas también debe convertir todas las etiquetas < and > a su código html correspondiente < > – transilvlad

+1

La mayoría de las personas que hacen esta pregunta estarían buscando HEREDOC. Es posible que desee aceptar esa respuesta. – Archonic

Respuesta

20

No es necesario dar salida php tags:

<?php 
    if (has_post_thumbnail()) 
    { 
     echo '<div class="gridly-image"><a href="'. the_permalink() .'">'. the_post_thumbnail('summary-image', array('class' => 'overlay', 'title'=> the_title('Read Article ',' now',false))) .'</a></div>'; 
    } 

    echo '<div class="date"> 
       <span class="day">'. the_time('d') .'</span> 
       <div class="holder"> 
       <span class="month">'. the_time('M') .'</span> 
       <span class="year">'. the_time('Y') .'</span> 
       </div> 
      </div>'; 
?> 
+1

me queda bien - gracias – Matt

28

No puede ejecutar código PHP dentro de una cadena como esa. Simplemente no funciona. Además, cuando está "fuera" del código PHP (?>), cualquier texto que se encuentre fuera de los bloques PHP se considera salida de todos modos, por lo que no es necesario contar con la instrucción echo.

Si tiene que hacer de varias líneas de salida de un trozo de código PHP, considere el uso de un HEREDOC:

<?php 

$var = 'Howdy'; 

echo <<<EOL 
This is output 
And this is a new line 
blah blah blah and this following $var will actually say Howdy as well 

and now the output ends 
EOL; 
0

Los el conjunto interno de comillas simples en su código está matando a la cadena. Cada vez que pulses una sola comilla, termina la cadena y continúa el proceso. Querrá algo como:

$thisstring = 'this string is long \' in needs escaped single quotes or nothing will run'; 
15

Use Heredocs para dar salida a las cadenas muli-line que contienen variables. La sintaxis es ...

$string = <<<HEREDOC 
    string stuff here 
HEREDOC; 

La parte "heredoc" es como las comillas, y puede ser cualquier cosa que desee. La etiqueta final debe ser lo único en su línea, es decir, sin espacio en blanco antes o después, y debe terminar en dos puntos. Para más información check out the manual.

1

Para hacer eso, debe eliminar todos los caracteres ' en su cadena o usar un carácter de escape. Me gusta:

<?php 
    echo '<?php 
       echo \'hello world\'; 
      ?>'; 
?> 
0

Utilice la función show_source(); de PHP. Compruebe para más detalles en show_source. Este es un mejor método, supongo.

0

Otra opción sería utilizar el if con dos puntos y un endif en lugar de los corchetes:

<?php if (has_post_thumbnail()): ?> 
    <div class="gridly-image"> 
     <a href="<?php the_permalink(); ?>"> 
     <?php the_post_thumbnail('summary-image', array('class' => 'overlay', 'title'=> the_title('Read Article ',' now',false))); ?> 
     </a> 
    </div> 
<?php endif; ?> 

<div class="date"> 
    <span class="day"><?php the_time('d'); ?></span> 
    <div class="holder"> 
     <span class="month"><?php the_time('M'); ?></span> 
     <span class="year"><?php the_time('Y'); ?></span> 
    </div> 
</div>