6

新しいプロジェクトの開発をより簡単にしたいと考えており、最小限の非常にシンプルなテンプレート エンジン ソリューションが必要でした。私はネットを見回しましたが、すべてが肥大化しすぎているか、私をうんざりさせています。

私の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}andを置き換えたいと思っています。{PAGE_HEADER}このような:

<?php

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

?>

そして、次のようなものを使用str_replaceして、置き換えられた HTML を文字列にロードし、それをページに出力しますか? これは私が現在行っていることです...誰かアドバイスやこれをより良くする方法はありますか?

ありがとう。

4

5 に答える 5

6

現在の戦略は機能し、非常に簡単です。 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);
于 2010-04-02T00:15:35.857 に答える
5

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}}
于 2010-04-02T02:08:50.073 に答える
2

本当にシンプルにしたい場合は、PHP 自体がテンプレートのエンジンです。ただ使うinclude()

ファイル.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>

コード.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")
于 2010-04-02T00:06:11.903 に答える
0
function parseVars($vars, $file){

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

    echo $file;

}
于 2010-11-18T02:19:04.087 に答える