1

php/mysql を使用して動的な Web サイトを作成します。純粋な php コード + html を使用した印刷データのテンプレート。今、混合php + htmlの構造のためのより良い、最適化された、より速い方法は?(テンプレートエンジンなし)

私が持っている各ページについて:ex.1(ラッパーの前のphpコード)

<?PHP include ( DEFINE_SITE . '/templates/header.php' );

// isset : post : get : SELECT : INSERT ... Or ANY CODE OF PHP
 ?>

<div id="wrapper">
<div id="leftsidebar"><?PHP // Left DATA ?></div>
<div id="centercontent">

<?PHP // while {} Print result of php  ANY LOOPS ..... ?>

</div>
<div id="rightsidebar"><?PHP // Right DATA ?></div>
</div>
<?PHP include ( DEFINE_SITE . '/templates/footer.php' ); ?>

私が持っている各ページについて:ex.2(サイドバーの後、中央のコンテンツの前)

<?PHP include ( DEFINE_SITE . '/templates/header.php' );

<div id="wrapper">
<div id="leftsidebar"><?PHP // Left DATA ?></div>
<?PHP // isset : post : get : SELECT : INSERT ... Or ANY CODE OF PHP ?>
<div id="centercontent">

<?PHP // while {} Print result of php  ANY LOOPS ..... ?>

</div>
<div id="rightsidebar"><?PHP // Right DATA ?></div>
</div>

<?PHP include ( DEFINE_SITE . '/templates/footer.php' );?>

どちらが良いですか?ex 1 または ex 2 ? あなたの意見 ?

4

2 に答える 2

0

HTML と PHP を分けておくことをお勧めします。テンプレート システムを使用したくない場合は、このようにしてみませんか?

HTML テンプレートを作成します。

<div id="wrapper">
    <div id="leftsidebar">{LEFT}</div>
    <div id="centercontent">{CONTENT}</div>
    <div id="rightsidebar">{RIGHT}</div>
</div>

別のphpファイルで:

$content = file_get_contents('template.html');
$templateVars = array();

startVar('CONTENT');
echo '<p>This is the content.</p>'; // New template vars are also allowed
endVar('CONTENT');

echo replaceTemplateVars($content);

/**
 * Replace template variables recursively with the key-value pairs that are in the $templateVars queue
 * @param string $content (default NULL) is code to convert.
 * @return the string that is replaced
 */
function replaceTemplateVars($content = NULL)
{
    global $templateVars;
    $matches = array();
    preg_match_all("/{[A-Z0-9_:]*}/", $content, $matches); // $matches = All vars found in your template
    foreach($matches[0] as $key)
    {
        if(isset($templateVars[substr($key, 1, -1)]))
        {
            $content = str_replace($key, $templateVars[substr($key, 1, -1)], $content); // Substitute template var with contents
        }
        else
        {
            $content = str_replace($key, "", $content); // Remove empty template var from template
        }
    }

    // Check if the replacement has entered any new template variables, if so go recursive and replace these too
    if(preg_match_all("/{[A-Z0-9_:]*}/", $content, $matches))
    {
        $content = replaceTemplateVars($content);
    }

    return $content;
}

/**
 * Start output buffer for a template key
 * @param string $key is not used. Only for overview purposes
 */
function startVar($key)
{
    ob_start();
}

/**
 * End output buffer for a template key and store the contents of the output buffer in the template key
 * @param string $key
 */
function endVar($key)
{
    setVar($key, ob_get_contents());
    ob_end_clean();
}

/**
 * @param string $key to store value in
 * @param mixed $value to be stored
 */
function setVar($key, $value)
{
    global $templateVars;
    $templateVars[$key] = $value;
}

そして、これはあなたの画面に表示されるものです:

<div id="wrapper">
    <div id="leftsidebar"></div>
    <div id="centercontent"><p>This is the content.</p></div>
    <div id="rightsidebar"></div>
</div>

したがって、前処理が最初に行われ、最後にすべての html コードが出力されます。

もちろん、 and のような関数を追加startPrependVar()startAppendVar()て、すべてを Template クラスにラップして、グローバル スコープを取り除くこともできます。

于 2012-04-12T12:35:05.797 に答える
0

なぜテンプレートエンジンを嫌うのですか? 実際には、PHP はテンプレート エンジンですが、(Twig などの) いくつかを調べてみると、テンプレート エンジンを使用せずに、より柔軟で高速で応答性の高いものを設計するのに役立つかもしれません。私のような ;-)

于 2012-04-12T12:18:22.257 に答える