Smarty include_php


include_php

 

Attribute Name Type Required Default 描述
file string Yes n/a The name of the php file to include
once boolean No true whether or not to include the php file more than once if included multiple times
assign string No n/a The name of the variable that the output of include_php will be assigned to

屬性 型別 是否必須 預設值 描述
file string Yes n/a 待包含php檔案的名稱
once boolean No true 如果待包含php檔案已被包含是否仍然包含(類似php中的include_once函式)
assign string No n/a 該屬性指定一個變數儲存待包含php檔案的輸出

 

inluce_php 函式用於在模板中包含 php 指令碼. 如果設定了安全模式,被包含的指令碼必須位於 $trusted_dir 路徑下. include_php 函式必須設定 file 屬性,該屬性指明被包含 php 檔案的路徑,可以是 $trusted_dir 的相對路徑,也可以是絕對路徑.

include_php 是解決模板部件化的好方法,它使得 php 程式碼從模板檔案中被分離出來. 舉個例子:假設有一個從資料庫中動態取出資料用於顯示站點導航的模板,你可以將得資料內容的 php 邏輯部分分離出來儲存在一個單獨的檔案夾下,並在模板開始的位置包含該 php 指令碼. 那麼就可以在任何地方包含此模板而不用擔心之前資料庫資訊是否已被程式取出.

 

即使是在模板中多次地呼叫 php 檔案,預設情況下它們只被包含一次. 你可以設定 once 屬性從而指明每次呼叫都重新包含該檔案. 如果將 once 屬性設定為 false,每次呼叫該檔案都將被重新包含.

 

如果設定了 assign 屬性,該屬性對應的變數名用於儲存待包含 php 的輸出,這樣待包含 php 檔案的輸出就不會直接顯示了。

 

在待包含 php 檔案中可以通過 $this 存取 smarty 物件.


Example 7-9. function include_php
例 7-9. include_php 函式演示

load_nav.php
-------------

<?php

	// load in variables from a mysql db and assign them to the template
	// 從mysql資料庫中取得資料,將資料賦給模板變數
	require_once("MySQL.class.php");
	$sql = new MySQL;
	$sql->query("select * from site_nav_sections order by name",SQL_ALL);
	$this->assign('sections',$sql->record);

?>


index.tpl
---------

{* absolute path, or relative to $trusted_dir *}
{* 絕對路徑或 $trusted_dir 的相對路徑 *}
{include_php file="/path/to/load_nav.php"}

{foreach item="curr_section" from=$sections}
	<a href="{$curr_section.url}">{$curr_section.name}</a><br>
{/foreach}