ホームページ  >  記事  >  php教程  >  PHP テンプレート テクノロジーの原理の詳細な分析 [1]

PHP テンプレート テクノロジーの原理の詳細な分析 [1]

WBOY
WBOYオリジナル
2016-06-13 12:30:591270ブラウズ

1. テンプレートの起源
テンプレート技術が存在する前、PHP を使用してプログラムを開発する場合、通常は PHP コードと HTML が混在していました。たとえば、ニュース リストはおそらく次の構造を持つ newslist.php ページです:

//データベースから表示するニュース レコードを読み取ります
?> <🎜; >
....

<
) {
?>
<-- 出力ニュース タイトル -- >
}


それで、これの何が問題なのでしょうか?まず、分業や協力がうまくいきません。一般的に、プログラマーがコードを書き、アーティストがページをデザインします。このアプローチでは、プログラマはアーティストがインターフェイスを設計するまで待ってから作業を開始する必要があります。つまり、プログラマーとアーティストの作業を同期させることはできません。第二に、メンテナンスが容易ではなく、メンテナンス性が低い。たとえば、プログラムが修正された後にインターフェイスを変更したい場合は、アーティストがインターフェイスを変更し、その後プログラマーが再度インターフェイスを追加する必要があります。最後に、プログラムの構造はわかりにくく、読みにくいです。 HTMLとPHPが混在していて、プログラムが増えすぎると非常にごちゃごちゃになってしまいます。

テンプレートの原理を理解する - PHP タグを使用したテンプレート技術
これらの問題を解決するために登場したテンプレート技術は、PHP タグを使用したテンプレート技術です。
まず、テンプレートの目的を理解する必要があります。テンプレートは主にいくつのタスクを実行しますか?まず、アートとプログラミングの分離です。より正確には、データの取得とデータの表示の分離です。 2つ目は、分業です。分業と協力がうまくいきます。
たとえば、ニュース リストのテンプレートを使用する場合、ニュース リストの操作を 2 つの部分に分割できます。
1. getnews.php はデータベースから配列 $news にデータを読み取ります。 、$news がどのように表示されるかは気にしません。
2. Shownews.php は、$news 配列を HTML ページに出力します。そして、$news がどこから来たのかを気にする必要はありません。
このようにして、アートとプログラムの分離が完了し、当初の目的は達成されました。しかし、これら 2 つのページを結合して listnews.php の機能を実現するにはどうすればよいでしょうか。
これには、「アーティスト (データの表示)」と「プログラマー (データの取得)」を接続する別のページ listnews.php が必要です。このページは非常にシンプルです。
getnews.php のコードは次のとおりであるとします。
$news = "ニュース リスト"; //実際には、データベースから読み取られる必要があります。
?>

Shownesw.php コードは次のとおりです:

Show News

ページ listnews.php のコードは非常にシンプルです。 🎜>Include('getnews.php');//データ取得
Include('shownesw.php');//データ表示
?>

概要
テンプレートの使用PHP タグのシステムは、アーティストとプログラムを適切に分離することができ、同時にプログラマーとアーティストの間の分業を促進します。たとえば、上記の例の shownews は、.php はアーティストによって維持され、getnews.php はアーティストによって維持されます。プログラマー。また、listnews.php はシステム設計者によって保守できます。もちろん、いくつかの合意文書を追加する必要があります。
実際、この簡単な例は、最も基本的な MVC モデルも示しています。このうち、モデルの M は、getnews.php に相当するデータの読み取りを担当します。 V はデータを表示するために使用されるビューで、shownews.php に対応します。最後に、コントローラー C があります。これは listnews.php に対応します。

解釈テンプレート テクノロジを学ぶ - PHPLIB
Phplib のテンプレート システムは、その小さく、柔軟で、便利でシンプルな機能により、多くの PHP 使用者の支持を得ています。テンプレート内 IT および fasttemplate などのテンプレート エンジンは、どちらも解釈型テンプレート テクノロジです。
phplib の使い方を詳しく説明する前に、まず php タグを使用したテンプレート システムが改善され続ける必要がある理由を説明します。実際、これは主に PHP タグがアーティストにとって不便であることが原因です。彼らは、{title} などのこの視覚的なタグを直接使用することを好みます。
まず、視覚的なタグを使用するように前の例を変更しました。最初のステップは、shownews.php を shownews.tpl に変更し、shownews.tpl のコードを次のとおりです。 >ニュースを表示<br></head> <br>{title} <br></html> 、listnews.phpの効果を実現するにはどうすればよいですか?実際には、{title} を直接置き換えるだけです。したがって、変更された listnews.php コードは次のようになります: <br><? <BR>Include('getnews.php');//データを取得 <BR>echo str_replace('{title}',$news,file_get_contents) ('shownews.tpl')) <BR>?> <br><br>実際、phplib の原理はまさにこれと同じです。たとえば、phplib を使用して上記の関数を実装したい場合は、listnews.php を変更するだけで済みます。変更されたコードは次のとおりです。 /Get data <br>include ('template.class.php'); <br>$t=new Template(); <br>$t->set_file('shownesw,'shownews.tpl'); >$t->set_var ('news',$news); <br>$t->parse('out', 'shownesw'); <br>$t->p('out'); <br>?> <br>その他、phplib周りについては、対応するマニュアルをご確認ください。 <br><br>サムルティをコンパイルしました。次回も引き続き話しましょう <br></p></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="PHP でページのロールバックを実装する 2 つの方法を共有します" href="http://m.php.cn/ja/faq/209233.html">PHP でページのロールバックを実装する 2 つの方法を共有します</a></span><span>次の記事:<a class="dBlack" title="PHP でページのロールバックを実装する 2 つの方法を共有します" href="http://m.php.cn/ja/faq/209236.html">PHP でページのロールバックを実装する 2 つの方法を共有します</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/92233.html" title="Windows7系统下Netbeans+PHPUnit搭建PHP单元测试开发环境及PHPUn" class="aBlack">Windows7系统下Netbeans+PHPUnit搭建PHP单元测试开发环境及PHPUn</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/97151.html" title="程序猿ProMonkey V2.03" class="aBlack">程序猿ProMonkey V2.03</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/94770.html" title="PHP Navigator" class="aBlack">PHP Navigator</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/90182.html" title="php返回数组中指定的一列(php5.5.0默认函数array_column()在php" class="aBlack">php返回数组中指定的一列(php5.5.0默认函数array_column()在php</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/208396.html" title="htmlentitiesとhtmlspecialcharsの違いの詳しい説明" class="aBlack">htmlentitiesとhtmlspecialcharsの違いの詳しい説明</a><div class="clear"></div></li></ul></div></div><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="http://m.php.cn/ja/about/us.html">私たちについて</a><a href="http://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="http://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>