PHP-smarty如何用内容做为模板渲染页面?

PHP-smarty如何用内容做为模板渲染页面?

浮生未歇 发布于 2017-02-05 字数 605 浏览 1565 回复 5

在smarty里,通常我们都通过$smarty->display("a.tpl"),其中a.tpl是模板的名称。
但是现在我没有模板文件,这个模板的内容是通过数据读出来的。而且没有生成模板文件(也就是没有a.tpl),那怎么通过返回来的内容当作模板来渲染页面呢?

这里说明一下:我的模板页面的内容是通过另外一个接口获取过来的,而本系统用的是smarty模板引擎,对方的模板引擎也是Smarty,我知道如果不通过smarty也是可以实现的,但我想问的是如果这样能实现,我就不需要对方另外写一个模板定义给我们,直接把对方原来写好的模板拿过来,在我们这边系统直接assign就行了。如果不行的话我只能让他们给我另外写一个模板定义了,这是我问这个问题的本意。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

想挽留 2017-10-30 5 楼

你要的是这个东西

$smarty=$this->smarty;
$smarty->assign('foo','value');
$template_string = 'display {$foo} here';
$smarty->display('string:'.$template_string); // compiles for later reuse
$smarty->display('eval:'.$template_string); // compiles every time

smarty 3.0.9 测试通过

灵芸 2017-09-15 4 楼

开始我理解错误了,不好意思。

如果是你通过接口接收过来的模板,而且接收的模板里面的变量、循环、条件判断等都按smarty模板规则写的,你完全可以把接收过来的数据生成一个模板文件放到你模板目录里,然后照常assign。
相反如果不是按照smarty模板规则,那估计是不能直接assign变量了吧,只能在php里进行匹配替换成模板里面的变量数据。

偏爱自由 2017-05-11 3 楼

没用过smarty,我想他就是include或fopen文件,然后对里面的模版标签匹配替换吧。那你得追踪下display方法,你判断,如果参数是一个文件,正常处理,否则认为是一个变量。直接处理。

fopen也是读取文件,将内容赋予变量,然后再匹配和替换的吧

夜无邪 2017-04-09 2 楼

将获取到的 模版内容 直接写到一个缓存文件里面 此时就有个文件名称 这个名字可以 md5 下

然后 在模版里面 加载进来不行么?

对 这个中间的步骤可以单独写个函数,注入到 smarty中 无非是这个过程

不理解楼上的讨论那么多的弯路

偏爱自由 2017-02-13 1 楼

使用fetch例如:

{fetch file="http://www.myweather.com/68502/" assign="weather"}

属性    类型    是否必须    缺省值       描述
file     string    Yes    n/a    待请求的文件,http或ftp方式.
assign   string    No      n/a    输出值将被赋给模板变量的名称

补充一点,手册上说不支持重定向。还有url后面需要加 /