PHP'de HTML'yi nasıl yansıtırım?


122

Bir sayfa oluşturmak için koşullu olarak HTML çıktısını almak istiyorum, peki PHP 4+ 'de çok satırlı HTML parçacıklarını yankılamanın en kolay yolu nedir? Smarty gibi bir şablon çerçevesi kullanmam gerekir mi?

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

2
\ n html'de çalışmaz. Sanırım echo "<br>" demek istediniz;
Weishi Zeng

İyi bir uygulama mantığınızı görünümden ayırmanızı söylüyor (MVC'deki gibi). Görünümünüzü betik mantığından ayırmak için Twig gibi templetig motorunu kullanın - twig.sensiolabs.org html işaretlemenizi php betiğinize uyguladıktan sonra bunu başka şekilde yapın. Twig temple için php değişkenleri uygulayın. Demek istediğimi anladığınız anda bu yaklaşımın faydalarını göreceksiniz. Twig bu tür sorunları çözer. Küçük bir kod yığını için, daha sonra bazı karmaşık ama tekrarlayan görevleri yerine getirmek için ikincil olarak kullanabileceğiniz kendi dal uzantınızı yazabilirsiniz.
DevWL

Yanıtlar:


270

PHP'de HTML'yi yankılamanın birkaç yolu vardır.

1. PHP etiketleri arasında

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

2. Yankı olarak

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

Yankılarla, HTML'nizde çift tırnak kullanmak isterseniz, aşağıdaki gibi tek tırnaklı yankıları kullanmanız gerekir:

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

Ya da onlardan şu şekilde kaçabilirsiniz:

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

3. Yorumlu metinler

4. Nowdocs (PHP 5.3.0'dan itibaren)

Şablon motorları , çoğunlukla HTML içeren belgelerde PHP'yi kullanmak için kullanılır. Aslında, PHP'nin orijinal amacı bir şablon dili olmaktı. Bu nedenle PHP ile değişkenleri yankılamak için kısa etiketler gibi şeyler kullanabilirsiniz (örn. <?=$someVariable?>).

Sözdizimini daha da özlü yapan (örneğin {{someVariable}}) başka şablon motorları (Smarty, Twig, vb.) Vardır .

Bir şablon motoru kullanmanın birincil yararı, tasarımı ( sunum mantığı ) kodlamadan ( iş mantığı ) ayrı tutmaktır . Ayrıca kodu daha temiz ve uzun vadede bakımını kolaylaştırır.

Başka sorunuz varsa, yorum bırakmaktan çekinmeyin.

PHP belgelerinde bu konularla ilgili daha fazla bilgi bulabilirsiniz .


NOT: PHP kısa etiketleri <?ve ?>yalnızca short_open_tagphp.ini yapılandırma dosyası yönergesi ile etkinleştirildiyse veya PHP bu --enable-short-tagsseçenekle yapılandırıldıysa kullanılabilir olduklarından önerilmez . 5.4'ten sonraki ayarlara bakılmaksızın mevcutturlar .


7
Buradaki "/ * HTML * /" GERÇEKTEN "<! - HTML burada ->" olmamalı mı? ;)
Jeremy Logan

Evet, ilk gönderide haklısın. Ben haha ​​koduna yakalandım. Teşekkür ederim.
Chris Bier

1
Teşekkürler @Chris B. bana yardımcı oldu. Yankılarla, HTML'nizde çift tırnak kullanmak istiyorsanız, şu şekilde tek tırnaklı yankılar kullanmanız gerekir: Aslında bunu kaçırıyordum.
Ayush Mishra


Aslında, 5.4'ten itibaren mevcut olan tek kısa etiket kısa yankı etiketleridir <?=$var?>. Kısa etiketlerin her zamanki gibi kullanılması önerilmez ve kaldırılmalıdır ( <? doStuff() ?>).
igorsantos07

65

Şöyle deneyin ( heredoc sözdizimi):

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

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

8
@MhdSyrwan sadece rastgele karakterler, buradan daha fazlasını okuyabilirsiniz php.net/manual/en/…
lfx

1
detaylandırmak ister misiniz? Açılış veya kapanış PHP parantezlerini görmüyorum, ama hem HTML hem de PHP, öyle mi? - bağlantı işe yarıyor ve daha iyi cevap veriyor, ancak belki de yanıt metninde olmalı, yorumlarda değil?
Julix

@Julix elbette açılış ve kapanış ( bağlıdır ) PHP etiketlerini eklemeniz gerekir . Sadece örneği kısa yapmak istedi.
Fahmi

Anladım; bir şekilde bu yorumlu metin sözdizimi olduğunu kaçırdım (yani kodun tamamı php'dir). O zamanlar PHP'de yeni olduğum ve şöyle bir sözdizimi görmeye alışkın olduğum için kafam karıştı <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Bu yüzden bir grup parantezin eksik olduğunu ve tam olarak nereye gideceklerini bilmediğimi düşündüm. Biraz daha eski yorumlarım yanıtlandığında her zaman komik, çünkü o zamanlar çok yeniydim.
Julix

30

Kontrol yapıları için alternatif sözdizimi alternatif sözdizimini kullanabilir ve PHP'den çıkabilirsiniz :

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

@Jeremy: Bu muhtemelen daha fazla bir şey aramadığınızı varsayarsak en iyi, en doğrudan yol ... Daha fazlasını mı arıyorsunuz?
Frank V

1
Evet, özellikle HTML arasında PHP açıklamalarını kullanma yeteneği, yankılanmayacak yorumlar.
TheFlash

15

Temel olarak HTML'yi PHP etiketlerinin dışında herhangi bir yere koyabilirsiniz. Mantık ve sunumu ayırmak için herhangi bir veriyi görüntülemeden önce gerekli tüm veri işlemenizi yapmanız da çok faydalıdır.

Veri görüntüsünün kendisi aynı PHP dosyasının altında olabilir veya çoğunlukla HTML'den oluşan ayrı bir PHP dosyası içerebilir.

Bu kompakt stili tercih ediyorum:

<?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: PHP kurulumunuza bağlı olarak kullanmak <?php echo $var; ?>yerine kullanmanız gerekebilir <?=$var?>.


7

Ben bu stile düşkünüm:

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

ASP tarzı etiketler kullanıyorum, evet. PHP ve HTML'nin karışımı gözlerime süper okunabilir görünüyor. İşin püf noktası <%ve %>işaretlerini doğru bir şekilde elde etmektir .


ASP etiketleri PHP 4+ ile uyumlu mu?
TheFlash

4
Evet ama en son halindeyken alın - PHP'den kaldırılıyorlar (hangi sürümden ... henüz gitmedilerse)
Greg

7

Diğer bir yaklaşım, HTML'yi ayrı bir dosyaya koymak ve bu durumda değiştirilecek alanı bir yer tutucu [[içerik]] ile işaretlemektir. (Str_replace yerine sprintf de kullanabilirsiniz.)

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

Alternatif olarak, tüm PHP öğelerini bir arabellekte yakalanan ekrana çıktılayabilir, HTML'yi yazabilir ve PHP çıktısını sayfaya geri koyabilirsiniz.

PHP'yi yazmak, yakalamak ve sonra tekrar yazmak tuhaf görünebilir, ancak bu, her türlü biçimlendirme işini ( heredok vb.) Yapabileceğiniz ve sayfanın zorluğu olmadan çıktılarını doğru şekilde test edebileceğiniz anlamına gelir. şablon yolumuza çıkıyor. ( Joomla CMS bunu bu şekilde yapar, BTW.)

yani:

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

2

PHP dosyasındaki metni aşağıdaki gibi yansıtmak için yazdırma işlevini kullanmanız yeterlidir :

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>

2
$enter_string = '<textarea style="color:#FF0000;" name="message">EXAMPLE</textarea>';

echo('Echo as HTML' . htmlspecialchars((string)$enter_string));

1

Chris B'nin cevabına ek olarak echo, yine de kullanmanız gerekiyorsa , yine de basit ve yapılandırılmış olmasını istiyorsanız ve <?php stuff; ?>'s ile kodu spam yapmak istemiyorsanız , aşağıdaki sözdizimini kullanabilirsiniz.

Örneğin, bir galerinin resimlerini görüntülemek istiyorsunuz:

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

Echo birden fazla parametre alır, bu nedenle iyi girintileme ile oldukça iyi görünür. Ayrıca echoparametrelerle birlikte kullanmak , birleştirmekten daha etkilidir.


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

veya

echo "<html>\n<body>\n</body>\n</html>\n";

1

Bunu dene:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>

0

HTML'yi yankılamayın.

Kullanmak istersen

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

bunu yapmalısın:

<h1><?= $title;?></h1>

-1

Ben böyle yaparım:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.