Bagaimana saya bisa echo HTML di PHP?

122

Saya ingin menghasilkan HTML secara bersyarat untuk menghasilkan halaman, jadi apa cara termudah untuk menampilkan cuplikan multiline HTML di PHP 4+? Apakah saya perlu menggunakan kerangka kerangka seperti 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";
Kilat
sumber
2
\ n tidak berfungsi di html. Saya kira yang Anda maksud adalah gema "<br>";
Weishi Zeng
Praktik yang baik mengatakan untuk memisahkan logika Anda dari tampilan (seperti di MVC). gunakan mesin templetig seperti Twig untuk memisahkan pandangan Anda dari logika skrip - twig.sensiolabs.org Insted untuk mengimplementasikan markup html Anda ke skrip php Anda melakukannya dengan cara lain. Menerapkan variabel php ke candi ranting. Segera setelah Anda mengerti maksud saya, Anda akan melihat manfaat dari pendekatan ini. Twig memecahkan masalah semacam ini. Untuk potongan kecil kode Anda dapat menulis ekstensi ranting Anda sendiri yang kemudian dapat Anda gunakan dengan secounds untuk melakukan beberapa tugas yang rumit namun berulang.
DevWL

Jawaban:

269

Ada beberapa cara untuk meng-echo HTML di PHP.

1. Di antara tag PHP

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

2. Dalam gema

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

Dengan echos, jika Anda ingin menggunakan tanda kutip ganda di HTML Anda, Anda harus menggunakan echos kutipan tunggal seperti ini:

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

Atau Anda bisa menghindarinya seperti ini:

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

3. Heredocs

4. Nowdocs (mulai dari PHP 5.3.0)

Mesin template digunakan untuk menggunakan PHP dalam dokumen yang sebagian besar berisi HTML. Sebenarnya, tujuan asli PHP adalah menjadi bahasa templating. Itulah mengapa dengan PHP Anda dapat menggunakan hal-hal seperti tag pendek untuk menggemakan variabel (misalnya <?=$someVariable?>).

Ada mesin templat lain (seperti Smarty, Twig, dll.) Yang membuat sintaks menjadi lebih ringkas (mis {{someVariable}}.).

Manfaat utama menggunakan mesin templat adalah menjaga desain ( logika presentasi ) terpisah dari pengkodean ( logika bisnis ). Ini juga membuat kode lebih bersih dan lebih mudah dipelihara dalam jangka panjang.

Jika Anda memiliki pertanyaan lebih lanjut, silakan tinggalkan komentar.

Bacaan lebih lanjut tentang hal-hal ini tersedia dalam dokumentasi PHP .


CATATAN: Tag pendek PHP <?dan ?>tidak disarankan karena hanya tersedia jika diaktifkan dengan short_open_tagarahan file konfigurasi php.ini, atau jika PHP dikonfigurasi dengan --enable-short-tagsopsi. Mereka tersedia, terlepas dari pengaturan dari 5.4 dan seterusnya .

Chris Bier
sumber
7
Bukankah seharusnya "/ * HTML di sini * /" BENAR-BENAR menjadi "<! - HTML di sini ->"? ;)
Jeremy Logan
Ya di posting pertama Anda benar. Saya terjebak dalam kode haha. Terima kasih.
Chris Bier
1
Terima kasih, @Chris B. itu membantu saya. Dengan echos, jika Anda ingin menggunakan tanda kutip ganda dalam HTML Anda, Anda harus menggunakan echos kutipan tunggal seperti ini: Saya sebenarnya melewatkan ini.
Ayush Mishra
1
Tautan pertama dalam jawaban ini sekarang dihapus :(
mcon
Sebenarnya, satu-satunya tag pendek yang tersedia mulai 5.4 dan seterusnya adalah tag echo pendek <?=$var?>. Tag pendek tidak disarankan seperti biasa, dan harus dihapus ( <? doStuff() ?>).
igorsantos07
65

Cobalah seperti ini ( sintaks heredoc ):

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

</body>
</html>
XYZ;
echo $variable;
lfx
sumber
8
@MhdSyrwan hanya karakter acak, Anda dapat membaca lebih lanjut di sini php.net/manual/en/…
lfx
1
peduli untuk rumit? Saya tidak melihat tanda kurung buka atau tutup PHP, tapi keduanya HTML dan PHP, jadi ya? - tautannya berfungsi dan menjawabnya dengan lebih baik, tapi mungkin harus ada di teks jawaban, bukan di komentar?
Julix
@Julix tentu saja Anda perlu menambahkan tag PHP pembuka dan ( tergantung ) penutup. Dia hanya ingin membuat contoh itu singkat.
Fahmi
Saya mendapatkannya; entah bagaimana saya melewatkan ini adalah sintaks heredocs (yaitu seluruh kode adalah php). Saya bingung, karena saya baru mengenal PHP pada saat itu dan terbiasa melihat sintaks seperti <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- Jadi saya pikir banyak tanda kurung hilang dan tidak yakin ke mana tepatnya mereka akan pergi. Itu selalu lucu ketika komentar saya yang sedikit lebih tua dijawab, karena saya sangat baru dalam semua itu.
Julix
30

Anda dapat menggunakan sintaks alternatif sintaks alternatif untuk struktur kontrol dan keluar dari 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
sumber
@ Jeremy: Ini mungkin yang terbaik, cara paling langsung dengan asumsi Anda tidak mencari sesuatu yang lebih ... Apakah Anda mencari sesuatu yang lebih?
Frank V
1
Ya, khususnya kemampuan untuk menggunakan komentar PHP di antara HTML, komentar yang tidak akan di-echo.
TheFlash
15

Pada dasarnya Anda dapat meletakkan HTML di mana saja di luar tag PHP. Ini juga sangat bermanfaat untuk melakukan semua pemrosesan data yang diperlukan sebelum menampilkan data apa pun, untuk memisahkan logika dan presentasi.

Tampilan datanya sendiri dapat berada di bagian bawah file PHP yang sama atau Anda dapat menyertakan file PHP terpisah yang sebagian besar terdiri dari HTML.

Saya lebih suka gaya ringkas ini:

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

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

Catatan: Anda mungkin perlu menggunakan <?php echo $var; ?>alih-alih <?=$var?>bergantung pada penyiapan PHP Anda.

Kambing Tidak Puas
sumber
7

Saya menyukai gaya ini:

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

Saya menggunakan tag gaya ASP, ya. Perpaduan PHP dan HTML terlihat sangat mudah dibaca oleh mata saya. Triknya adalah mendapatkan penanda <%dan dengan %>benar.

John Kugelman
sumber
Apakah tag ASP kompatibel dengan PHP 4+?
TheFlash
4
Ya, tetapi dapatkan em selagi masih ada - mereka dihapus dari PHP (tidak yakin versi mana ... jika mereka belum pergi)
Greg
7

Pendekatan lain adalah meletakkan HTML dalam file terpisah dan menandai area yang akan diubah dengan placeholder [[konten]] dalam kasus ini. (Anda juga dapat menggunakan sprintf sebagai ganti str_replace.)

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

Sebagai alternatif, Anda bisa mengeluarkan semua barang PHP ke layar yang ditangkap dalam buffer, menulis HTML, dan mengembalikan keluaran PHP ke halaman.

Mungkin tampak aneh untuk menulis PHP, menangkapnya, dan kemudian menulisnya lagi, tetapi itu berarti Anda dapat melakukan semua jenis hal pemformatan ( heredoc , dll.), Dan mengujinya dengan benar tanpa kerumitan halaman template menghalangi. ( CMS Joomla melakukannya dengan cara ini, BTW.)

Yaitu:

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

Cukup gunakan fungsi print untuk menggemakan teks di file PHP sebagai berikut:

<?php

  print('
    <div class="wrap">

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

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

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

Selain jawaban Chris B , jika Anda echotetap ingin menggunakannya , tetap ingin membuatnya tetap sederhana dan terstruktur dan tidak ingin kode spam dengan <?php stuff; ?>'s, Anda dapat menggunakan sintaks di bawah ini.

Misalnya Anda ingin menampilkan gambar sebuah galeri:

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 mengambil banyak parameter sehingga dengan indentasi yang bagus akan terlihat cukup bagus. Juga menggunakan echoparameter dengan lebih efektif daripada penggabungan.

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

atau

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

Coba ini:

<?php
    echo <<<HTML

    Your HTML tags here

HTML;
?>
edCoder
sumber
0

Jangan menggemakan HTML.

Jika Anda ingin menggunakan

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

Anda harus melakukan ini:

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

Inilah cara saya melakukannya:

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