Değişkenler PHP şablon sınıf?

5 Cevap php

Ben daha kolay benim yeni projeler üzerinde gelişen yapmak istiyorum, ve ben bir çıplak kemikleri çok basit bir şablon motoru çözüm istedi. Ben net etrafına baktı ve her şeyin çok şişirilmiş ya, ya da bana yalakalık yapar.

Benim HTML dosyaları şöyle olacak:

<html>
    <head>
        <title>{PAGE_TITLE}</title>
    </head>
    <body>
        <h1>{PAGE_HEADER}</h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

Açıkçası, ben PHP ile ayarlanmış bir şey ile {PAGE_TITLE} ve {PAGE_HEADER} değiştirmek istiyor. Bu gibi:

<?php

    $pageElements = array(
                            '{PAGE_TITLE}' => 'Some random title.',
                            '{PAGE_HEADER}' => 'A page header!'
                         );

?>

Ve ben bu sayfaya yazdırmak ardından, str_replace gibi bir şey kullanmak ve bir dizeye yerini HTML yüklemek istiyorum? Bu ne şu anda yapıyor doğru yoldayım ... kimse herhangi bir tavsiye ya da ben bunu daha iyi yapabilirim bir yol var mı?

Teşekkürler.

5 Cevap

Geçerli strateji çalışması ve oldukça basittir olacaktır. str_replace(), verimli ve temiz, ve sadece döngü bunun tam etiketini değiştirmek için can değişken içeriği ile eşleşir. Ancak dezavantajı ilk dizeleri içine tüm şablonları yüklemek zorunda olduğunu, ve bu oldukça verimsiz olabilir.

Çok benzer bir alternatif yöntem, basitçe kullanabileceğiniz bir extract(). Özü anahtar / değer çiftleri bir dizi çekmek ve yerel kapsamda onlardan değişkenleri yaratacaktır. Aynı kapsamda size include() bir şablon varsa, değişkenleri gitmek için hazır olacak.

Böyle bir şey:

function loadTemplate($template,$vars)
{
    extract($vars);
    include($template);
}

Sizin şablon sadece düzenli PHP olabilir.

<html>
    <head>
        <title><?php echo $PAGE_TITLE ?></title>
    </head>
    <body>
        <h1><?php echo $PAGE_HEADER ?></h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

(Ben uyumluluk nedenleriyle değil tercih rağmen Açıkçası, daha az şablon ayrıntı için kısa etiketleri kullanabilirsiniz.)

Daha sonra yapmanız gereken tek şey:

$pageElements = array(
                        'PAGE_TITLE' => 'Some random title.',
                        'PAGE_HEADER' => 'A page header!'
                     );
loadTemplate('file.phtml',$pageElements);

Sen mustache.php ilginizi çekebilir. Bu Mustache gerçekten hafif PHP sınıf uygulaması bulunuyor

Hızlı örnek README alınan:

<?php
    include('Mustache.php');
    $m = new Mustache;
    echo $m->render('Hello {{planet}}', array('planet' => 'World!'));
    // "Hello World!"
?>

Ve bir daha derinlemesine bir örnek - bu kanonik Bıyık şablon:

Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{taxed_value}}, after taxes.
{{/in_ca}}

Eğer gerçekten basit olmak istiyorsanız PHP kendisi bir şablonun motorudur. sadece kullanmak include()

file.phtml:

<html>
    <head>
        <title><?=$tpl['PAGE_TITLE']?></title>
    </head>
    <body>
        <h1><?=$tpl['PAGE_HEADER']?></h1>
        <p>Some random content that is likely not to be parsed with PHP.</p>
    </body>
</html>

code.php:

tpl = Array 
(
'PAGE_HEADER' => "This is the lazy way to do it",
'PAGE_TITLE' => "I don't care because i am doing it this way anyways"
)
include("file.phtml")

Use this class Template engine with support for blocks, loops, ifset (also works in loops) and rotations. Works fast. Most suitable for small and medium projects.

http://www.phpclasses.org/package/1216-PHP-Template-engine-blocks-loops-ifset-rotations.html

fonksiyonu parseVars ($ vars, $ dosya) {

$file = file_get_contents($file);
foreach($vars as $key => $val){
    str_replace("{".$key."}", $val, $file);
}

echo $file;

}