سؤال

أريد إخراج HTML مشروط لتوليد صفحة، فما هي أسهل طريقة لصدى مقتطفات Multiline من 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";
هل كانت مفيدة؟

المحلول

هناك عدة طرق لإضفاء الطابع HTML في PHP.

1. بين علامات PHP

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

2. في صدى

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

مع Echos، إذا كنت ترغب في استخدام علامات اقتباس مزدوجة في HTML، يجب عليك استخدام Echos Quote واحد مثل ذلك:

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

أو يمكنك الهروب منهم مثل ذلك:

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

3. heredocs.

4. NowDocs (اعتبارا من PHP 5.3.0)

محركات القالب يتم استخدامها لاستخدام PHP في المستندات التي تحتوي في الغالب HTML. في الواقع، كان الغرض الأصلي PHP هو لغة قالب. لهذا السبب مع PHP يمكنك استخدام أشياء مثل العلامات القصيرة إلى المتغيرات الصدى (على سبيل المثال <?=$someVariable?>).

هناك محركات قالب أخرى (مثل Smarty، Twig، إلخ) التي تجعل بناء الجملة أكثر إيجازا (على سبيل المثال {{someVariable}}).

الفائدة الأساسية لاستخدام محرك القالب هو الحفاظ على التصميم (منطق العرض التقديمي) منفصلة عن الترميز (منطق الأعمال). كما يجعل Code Cleaner وأسهل للحفاظ على المدى الطويل.

إذا كان لديك أي أسئلة أخرى فلا تتردد في ترك تعليق. مزيد من القراءة متاحة على هذه الأشياء في وثائق PHP..

بارك الله!


ملاحظة: PHP قصيرة العلامات <? و ?> يتم تثبيطها لأنها متوفرة فقط إذا تم تمكين short_open_tag توجيه ملف تكوين PHP.INI، أو إذا تم تكوين PHP مع --enable-short-tags اختيار. وهي متوفرة، بغض النظر عن الإعدادات من 5.4 فصاعدا.

نصائح أخرى

حاول مثل هذا:

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

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

يمكنك استخدام بناء جملة بديل بناء على بناء على هياكل التحكم والخروج من PHP:

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

أساسا يمكنك وضع 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 الخاص بك.

أنا جزئي لهذا النمط:

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

أنا أستخدم علامات نمط ASP، نعم. يبدو مزج PHP و HTML قابلا لقراءة فائقة لعيني. الحيلة في الحصول على <% و %> علامات فقط الحق.

يتم وضع نهج آخر HTML في ملف منفصل وتمييز المنطقة بالتغيير مع عنصر نائب [[content]] في هذه الحالة. (يمكنك أيضا استخدام 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، والقبض عليه، ثم اكتبه مرة أخرى، لكنه يعني أنه يمكنك القيام بجميع أنواع الأشياء التنسيقية (Heredocs وما إلى ذلك)، واختبارها مخرجاتها بشكل صحيح دون مشاحن قالب الصفحة الطريقة. (joomla cms يفعل ذلك بهذه الطريقة، راجع للشغل) 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

جرب هذا قد يساعدك .......

<?php
echo <<<HTML

your html tags here

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

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

بالإضافة إلى كريس ب الإجابة، إذا كنت بحاجة إلى استخدام 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 مع المعلمات أكثر فعالية من التزامن.

لا ترد على أتش تي أم أل

إذا كنت ترغب في استخدام

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

يجب أن تفعل هذا:

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

ببساطة استخدام مطبعة وظيفة إلى نص الصدى في ملف PHP كما تابع

<?php

  print('

    <div class="wrap">

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

    </div>


  ')

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

أو

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

هذه هي الطريقة التي أفعلها:

<?php if($contition == true){ ?>
         <input type="text" value="<?php echo $value_stored_in_php_variable; ?>" />
<?php }else{ ?>
         <p>No input here </p>
<?php } ?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top