私はオブジェクト指向プログラミングに非常にゆっくりと没頭し始めているので、私に優しくしてください。
部分的に借用したSmartyのカスタムクラスがあります。これは、唯一の例が私の現在のプロジェクト全体でそれを使用するという基本的な考え方を反映している方法です。
class Template {
function Template() {
global $Smarty;
if (!isset($Smarty)) {
$Smarty = new Smarty;
}
}
public static function display($filename) {
global $Smarty;
if (!isset($Smarty)) {
Template::create();
}
$Smarty->display($filename);
}
次に、PHPで、上記の例に基づいてテンプレートを表示するために以下を使用します。
Template::display('head.tpl');
Template::display('category.tpl');
Template::display('footer.tpl');
次のコード例(以下を参照)を普遍的に機能させるため、各PHPファイルで上記の行(前の3行を参照)を常に繰り返すことはしません。
設定したいのですが、例:
Template::defauls();
それはロードされます:
Template::display('head.tpl');
Template::display('template_name_that_would_correspond_with_php_file_name.tpl');
Template::display('footer.tpl');
ご覧のとおりTemplate::display('category.tpl');
、PHPファイルに基づいて常に変化します。この名前はテンプレート名に対応しています。つまり、たとえば、PHPファイルに名前が付けられstackoverflow.php
ている場合、そのテンプレートはになりますstackoverflow.tpl
。
うまく機能したソリューションを試しましたが、見た目(構造)が気に入らないのです。
私がしたことは:
- configでvarを割り当て、それを呼び出します
$current_page_name
(これは、次のように現在のPHPページ名を取得します:) 。basename($_SERVER['PHP_SELF'], ".php");
たとえば、次のように返されますcategory
。 - PHPファイルで使用しました
Template::defaults($current_page_name);
- カスタムSmartyクラスで、次を追加しました。
public static function defaults($template) {
global $Smarty;
global $msg;
global $note;
global $attention;
global $err;
if (!isset($Smarty)) {
Templates::create();
}
Templates::assign('msg', $msg);
Templates::assign('note', $note);
Templates::assign('attention', $attention);
Templates::assign('err', $err);
Templates::display('head.tpl');
Templates::display($template . '.tpl');
Templates::display('footer.tpl');
}
それをより簡潔でよく構造化する方法はありますか?コードレビューについては知っていますが、皆さん、よく見ていただきたいと思います。