この記事ではthinkphp3.xにおけるdisplayメソッドとshowメソッドの使用方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
前回の記事でコントローラーとモデルの操作を理解した後、ThinkPHP のビューとは主にテンプレート ファイルとテンプレート エンジンを指します。この記事では、まずテンプレート ファイルとそのレンダリング方法を理解します。出力。
1. テンプレートの定義
テンプレート ファイルをより効果的に管理するために、ThinkPHP はテンプレート ファイルをディレクトリに分割します。 デフォルトのテンプレート ファイル定義ルールは次のとおりです。
テンプレートディレクトリ/[グループ名/][テンプレートテーマ/]モジュール名/オペレーション名+テンプレートサフィックスデフォルトのテンプレート ディレクトリはプロジェクト内の Tpl です。グループが定義されると、新しいバージョンのテンプレート テーマはデフォルトで空になります (テンプレート テーマ機能が有効になっていないことを示します)。
テンプレート テーマ機能は、複数のテンプレート テーマを切り替えるように設計されています。複数のテンプレート テーマがある場合、DEFAULT_THEME パラメーターを使用してデフォルトのテンプレート テーマ名を設定できます。
各テンプレート テーマの下には、プロジェクトのモジュール名を含むディレクトリがあり、次に各モジュールの特定の操作テンプレート ファイルが含まれます。例:
User モジュールの追加操作に対応するテンプレート ファイルは次のとおりです:
Tpl/User/add.htmlテンプレート ファイルのデフォルトのサフィックスは .html ですが、TMPL_TEMPLATE_SUFFIX を通じて別のサフィックスに構成することもできます。たとえば、次のように設定できます:
リーリー定義後、User モジュールの追加操作に対応するテンプレート ファイルは次のようになります:
Tpl/ユーザー/add.tplプロジェクトでモジュール グループ化機能が有効になっている場合 (ユーザー モジュールがホーム グループに属していると仮定)、デフォルトの対応するテンプレート ファイルは次のようになります:
Tpl/Home/User/add.htmlグループ モードでは、ディレクトリ構造が深すぎると感じる場合は、TMPL_FILE_DEPR パラメータを設定することで、簡略化されたテンプレートのディレクトリ階層を構成できます。たとえば、次のように設定します。 リーリー
デフォルトのテンプレートファイルは次のようになります:
Tpl/Home/User_add.html
システムにはテンプレート ファイルを自動的に識別するためのルールがあるため、テンプレートのレンダリング出力が簡素化されます。
2. テンプレートのレンダリング
テンプレートを定義した後、display メソッドと show メソッドを通じて出力をレンダリングできます。 display メソッドではテンプレート ファイルを定義する必要がありますが、show メソッドではコンテンツ出力が直接レンダリングされます。
最も一般的に使用されるのは、表示メソッド、呼び出し形式です:最初のタイプ:
display('[トピック:][モジュール:][オペレーション]'[,'文字エンコーディング'][,'出力タイプ'])2 番目のタイプ:
display('完全なテンプレートファイル名'[,'文字エンコーディング'][,'出力タイプ'])以下はパラメータを指定しない最も一般的な使用法です: リーリー
は、システムがデフォルトのルールに従ってテンプレート ファイルを自動的に検索することを意味します。そのため、通常、表示メソッドはパラメーターなしで対応するテンプレートを出力できます。これはテンプレート出力を使用する最も簡単な方法です。テンプレート ファイルがテンプレート定義ルールに従って定義されていない場合、または他のモジュールでテンプレートを呼び出す必要がある場合は、次を使用できます:
リーリー
は、現在のモジュールの下で編集テンプレートを呼び出すことを意味しますリーリー
は、Member モジュールの下で読み取りテンプレートを呼び出すことを意味します。テンプレート テーマ関数を使用する場合は、テーマ間呼び出しもサポートできます。次を使用します。
リーリー
は、テーマの下でUserモジュールの編集テンプレートを呼び出すことを意味します。このメソッドのレンダリング出力には、テンプレート ファイルのパスとサフィックスを書き込む必要はありません。正確に言うと、ここでのモジュールと操作には、必ずしも対応するモジュールや操作がある必要はありません。単にディレクトリ名とファイル名だけです。たとえば、プロジェクトには Public モジュールのメニュー操作はおろか、Public モジュールがまったくない場合もありますが、それでも使用できます
リーリー
このテンプレート ファイルをエクスポートします。これを理解すると、テンプレートの出力が明確になります。表示メソッドは、出力をレンダリングする際の出力エンコーディングとタイプの指定をサポートしています。例:
リーリー
出力 XML ページのタイプを示します (アプリケーションのニーズを満たすために多くのタイプを出力できます)。テンプレート ディレクトリがカスタマイズされている場合、またはモジュールに従ってサブディレクトリに保存する必要がない場合は、現時点では、別の方法を使用して処理する必要があります。これを使用して、直接テンプレート ファイル名を渡すだけです。例:
リーリー
この方法では、テンプレートのパスとサフィックスを指定する必要があります。ここでのパブリック ディレクトリは、現在のプロジェクト エントリ ファイルの場所の下にあります。別のサフィックス ファイルの場合は、次のような直接出力もサポートされます。 リーリー./Public/menu.tpl が実際に存在するテンプレート ファイルである限り。
テンプレート ファイルの場所は、テンプレート ディレクトリではなく、プロジェクトのエントリ ファイルに相対的なものであることに注意してください。
还有一种情况是,你需要获取渲染模板的输出内容,就可以使用fetch方法,fetch方法的用法和display基本一致,区别就在于fetch方法渲染后不是直接输出,而是返回渲染后的内容,例如:
$content = $this->fetch('Member:edit');
使用fetch方法获取渲染内容后,你可以进行过滤和替换等操作,用于对模板输出的复杂需求。
如果你没有定义任何模板文件,或者把模板内容存储到数据库中的话,你就需要使用show方法来渲染输出了,show方法的调用格式:
show('渲染内容'[,'字符编码'][,'输出类型'])
例如,
$this->show($content);
也可以指定编码和类型:
$this->show($content, 'utf-8', 'text/xml');
show方法中的内容也可以支持模板解析。
三、模板赋值
我们知道了如何渲染模板输出,但是如果要在模板中输出变量,必须在在控制器中把变量传递给模板,提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。
$this->assign('name',$value); //下面的写法是等效的: //$this->name = $value;
assign方法必须在display和show方法之前调用,并且系统只会输出设定的变量,其它变量不会输出(系统变量可以通过特殊的标签输出,可以无需赋值模板变量),一定程度上保证了变量的安全性。
赋值后,就可以在模板文件中输出变量了,如果使用的是内置模板的话,就可以这样输出:
{$name}
如果要同时输出多个模板变量,可以使用下面的方式:
$array['name'] = 'thinkphp'; $array['email'] = 'liu21st@gmail.com'; $array['phone'] = '12335678'; $this->assign($array);
这样,就可以在模板文件中同时输出name、email和phone三个变量。
模板变量的输出根据不同的模板引擎有不同的方法,我们在后面会专门讲解内置模板引擎的用法。如果你使用的是PHP本身作为模板引擎的话 ,就可以直接在模板文件里面输出了:
<?php echo $name.'['.$email.''.$phone.']';?>
如果采用内置的模板引擎,可以使用:
{$name} [ {$email} {$phone} ]
输出同样的内容。
关于更多的模板标签使用,我们会在后面模板标签中详细讲解。
四、模板替换
在进行模板输出之前,系统还可以对渲染的模板结果进行一些模板的特殊字符串替换操作,也就是实现了模板输出的替换和过滤。这个机制可以使得模板文件的定义更加方便,默认的替换规则有:
../Public: 会被替换成当前项目的公共模板目录 通常是 /项目目录/Tpl/当前主题/Public/
__TMPL__: 会替换成项目的模板目录 通常是 /项目目录/Tpl/当前主题/
(注:为了部署安全考虑,../Public和__TMPL__不再建议使用)
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前项目的URL地址 (不含域名)
__GROUP__:会替换成当前分组的URL地址 (不含域名)
__URL__: 会替换成当前模块的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL
注意这些特殊的字符串是严格区别大小写的,并且这些特殊字符串的替换规则是可以更改或者增加的,我们只需要在项目配置文件中配置TMPL_PARSE_STRING就可以完成。如果有相同的数组索引,就会更改系统的默认规则。例如:
'TMPL_PARSE_STRING' =>array( '__PUBLIC__' => '/Common', // 更改默认的/Public 替换规则 '__JS__' => '/Public/JS/', // 增加新的JS类库路径替换规则 '/Uploads' => '/Uploads', // 增加新的上传路径替换规则 )
有了模板替换规则后,页面上所有的__PUBLIC__ 字符串都会被替换,那如果确实需要输出__PUBLIC__ 字符串到模板呢,我们可以通过增加替换规则的方式,例如:
'TMPL_PARSE_STRING' =>array( '--PUBLIC--' => '__PUBLIC__', // 采用新规则输出/Public字符串 )
这样增加替换规则后,如果我们要输出__PUBLIC__ 字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。
五、总结
通过本篇的学习,我们大概掌握了如何定义模板文件和进行模板渲染输出,以及如何赋值模板变量,后面我们将会学习如何在模板文件中使用标签来简化你的书写。
PS:这里推荐几款本站的格式化美化工具,相信大家在以后的开发中能够用得上:
php代码在线格式化美化工具:
http://tools.jb51.net/code/phpformat
JavaScriptコードの美化/圧縮/フォーマット/暗号化ツール:
http://tools.jb51.net/code/jscompress
オンライン XML フォーマット/圧縮ツール:
http://tools.jb51.net/code/xmlformat
JSON コードのフォーマットおよび美化ツール:
http://tools.jb51.net/code/json
オンライン XML/JSON 変換ツール:
http://tools.jb51.net/code/xmljson
SQL コードのオンライン書式設定および美化ツール:
http://tools.jb51.net/code/sqlcodeformat
より thinkPHP 関連のコンテンツに興味のある読者は、このサイトの特別トピック「ThinkPHP 入門チュートリアル」、「ThinkPHP 一般的なメソッドの概要」、「Smarty テンプレートの基本チュートリアル」、および「PHP テンプレート テクノロジの概要」をチェックしてください。
この記事が皆さんの ThinkPHP フレームワークに基づく PHP プログラムの設計に役立つことを願っています。