jake你好,如何在模板中引入动态内容呢?
发布于:2022-01-17 09:50:54
#1 aapill
jake是这样的,我有个模板主页,其代码如下:其下有动态内容,比如说RIGHT.HTML其必须先访问控制器其中的内容才能输出。应该如下改变模板在其中才能引入动态内容呢!谢谢JAKE的回答。
中国会销赠品网 <{include file='top.html'}>
<{include file="left.html"}>
<{include file="right.html"}>
<{include file='main.html'}>
2010-09-06 22:21:30
#2 aapill
呵呵,此问题已经解决,只要在INDEX这个函数中引入其它函数则可以将其它内容引入,谢谢SPEEDPHP,我发现不管有多少问题,只要在论坛上一提出,问题就能解决,在提出问题的同时也开拓了自已的思路,呵呵
2010-09-06 22:23:30
#3 aapill
回复 2 aapill 又有些问题出现了,如果加载RIGHT函数,如果RIGTH函数中引入了模板也就是有$this->display('right.html');的话那么在主页中RIGHT.HTML则会被引入两次,则又会出现问题,但是如果把$this->display('RIGHT.HTML')去掉的话则会出来效果,请问去掉$this->display('right.html')是问题的最终解决办法吗?如果不是。那又应该是怎么样的呢?
2010-09-06 22:35:54
#4 jake
其实你说的包括了两种做法:
1. 通过smarty的include来“包含”其他模板,<{include file="left.html"}>,这种方法,在function index()函数内,对模板赋值就需要包括left.html内使用的变量。比如说left.html里面有个叫$mytypes的变量。
left.html
这里是侧栏 <{foreach from=$mytypes item=mytype}><{$mytype.name}> <{/foreach}>然后function index内,则需要
$this->mytypes = xxx;
也就是说,使用smarty的include,就相等于将多个模板合并在一起,赋值也是需要直接对合并的模板赋值。
2. 另外一种,就是通过main控制器类的其他函数,比如说function left()函数来取值。
class main extands spController{
function index(){
$this->mylefthtml = $this->left();
$this->display('index.html');
}
function left(){
$this->mytypes = xxx;
return $this->display('left.html',
TRUE ); // 这里的TRUE代表只返回模板HTML,不显示模板
}
}
然后index.html里面就是
这里是侧栏 <{$mylefthtml }>
刚才第一种方法的ul,li等,在left.html内
<{foreach from=$mytypes item=mytype}><{$mytype.name}> <{/foreach}>这种方式,其实就是将function left()当作一个数据(HTML)来源,然后在index函数内赋值给模板,然后模板再显示。
以上两种方法,都有各自的好处,第一种方法模板方面比较统一,因为都是通过index函数来进行赋值,但是不足的地方是index函数需要比较多的赋值。
第二种方法赋值比较清晰,每个函数(index,left)都可以负责自己部分的赋值,不需要全部堆到index里面来进行赋值。然后再通过display的返回(第二个参数TRUE)来对独立模板赋值。同时不足的地方,在于方法的不统一,因为index内的display是直接显示的,而left内的display是返回的。
2010-09-06 23:15:04
#5 aapill
回复 4 jake 谢谢JAKE的回答,明白了,谢谢
2010-09-10 16:08:17
#6 aapill
回复 5 aapill jake,还是这个问题,你看我这个错在哪里,我把DISPLAY设置为了TRUE,但是依然显示模板,也就是有了双层模板,你看看是哪的问题,下面为其部分代码,你看我这样写对不对呢
class main extends spController
{
function index(){
$this->result=$this->right();
$this->display("index.html");
}
function right(){
$shop_goods=spClass("shop_goods");
$conditions=array("qianggou"=>"1","if_sale"=>"1");
$this->result=$shop_goods->findAll($conditions);
return $this->display("right.html",TRUE);
}
}
显示页为$this->result 传递过去的$result,变量,你看看问题在哪里
2010-09-11 14:00:30
#7 jake
看不出来那里有问题,或者你可以拿论坛内的winblog例子作为参考一下,那个例子里面几乎都是这样显示的模板。
2010-09-11 20:49:22
#8 aapill
好的,JAKE谢谢,也就是这种方法吧,其实在INDEX中返回函数就行了
2010-09-13 22:29:20