簡體   English   中英

帶有變量的PHP模板類?

[英]PHP template class with variables?

我想讓我的新項目更容易開發,我想要一個非常簡單的模板引擎解決方案。 我在網上四處看看,一切都太臃腫了,還是讓我畏縮不前。

我的HTML文件將是這樣的:

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

顯然,我想用我用PHP設置的東西替換{PAGE_TITLE}{PAGE_HEADER} 像這樣:

<?php

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

?>

我會使用類似str_replace東西並將替換后的HTML加載到字符串中,然后將其打印到頁面中? 這就是我現在正在做的事情......有沒有人有任何建議或方法我可以做得更好?

謝謝。

您當前的策略將起作用,並且非常簡單。 str_replace()是高效和干凈的,您可以簡單地循環它以用您的變量內容替換精確的標記匹配。 但是,缺點是您必須首先將所有模板加載到字符串中,這可能效率很低。

另一種非常相似的方法是你可以簡單地使用extract() Extract將采用一組鍵/值對,並在本地范圍內創建變量。 如果在同一范圍內include()模板,那么您的變量就可以運行了。

像這樣的東西:

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

您的模板可能只是普通的PHP。

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

(顯然你可以使用短標簽來減少模板的冗長,盡管我不願意出於兼容性原因。)

那么你所要做的就是:

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

您可能對mustache.php感興趣。 它是Mustache非常輕量級的PHP類實現

從README中獲取的簡單示例:

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

還有一個更深入的例子 - 這是規范的Mustache模板:

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

如果你想要非常簡單,PHP本身就是模板的引擎。 只需使用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")

使用此類模板引擎,支持塊,循環,ifset(也適用於循環)和旋轉。 工作得很快。 最適合中小型項目。

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

function parseVars($vars, $file){

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

    echo $file;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM