(yani html değişkenler) PHP şablonları oluşturmak için bir yöntem?

6 Cevap

Ben html e-posta tasarlıyorum, bu i $ şablon değişkende saklayabilirsiniz html içeren değişken bir blok olmak için vardır.

Benim sorunum değişken kısmında depolama ile birlikte geliyor. php içine bütün html koyarak onunla çalışmak için serseri bir ağrı yapar.

Örneğin, aşağıdaki kod basit bir e-posta için gayet iyi ama iç içe geçmiş tablolar vb onun gerçekten kafa karıştırıcı almak için gidiyoruz almaya başladıktan sonra ...

$template.= 'Welcome ' . $username . '<br /><br /><br />';
$template.= 'Thank-you for creating an account <br /><br />';
$template.= 'Please confirm your account by click the link below! <br /><br />';
$template.= '<a href="' . $sitepath . '?email=' . $email . '&conf_key=' . $key . '" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A">' . $key . '</font></a>';
$template.='</body></html>';

is there a way i can still store the html in a $var but not have to write it like this?

6 Cevap

Eğer heredoc sözdizimi kullanarak denediniz mi?

$template = <<<TEMPLATE
Welcome $username <br/><br/>
...
</body></html>
TEMPLATE;

E-postalar için, ben dosya tabanlı şablonları büyük bir hayranıyım ve gerçekten temel bir şablon ayrıştırıcı değilim. Bu bir avantaj müşteriler ve alan uzmanları okumak ve hatta metni düzenleyebilirsiniz olmasıdır. Diğer Eğer yorumlu metin olduğu gibi, değişken kapsamına dayanarak değil olmasıdır. Ben böyle bir şey yapın:

E-posta şablonu ile metin dosyası:

Welcome, [Username]

Thank you for creating an account.
Please ... etc.

PHP istemci kod:

$templateData = array ('Username'=>$username...); // get this from a db or something in practice
$emailBody = file_get_contents ($templateFilePath);// read in the template file from above
foreach ($templateData as $key => $value){
  $emailBody = str_replace ("[$key]", $value, $emailBody);
}

Tabii ki, e-posta metnini [Kullanıcı Adı] içermesi gerekir eğer sorun olacak, ancak kendi yalancı kongre ile gelebilir. Html ya da döngüler ve koşulları gibi şeyler daha karmaşık e-postalar için, bu fikri genişletmek olabilir, ama bu bir şablon motoru kullanmak daha kolay ve güvenlidir. Ben PHPTAL seviyorum, ama düz metin bunu reddediyor.

EDIT: e-postalar için, muhtemelen bir düz metin sürümünü yanı sıra bir HTML versiyonunu istiyorum. Dosyalarını yüklemek ve ikamesi yapmak işlevleri veya yöntemlerini kullanarak rağmen, oldukça ağrısız ikinci biçimi ekleyerek yapar.

Eğer çift tırnak, yorumlu metin veya newdoc kullanabilirsiniz.

(örneğin çift dizeleri alıntı):

$template.= "Welcome $username <br /><br /><br />
Thank-you for creating an account <br /><br />
Please confirm your account by click the link below! <br /><br />
<a href='${sitepath}?email=${email}&conf_key='$key' style="color: #03110A;"><font size='5' font-family="Verdana, Geneva, sans-serif" color='#03110A'>${key}</font></a>
</body></html>";

veya (Yorumlu)

$template = <<<EOL
Welcome $username <br /><br /><br />
Thank-you for creating an account <br /><br />
Please confirm your account by click the link below! <br /><br />
<a href='${sitepath}?email=${email}&conf_key='$key' style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A">${key}</font></a>
</body></html>
EOL;

Dizeleri işleme değişkenlerin farklı yöntemleri için http://php.net/manual/en/language.types.string.php bakın.

<?php ob_start(); ?>
Welcome <?= $username ?><br /><br /><br />
Thank-you for creating an account <br /><br />
Please confirm your account by click the link below! <br /><br />
<a href="<?= $sitepath ?>?email=<?= $email ?>&conf_key=<?= $key ?>" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A"><?= $key ?></font></a>
</body></html>
<?php

$template = ob_get_content();

// to output the data:
ob_end_flush();
// or
echo $template;
// or whatever you want to do else with `$template`

http://www.php.net/manual/en/ref.outcontrol.php Bu konuda daha fazla bilgi için bkz:

Update: (Kredi için Ycros)

template_file.php:

<html><head></head><body>
Welcome <?= $username ?><br /><br /><br />
Thank-you for creating an account <br /><br />
Please confirm your account by click the link below! <br /><br />
<a href="<?= $sitepath ?>?email=<?= $email ?>&conf_key=<?= $key ?>" style="color: #03110A;"><font size="5" font-family="Verdana, Geneva, sans-serif" color="#03110A"><?= $key ?></font></a>
</body></html>

some_library_file.php

<?php
function load_template_to_string($file_name) {
  ob_start();
  include $file_name;
  return ob_get_content();
}

Bu şablonu yüklemek istediğiniz komut:

$template = load_template_to_string('template_file.php');

PHP için şablon kravat etmeyin. Siz gelecekte diğer platformlarda aynı şablonu desteklemek gerekebilir.

Yapmamız biz echo HTML içine değişkenleri enjekte emrediyorum (Server Side Include) SSI kullanmak olmasıdır. SSI desteği yoksa, sadece normal ifadeler ile PHP değişkenler değiştirebilirsiniz. Şablonu bu gibi görünüyor,

<h1>Welcome <!--#echo var="USERNAME" -->,</h1>

ADI değişken adıdır. Bu sadece şablonda PHP değişkenler koyarak daha ayrıntılı görünüyor ama uzun vadede fayda sağlayacaktır.

Bunun için bir çerçeve parça kullanarak karşı değilseniz, Zend_View için gidin.

Zend_View ile saf PHP şablonlarınızı yazabilirsiniz, ve aynı zamanda HTML çıktısı üretmek için yardımcıları çok gelir.


Ayrıca kendi şablon mekanizması oluşturmak için include() ve extract() işlevlerini kullanabilirsiniz:

$model = array('foo' => 'bar', 'baz' => array('bat', 'qux'));
extract($model);
include('template.php');

<p><?php echo $foo ?></p>
<ul>
    <?php foreach ($baz as $item) : ?>
    <li><?php echo $item ?></li>
    <?php endforeach; ?>
</ul>