Como posso ecoar HTML em PHP?

122

Quero gerar HTML condicionalmente para gerar uma página, então, qual é a maneira mais fácil de repetir trechos de várias linhas de HTML no PHP 4+? Eu precisaria usar uma estrutura de modelo como o 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";
O Flash
fonte
2
\ n não funciona em html. Eu acho que você quis dizer eco "<br>";
Weishi Zeng
Boa prática diz para separar sua lógica da exibição (como no MVC). use o mecanismo templetig, como o Twig, para separar sua visualização da lógica do script - twig.sensiolabs.org . Instale a implementação da sua marcação html no seu script php e faça o contrário. Implementar variáveis ​​php no twig temple. Assim que você entender o que quero dizer, verá os benefícios dessa abordagem. Twig resolve esse tipo de problema. Para um pequeno código de código, você pode escrever sua própria extensão de galho, que você pode usar em segundos para executar algumas tarefas complicadas, mas repetitivas.
DevWL

Respostas:

269

Existem algumas maneiras de ecoar HTML no PHP.

1. Entre tags PHP

<?php if(condition){ ?>
     <!-- HTML here -->
<?php } ?>

2. Em um eco

if(condition){
     echo "HTML here";
}

Com ecos, se você deseja usar aspas duplas no seu HTML, use ecos de aspas simples da seguinte maneira:

echo '<input type="text">';

Ou você pode escapar deles assim:

echo "<input type=\"text\">";

3. Heredocs

4. Nowdocs (a partir do PHP 5.3.0)

Os mecanismos de modelo são usados ​​para usar PHP em documentos que contêm principalmente HTML. De fato, o objetivo original do PHP era ser uma linguagem de modelos. É por isso que, com o PHP, você pode usar coisas como tags curtas para ecoar variáveis ​​(por exemplo <?=$someVariable?>).

Existem outros mecanismos de gabarito (como Smarty, Twig, etc.) que tornam a sintaxe ainda mais concisa (por exemplo {{someVariable}}).

O principal benefício do uso de um mecanismo de modelo é manter o design ( lógica de apresentação ) separado da codificação ( lógica de negócios ). Também torna o código mais limpo e fácil de manter a longo prazo.

Se você tiver mais perguntas, não hesite em deixar um comentário.

Leituras adicionais estão disponíveis sobre essas coisas na documentação do PHP .


NOTA: PHP curto marcas <?e ?>são desencorajados porque eles só estão disponíveis se habilitado com short_open_tagdirectiva arquivo de configuração php.ini ou se o PHP foi configurado com a --enable-short-tagsopção. Eles estão disponíveis, independentemente das configurações da versão 5.4 em diante .

Chris Bier
fonte
7
O "/ * HTML aqui * /" não deve ser REALMENTE um "<! - HTML aqui ->"? ;)
Jeremy Logan
Sim, no primeiro post você está correto. Eu fui pego no código haha. Obrigado.
317 Chris Bier
1
Obrigado, @ Chris B. isso me ajudou. Com ecos, se você deseja usar aspas duplas no seu HTML, deve usar ecos de aspas simples da seguinte maneira: Na verdade, estava faltando isso.
Ayush Mishra
1
O primeiro link da resposta foi removido :(
mcon 20/08/2015
Na verdade, as únicas tags curtas disponíveis a partir da versão 5.4 são as tags curtas de eco <?=$var?>. Tags curtas são desencorajadas como de costume e devem ser removidas ( <? doStuff() ?>).
Igorantos07
65

Tente assim ( sintaxe heredoc ):

$variable = <<<XYZ
<html>
<body>

</body>
</html>
XYZ;
echo $variable;
lfx
fonte
8
@MhdSyrwan apenas caracteres aleatórios, você pode ler mais aqui php.net/manual/en/…
lfx
1
cuidado ao elaborar? Não vejo os colchetes de abertura ou fechamento do PHP, mas HTML e PHP, então, não é? - o link funciona e responde melhor, mas talvez deva estar no texto da resposta, não nos comentários?
Julix
@ Julix é claro que você precisa adicionar abertura e ( depende ) fechar tags PHP. Ele só queria resumir o exemplo.
Fahmi
Deixa comigo; de alguma forma, eu perdi essa sintaxe heredocs (ou seja, todo o código é php). Fiquei confuso, já que eu era novo no PHP na época e costumava ver sintaxe como <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Então eu pensei que um monte de colchetes estava faltando e não tinha certeza para onde exatamente eles iriam. É sempre engraçado quando meus comentários um pouco mais antigos são respondidos, já que eu era muito novo nisso tudo.
Julix
30

Você pode usar a sintaxe alternativa sintaxe alternativa para estruturas de controle e interromper o PHP:

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML, but it is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>
Tom Haigh
fonte
@ Jeremy: Esta é provavelmente a melhor e mais direta maneira de assumir que você não está procurando algo mais ... Você está procurando algo mais?
Frank V
1
Sim, especificamente a capacidade de usar comentários PHP entre o HTML, comentários que não serão ecoados.
TheFlash 08/07/2009
15

Basicamente, você pode colocar HTML em qualquer lugar fora das tags PHP. Também é muito benéfico fazer todo o processamento de dados necessário antes de exibir qualquer dado, para separar a lógica e a apresentação.

A exibição dos dados em si pode estar na parte inferior do mesmo arquivo PHP ou você pode incluir um arquivo PHP separado que consiste principalmente em HTML.

Eu prefiro 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: você pode precisar usar em <?php echo $var; ?>vez de <?=$var?>depender da configuração do PHP.

DisgruntledGoat
fonte
7

Sou parcial desse estilo:

  <html>
    <head>
<%    if (X)
      {
%>      <title>Definitely X</title>
<%    }
      else
      {
%>      <title>Totally not X</title>
<%    }
%>  </head>
  </html>

Eu uso tags no estilo ASP, sim. A mistura de PHP e HTML parece super legível aos meus olhos. O truque está em obter os marcadores <%e %>apenas para a direita.

John Kugelman
fonte
As tags ASP são compatíveis com o PHP 4+?
theflash
4
Sim, mas obter em quando durarem - eles estão sendo removido do PHP (não tenho certeza qual versão ... caso não tenham já desaparecido)
Greg
7

Outra abordagem é colocar o HTML em um arquivo separado e marcar a área a ser alterada com um espaço reservado [[content]] nesse caso. (Você também pode usar o sprintf em vez do str_replace.)

$page = 'Hello, World!';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]', $content, $page);
echo($pagecontent);

Como alternativa, você pode simplesmente enviar todas as coisas do PHP para a tela capturada em um buffer, escrever o HTML e colocar a saída do PHP de volta na página.

Pode parecer estranho escrever o PHP, capturá-lo e depois escrevê-lo novamente, mas isso significa que você pode fazer todos os tipos de coisas de formatação ( heredoc , etc.) e testá-lo corretamente, sem o incômodo da página. modelo atrapalhando. (O Joomla CMS faz assim, a propósito.)

Ou seja:

<?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
julz
fonte
2

Basta usar a função de impressão para ecoar o texto no arquivo PHP da seguinte maneira:

<?php

  print('
    <div class="wrap">

      <span class="textClass">TESTING</span>

    </div>
  ')
?>
Code Spy
fonte
2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));
ezequiel wernicke
fonte
1

Além da resposta de Chris B , se você precisar usá-lo de echoqualquer maneira, ainda deseja mantê-lo simples e estruturado e não deseja enviar spam ao código <?php stuff; ?>, você pode usar a sintaxe abaixo.

Por exemplo, você deseja exibir as imagens de uma galeria:

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

O eco usa vários parâmetros, portanto, com um bom recuo, parece muito bom. Também usar echocom parâmetros é mais eficaz do que concatenar.

totymedli
fonte
1
echo '
<html>
<body>
</body>
</html>
';

ou

echo "<html>\n<body>\n</body>\n</html>\n";
Alessandro
fonte
1

Tente o seguinte:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>
edCoder
fonte
0

Não faça eco do HTML.

Se você quiser usar

<?php echo "<h1>  $title; </h1>"; ?>

você deveria estar fazendo isso:

<h1><?= $title;?></h1>
Hmache
fonte
-1

É assim que eu faço:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
Cristi bejan
fonte