[抱歉我的英语不好]
我正在尝试让我的php动态添加到我的模板中以调用母版块。下面是我目前显示的模板代码和母版页。
------------------- default.tpl ---------------------- ---
<!-- default.tpl -->
<!doctype html>
<html lang="pt-br">
<head>
<meta charset="UTF-8" />
<title>Project</title>
</head>
<body>
<div class="container">
{block name="content"}{/block}
</div>
{block name="javascript"}{/block}
</body>
------------------- index.tpl ---------------------- ---
{extends file="default.tpl"}
{block name="content"}
Hello World
{/block}
------------------- index.php ---------------------- ---
$this->smarty->extends('default.tpl'); //I don't know if is possible do something like this
$this->smarty->blocks('javascript',array('//cdn.jquery.com')); //I don't know if is possible do something like this too
$this->smarty->display('index');
答案 0 :(得分:1)
Smarty几乎按照你描述的方式工作,但语法略有不同。这就是你需要写它的方式:
default.tpl (片段)
<body>
<div class="container">
{$text}
</div>
{foreach from=$javascript item=script}
<script src="{$script}"></script>
{/foreach}
</body>
<强>在index.tpl 强>
{capture name=content}
Hello world
{/capture}
{include file='default.tpl' text=$smarty.capture.content}
<强>的index.php 强>
$this->smarty->assign('javascript', array('//cdn.jquery.com'));
$this->smarty->display('index.tpl');
这就是Smarty的工作方式。有关详细信息,请阅读documentation。基本用法在第3-13节中解释。
更新:此解决方案提供了Smarty 2的处理方式。此外,链接转到Smarty 2的文档。我不知道Smarty 3中实现的所有新功能。但是,这里介绍的方式也适用于Smarty 3(我使用Smarty 3)自2010年以来,但从未感觉到需要Smarty 2中没有的功能。)
答案 1 :(得分:1)
两个模板文件都很好看。问题出在PHP文件中:
$this->smarty->extends('default.tpl'); //I don't know if is possible do something like this
没有名为extends()
的方法。在模板中使用模板函数{extend}
。
$this->smarty->blocks('javascript',array('//cdn.jquery.com')); //I don't know if is possible do something like this too
没有名为block()
或blocks()
的方法。您可以使用与index.tpl
相同的方式在子模板(content
)中定义块的内容,也可以将数据分配给模板变量并将其显示在模板中。标量变量可以使用语法{$variable}
显示,而数组可以使用{foreach}
内置函数进行迭代。
$this->smarty->display('index');
这也不起作用,因为模板的名称是'index.tpl'
,而不只是'index'
。 Smarty不会自行附加终止。它只是尝试使用您提供的名称查找文件。
我通过添加
找到了脚本无法正常工作的所有原因error_reporting(E_ALL);
ini_set('display_errors', '1');
在您的脚本之上。 不要阻止PHP在开发计算机上显示错误。在生产服务器上执行此操作仅。