jake你好,如何在模板中引入动态内容呢?

#1 aapill

jake是这样的,我有个模板主页,其代码如下:其下有动态内容,比如说RIGHT.HTML其必须先访问控制器其中的内容才能输出。应该如下改变模板在其中才能引入动态内容呢!谢谢JAKE的回答。





   
中国会销赠品网



      

          <{include file='top.html'}>
      

      

           <{include file="left.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