ฉันจะสะท้อน HTML ใน PHP ได้อย่างไร


122

ฉันต้องการส่งออก HTML ตามเงื่อนไขเพื่อสร้างเพจดังนั้นวิธีใดที่ง่ายที่สุดในการสะท้อนตัวอย่าง HTML หลายบรรทัดใน PHP 4+ ฉันจะต้องใช้กรอบแม่แบบเช่น 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";

2
\ n ไม่ทำงานใน html ฉันเดาว่าคุณหมายถึง echo "<br>";
Weishi Zeng

คำสรรเสริญที่ดีพูดเพื่อแยกตรรกะของคุณออกจากมุมมอง (เช่นใน MVC) ใช้เครื่องมือ templetig เช่น Twig เพื่อแยกมุมมองของคุณจากตรรกะของสคริปต์ - twig.sensiolabs.org Insted ในการนำมาร์กอัป html ของคุณไปใช้กับสคริปต์ php ของคุณทำในลักษณะอื่น นำตัวแปร php ไปใช้กับ twig temple ทันทีที่คุณได้รับสิ่งที่ฉันหมายถึงคุณจะเห็นประโยชน์ของ aproach นี้ ทวิกแก้ปัญหาประเภทนี้ สำหรับช่องเล็ก ๆ ของโค้ดคุณสามารถเขียนส่วนขยายกิ่งไม้ของคุณเองซึ่งคุณสามารถใช้ร่วมกับ secounds เพื่อทำงานที่ซับซ้อน แต่ซ้ำซากได้
DevWL

คำตอบ:


270

มีสองสามวิธีในการสะท้อน HTML ใน PHP

1. อยู่ระหว่างแท็ก PHP

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

2. ในเสียงสะท้อน

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

ด้วยเสียงสะท้อนหากคุณต้องการใช้เครื่องหมายคำพูดคู่ใน HTML ของคุณคุณต้องใช้เครื่องหมายคำพูดเดี่ยวดังนี้:

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

หรือคุณสามารถหลบหนีได้เช่น:

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

3. Heredocs

4. Nowdocs (ณ PHP 5.3.0)

เครื่องมือแม่แบบใช้สำหรับการใช้ PHP ในเอกสารที่มี HTML เป็นส่วนใหญ่ ในความเป็นจริงจุดประสงค์ดั้งเดิมของ PHP คือเป็นภาษาแม่แบบ นั่นเป็นเหตุผลที่ PHP คุณสามารถใช้สิ่งต่างๆเช่นแท็กสั้น ๆ กับตัวแปรสะท้อน (เช่น<?=$someVariable?>)

มีเอ็นจิ้นเทมเพลตอื่น ๆ (เช่น Smarty, Twig เป็นต้น) ที่ทำให้ไวยากรณ์กระชับยิ่งขึ้น (เช่น{{someVariable}})

ประโยชน์หลักของการใช้เครื่องมือแม่แบบคือการทำให้การออกแบบ ( ตรรกะการนำเสนอ ) แยกจากการเข้ารหัส ( ตรรกะทางธุรกิจ ) นอกจากนี้ยังทำให้โค้ดสะอาดขึ้นและดูแลรักษาง่ายขึ้นในระยะยาว

หากคุณมีคำถามเพิ่มเติมโปรดแสดงความคิดเห็น

อ่านเพิ่มเติมได้ในสิ่งเหล่านี้ในเอกสาร PHP


หมายเหตุ:แท็กแบบสั้นของ PHP <?และ?>ไม่สนับสนุนเนื่องจากมีให้ใช้งานเฉพาะเมื่อเปิดใช้งานด้วยshort_open_tagคำสั่งไฟล์การกำหนดค่า php.ini หรือหากกำหนดค่า PHP ด้วย--enable-short-tagsตัวเลือก พวกเขามีอยู่โดยไม่คำนึงถึงการตั้งค่าจาก 5.4 เป็นต้นไป


7
ไม่ควรใช้ "/ * HTML ที่นี่ * /" จริงๆเป็น "<! - HTML ที่นี่ ->" ;)
Jeremy Logan

ใช่ในโพสต์แรกคุณถูกต้อง ฉันจมอยู่ในรหัสฮ่าฮ่า ขอบคุณ.
Chris Bier

1
ขอบคุณ @Chris B. ที่ช่วยฉัน ด้วยเสียงสะท้อนหากคุณต้องการใช้เครื่องหมายคำพูดคู่ใน HTML ของคุณคุณต้องใช้เครื่องหมายคำพูดเดี่ยวเช่นนั้นจริง ๆ แล้วฉันพลาดสิ่งนี้ไป
Ayush Mishra

1
ลิงก์แรกในคำตอบนี้ถูกลบออกแล้ว :(
mcon

ที่จริงแล้วแท็กเพียงสั้น ๆ พร้อมใช้งานจาก 5.4 <?=$var?>เป็นต้นไปเป็นแท็กก้องสั้น แท็กสั้นมีกำลังใจตามปกติและจะถูกลบออก ( <? doStuff() ?>)
igorsantos07

65

ลองใช้แบบนี้ ( ไวยากรณ์heredoc ):

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

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

8
@MhdSyrwan เพียงสุ่มตัวอักษรสามารถอ่านเพิ่มเติมได้ที่นี่php.net/manual/en/…
lfx

1
ใส่ใจที่จะอธิบาย? ฉันไม่เห็นวงเล็บ PHP เปิดหรือปิด แต่ทั้ง HTML และ PHP งั้นเหรอ? - ลิงก์ใช้งานได้และตอบได้ดีขึ้น แต่อาจจะอยู่ในข้อความคำตอบไม่ใช่ในความคิดเห็น?
Julix

@Julix แน่นอนคุณต้องเพิ่มการเปิดและ ( ขึ้นอยู่กับ ) ปิดแท็ก PHP เขาแค่อยากทำให้ตัวอย่างสั้น ๆ
Fahmi

ฉันเข้าใจแล้ว; ฉันพลาดสิ่งนี้ไปคือไวยากรณ์ heredocs (เช่นรหัสทั้งหมดคือ php) ฉันสับสนเนื่องจากฉันยังใหม่กับ PHP ในเวลานั้นและเคยเห็นไวยากรณ์เช่น <?php $variable = "bla"; ?> <html> <body class="<?php echo $variable ?>"> </body> </html>--- ดังนั้นฉันจึงคิดว่ามีวงเล็บจำนวนหนึ่งหายไปและไม่แน่ใจว่าจะไปที่ไหนกันแน่ เป็นเรื่องตลกเสมอเมื่อความคิดเห็นที่เก่ากว่าเล็กน้อยของฉันได้รับคำตอบเนื่องจากตอนนั้นฉันยังใหม่มาก
Julix

30

คุณสามารถใช้ไวยากรณ์ทางเลือกทางเลือกสำหรับโครงสร้างการควบคุมและแยกออกจาก 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; ?>

@Jeremy: นี่อาจเป็นวิธีที่ดีที่สุดและตรงที่สุดโดยสมมติว่าคุณไม่ได้มองหาอะไรเพิ่มเติม ... คุณกำลังมองหาอะไรเพิ่มเติมหรือไม่?
Frank V

1
ใช่โดยเฉพาะความสามารถในการใช้ความคิดเห็น PHP ระหว่าง HTML ความคิดเห็นที่จะไม่ถูกสะท้อน
TheFlash

15

โดยทั่วไปคุณสามารถใส่ HTML ที่ใดก็ได้นอกแท็ก PHP นอกจากนี้ยังเป็นประโยชน์อย่างมากในการประมวลผลข้อมูลที่จำเป็นทั้งหมดก่อนที่จะแสดงข้อมูลใด ๆ เพื่อแยกตรรกะและการนำเสนอ

การแสดงข้อมูลอาจอยู่ที่ด้านล่างของไฟล์ PHP เดียวกันหรือคุณอาจรวมไฟล์ PHP แยกต่างหากซึ่งส่วนใหญ่เป็น HTML

ฉันชอบสไตล์กะทัดรัดนี้:

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

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

หมายเหตุ: คุณอาจต้องใช้<?php echo $var; ?>แทน<?=$var?>ขึ้นอยู่กับการตั้งค่า PHP ของคุณ


7

ฉันเป็นส่วนหนึ่งของสไตล์นี้:

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

ฉันใช้แท็กสไตล์ ASP ใช่ การผสมผสานระหว่าง PHP และ HTML ดูดีมากสำหรับสายตาของฉัน เคล็ดลับคือในการรับ<%และ%>เครื่องหมายเพียงขวา


แท็ก ASP เข้ากันได้กับ PHP 4+ หรือไม่
TheFlash

4
ใช่ แต่ได้รับในขณะที่พวกเขาล่าสุด - พวกเขาจะถูกลบออกจาก PHP (ไม่แน่ใจว่าเวอร์ชันใด ... หากยังไม่ได้ไป)
Greg

7

อีกวิธีหนึ่งคือใส่ HTML ในไฟล์แยกต่างหากและทำเครื่องหมายพื้นที่ที่ต้องการเปลี่ยนแปลงด้วยตัวยึดตำแหน่ง [[เนื้อหา]] ในกรณีนี้ (คุณยังสามารถใช้ sprintf แทน str_replace ได้)

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

หรือคุณสามารถส่งออก PHP ทั้งหมดไปยังหน้าจอที่จับในบัฟเฟอร์เขียน HTML และใส่เอาต์พุต PHP กลับเข้าไปในหน้า

อาจดูแปลกที่จะเขียน PHP ออกมาจับมันแล้วเขียนอีกครั้ง แต่หมายความว่าคุณสามารถจัดรูปแบบสิ่งต่าง ๆ ได้ทุกชนิด ( heredocฯลฯ ) และทดสอบผลลัพธ์ได้อย่างถูกต้องโดยไม่ต้องวุ่นวายกับหน้า เทมเพลตเข้ามาขวางทาง ( Joomla CMSใช้วิธีนี้ BTW)

เช่น:

<?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 ดังต่อไปนี้:

<?php

  print('
    <div class="wrap">

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

    </div>
  ')
?>


1

นอกเหนือจากคำตอบของ Chris Bแล้วหากคุณจำเป็นต้องใช้echoต่อไปคุณยังต้องการให้มันง่ายและมีโครงสร้างและไม่ต้องการสแปมโค้ดด้วย<?php stuff; ?>คุณสามารถใช้ไวยากรณ์ด้านล่าง

ตัวอย่างเช่นคุณต้องการแสดงภาพของแกลเลอรี:

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ใช้หลายพารามิเตอร์ดังนั้นการเยื้องที่ดีจึงดูดีทีเดียว นอกจากนี้การใช้echoกับพารามิเตอร์จะมีประสิทธิภาพมากกว่าการเชื่อมต่อกัน




0

อย่าสะท้อน HTML ออกมา

หากต้องการใช้

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

คุณควรทำสิ่งนี้:

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

-1

นี่คือวิธีที่ฉันทำ:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.