web-dev-qa-db-fra.com

PHP chaîne multiligne avec PHP

J'ai besoin de faire écho à beaucoup de PHP et HTML.

J'ai déjà essayé l'évidence, mais ça ne marche pas:

<?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 }  ?>';
?>

Comment puis-je le faire?

27
Matt

Vous n'avez pas besoin de générer les balises php:

<?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>';
?>
32
Josh

Vous ne pouvez pas exécuter de code PHP dans une chaîne telle que celle-ci. Ça ne marche pas. De même, lorsque vous êtes "sorti" du code PHP (?>), tout texte en dehors des blocs PHP est considéré comme une sortie, de sorte que l'instruction echo n'est pas nécessaire.

Si vous avez besoin d'effectuer une sortie multiligne avec un bloc de code PHP, utilisez 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;
33
Marc B

Utilisez Heredocs pour générer des chaînes multi-lignes contenant des variables. La syntaxe est ...

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

La partie "HEREDOC" est comme les guillemets et peut être ce que vous voulez. La balise de fin doit être la seule chose sur sa ligne, c’est-à-dire aucun espace avant ou après, et doit se terminer par deux points Pour plus d'informations consultez le manuel .

16
noel

Utilisez la fonction show_source(); de PHP. Recherchez plus de détails dans - show_source. Ceci est une meilleure méthode, je suppose.

0
mridul4c

L'ensemble interne de guillemets simples dans votre code tue la chaîne. Chaque fois que vous cliquez sur un devis, il termine la chaîne et continue le traitement. Vous voudrez quelque chose comme:

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

Pour ce faire, vous devez supprimer tous les caractères ' de votre chaîne ou utiliser un caractère d'échappement. Comme:

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

Une autre option consisterait à utiliser if avec deux points et un endif à la place des crochets:

<?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>
0
hitautodestruct