PHP nasıl HTML yankı?

7 Cevap php

Öyle PHP 4 + içinde HTML satırlı parçacıkları yankı kolay yolu nedir, koşullu çıkış HTML bir sayfa oluşturmak istiyor? Ben Smarty gibi bir şablon çerçevesinde kullanmak gerekir?

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";

7 Cevap

PHP HTML yankı için birkaç yolu vardır.

1. In between PHP tags

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

2. In an echo

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

Eğer HTML çift tırnak kullanmak istiyorsanız ekolar, bu yüzden gibi tek tırnak yankılanırken kullanmanız gerekir:

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

Yoksa bu kadar gibi onları kaçabilir:

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

3. Heredocs

4. Nowdocs (as of PHP 5.3.0)

Template engines çoğunlukla HTML içeren belgelerde PHP kullanmak için kullanılır. In fact, PHP's original purpose was to be a templating language. Yani PHP ile değişkenleri echo kısa etiketleri gibi şeyler kullanabilirsiniz yüzden (örneğin <?=$someVariable?>).

Sözdizimi daha özlü hale (vb Smarty, Twig, gibi) başka bir şablon motorları vardır (örneğin, {{someVariable}}).

Bir şablon motoru kullanarak birincil yararı kodlama (Business Logic) ayrı tasarım (Sunum Logic) tutuyor. Ayrıca uzun vadede kod temiz ve bakımını kolaylaştırır.

If you have any more questions feel free to leave a comment. Further reading is available on these things in the PHP Documentation.

God Bless!


NOTE: PHP, kısa etiketler <? ve short_open_tag php.ini yapılandırma dosyası yönergesi, veya etkinse sadece mevcuttur çünkü ?> cesareti PHP --enable-short-tags seçeneği ile yapılandırıldı ise. They are available, regardless of settings from 5.4 onwards.

Bu gibi deneyin:

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

</body>
</html>
XYZ;
echo $variable;

Sen alternative syntax alternative syntax for control structures kullanımı ve php patlak verebilir:

<?php if ($something): ?>
    <some /> <tags /> <etc />
    <?=$shortButControversialWayOfPrintingAVariable ?>
    <?php /* A comment not visible in the HTML but is a bit of a pain to write */ ?>
<?php else: ?>
    <!-- else -->
<?php endif; ?>

Temelde her yerde PHP etiketleri dışında HTML koyabilirsiniz. Ayrı mantık ve sunum için, herhangi bir veri görüntülemeden önce tüm gerekli veri işleme yapmak için de çok yararlı.

Veri görüntüleme kendisi aynı PHP dosyanın altındaki olabilir ya da çoğunlukla HTML oluşan ayrı bir PHP dosyası içerebilir.

Ben bu kompakt tarzı tercih:

<?php
    /* do your processing here */
?>

<html>
<head>
    <title><?=$title?></title>
</head>
<body>
    <?php foreach ( $something as $item ) : ?>
        <p><?=$item?></p>
    <?php endforeach; ?>
</body>
</html>

Not: yerine <?=$var?> PHP kurulum bağlı olarak <?php echo $var; ?> kullanmanız gerekebilir.

Ben bu tarz kısmi duyuyorum:

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

Evet, ASP tarzı etiketler kullanabilirsiniz yapın. PHP ve HTML karıştırma gözlerime süper okunabilir görünüyor. Hüner <% ve %> belirteçleri sadece doğru almak olduğunu.

Başka bir yaklaşım ayrı bir dosyada HTML koymak ve bu durumda bir tutucu [[content]] ile değiştirmek için alanı işaretlemek edilir. (Ayrıca, yerine str_replace sprintf kullanabilirsiniz.)

$page = 'hello world';
$content = file_get_contents('html/welcome.html');
$pagecontent = str_replace('[[content]]',$content,$page);
echo($pagecontent);

Alternatif, daha sonra tekrar sayfanın içine php çıkış koymak, html bir tampon yakalanan ekrana tüm php şeyler sadece çıkış yazabilirsiniz.

It might seem strange to write the php out, catch it, then write it again, but it does mean that you can do all kinds of formatting stuff (Heredocs etc),& test it outputs correctly without the hassle of the page template getting in the way. (Joomla CMS does it this way, BTW) ie:

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

Kullanmak gerekiyorsa Chris B's cevap ek olarak, echo Neyse, hala basit ve yapılandırılmış tutmak istiyorum ve {[(2)] ile kod spam istemiyorum } 's, aşağıdaki sözdizimini kullanabilirsiniz.

Örneğin bir galeri görüntüleri görüntülemek istiyorsanız:

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

Iyi indenting oldukça iyi görünüyor ile çok Echo birden fazla parametre alır. Ayrıca parametrelerle echo ile birleştirmekten daha etkilidir.