Smarty 图标

您可以根据 商标声明 使用 Smarty 徽标。

Smarty Template Engine Smarty Template Engine

对于赞助、广告、新闻或其他查询,请通过以下方式与我们联系

使用 Smarty 的网站

广告

第 16 章。资源

模板可能来自各种来源。当您 display()fetch() 模板或从另一个模板包含模板时,您将提供一个资源类型以及相应的路径和模板名称。如果没有明确指定资源,$default_resource_type(默认:"file")的值将成立。

文件模板资源

Smarty 内置了一个文件系统的模板资源。file: 是默认资源。仅当 $default_resource_type 已更改时,才必须指定资源密钥 file:

如果文件资源找不到请求的模板,则会调用 $default_template_handler_func

$template_dir 中的模板

文件资源从 $template_dir 中指定目录拉取模板源文件。目录列表按其在数组中出现的顺序进行遍历。找到的第一个模板将被处理。

示例 16.1。使用 $template_dir 中的模板

<?php
$smarty->display('index.tpl');
$smarty->display('file:index.tpl'); // same as above
?>

   

来自 Smarty 模板

{include file='index.tpl'}
{include file='file:index.tpl'} {* same as above *}

   

特定 $template_dir 中的模板

Smarty 3.1 为指定元素从变量$template_dir引入方括号语法。它可以使采用多组模板的网站能够更好地控制要访问的模板。

方括号语法适用于可以指定file:资源类型中模板的任何位置。

示例 16.2 指定要使用的 $template_dir

<?php

// setup template directories
$smarty->setTemplateDir(array(
    './templates',            // element: 0, index: 0
    './templates_2',          // element: 1, index: 1
    '10' => 'templates_10',   // element: 2, index: '10'
    'foo' => 'templates_foo', // element: 3, index: 'foo'
));

/*
  assume the template structure
  ./templates/foo.tpl
  ./templates_2/foo.tpl
  ./templates_2/bar.tpl
  ./templates_10/foo.tpl
  ./templates_10/bar.tpl
  ./templates_foo/foo.tpl
*/

// regular access
$smarty->display('file:foo.tpl'); 
// will load ./templates/foo.tpl

// using numeric index
$smarty->display('file:[1]foo.tpl'); 
// will load ./templates_2/foo.tpl

// using numeric string index
$smarty->display('file:[10]foo.tpl'); 
// will load ./templates_10/foo.tpl

// using string index
$smarty->display('file:[foo]foo.tpl'); 
// will load ./templates_foo/foo.tpl

// using "unknown" numeric index (using element number)
$smarty->display('file:[2]foo.tpl'); 
// will load ./templates_10/foo.tpl

?>

   

来自 Smarty 模板

{include file="file:foo.tpl"}
{* will load ./templates/foo.tpl *}

{include file="file:[1]foo.tpl"}
{* will load ./templates_2/foo.tpl *}

{include file="file:[foo]foo.tpl"}
{* will load ./templates_foo/foo.tpl *}

   

任何目录中的模板

$template_dir 之外的模板需要file:模板资源类型,后跟模板的绝对路径(带前置斜杠)。

注意

启用Security后,只有在您在$secure_dir 中列出这些目录的情况下,才允许访问$template_dir之外的模板。

示例 16.3 使用任何目录中的模板

<?php
$smarty->display('file:/export/templates/index.tpl');
$smarty->display('file:/path/to/my/templates/menu.tpl');
?>

   

以及在 Smarty 模板内部

{include file='file:/usr/local/share/templates/navigation.tpl'}

   

Windows 文件路径

如果您使用的是 Windows 机器,文件路径通常在路径名的开头包含一个驱动器号 (C:)。请务必在路径中使用file:来避免命名空间冲突并获得所需的结果。

示例 16.4 从 Windows 文件路径使用模板

<?php
$smarty->display('file:C:/export/templates/index.tpl');
$smarty->display('file:F:/path/to/my/templates/menu.tpl');
?>

  

以及在 Smarty 模板内部

{include file='file:D:/usr/local/share/templates/navigation.tpl'}