SpeedPHP技术交流论坛

 找回密码
 论坛注册

用新浪微博连接

一步搞定

QQ登录

只需一步,快速开始

查看: 1096|回复: 7

jake你好,如何在模板中引入动态内容呢?   [复制链接]

Rank: 4

发表于 2010-9-6 22:21:30 |显示全部楼层
jake是这样的,我有个模板主页,其代码如下:其下有动态内容,比如说RIGHT.HTML其必须先访问控制器其中的内容才能输出。应该如下改变模板在其中才能引入动态内容呢!谢谢JAKE的回答。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="dyhdejiqi" />
    <link rel="stylesheet" href="css/main.css" type="text/css">
<title>中国会销赠品网</title>
</head>
<body>
<div id="contrainer">
      <div id="top">
          <{include file='top.html'}>
      </div>
      <div id="left">
           <{include file="left.html"}>
      </div><div id="right">
      <{include file="right.html"}>
      </div>
      <img src="image/79.jpg">
      <div id="main_goods">
      <{include file='main.html'}>
      </div>
        <img src="image/22.jpg">
</div>
</body>
</html>
speedph粉丝

Rank: 4

发表于 2010-9-6 22:23:30 |显示全部楼层
呵呵,此问题已经解决,只要在INDEX这个函数中引入其它函数则可以将其它内容引入,谢谢SPEEDPHP,我发现不管有多少问题,只要在论坛上一提出,问题就能解决,在提出问题的同时也开拓了自已的思路,呵呵
speedph粉丝

Rank: 4

发表于 2010-9-6 22:35:54 |显示全部楼层
回复 2# aapill


    又有些问题出现了,如果加载RIGHT函数,如果RIGTH函数中引入了模板也就是有$this->display('right.html');的话那么在主页中RIGHT.HTML则会被引入两次,则又会出现问题,但是如果把$this->display('RIGHT.HTML')去掉的话则会出来效果,请问去掉$this->display('right.html')是问题的最终解决办法吗?如果不是。那又应该是怎么样的呢?
speedph粉丝

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-9-6 23:15:04 |显示全部楼层
其实你说的包括了两种做法:
1. 通过smarty的include来“包含”其他模板,<{include file="left.html"}>,这种方法,在function index()函数内,对模板赋值就需要包括left.html内使用的变量。比如说left.html里面有个叫$mytypes的变量。
left.html
<h2>这里是侧栏</h2>
<ul class="left">
<{foreach from=$mytypes item=mytype}>
<li><{$mytype.name}></li>
<{/foreach}>
</ul>

然后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里面就是
<h2>这里是侧栏</h2>
<{$mylefthtml }>

刚才第一种方法的ul,li等,在left.html内
<ul class="left">
<{foreach from=$mytypes item=mytype}>
<li><{$mytype.name}></li>
<{/foreach}>
</ul>

这种方式,其实就是将function left()当作一个数据(HTML)来源,然后在index函数内赋值给模板,然后模板再显示。

以上两种方法,都有各自的好处,第一种方法模板方面比较统一,因为都是通过index函数来进行赋值,但是不足的地方是index函数需要比较多的赋值。
第二种方法赋值比较清晰,每个函数(index,left)都可以负责自己部分的赋值,不需要全部堆到index里面来进行赋值。然后再通过display的返回(第二个参数TRUE)来对独立模板赋值。同时不足的地方,在于方法的不统一,因为index内的display是直接显示的,而left内的display是返回的。

Rank: 4

发表于 2010-9-10 16:08:17 |显示全部楼层
回复 4# jake


    谢谢JAKE的回答,明白了,谢谢
speedph粉丝

Rank: 4

发表于 2010-9-11 14:00:30 |显示全部楼层
回复 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,变量,你看看问题在哪里
speedph粉丝

管理员

@speedphp

Rank: 9Rank: 9Rank: 9

发表于 2010-9-11 20:49:22 |显示全部楼层
看不出来那里有问题,或者你可以拿论坛内的winblog例子作为参考一下,那个例子里面几乎都是这样显示的模板。

Rank: 4

发表于 2010-9-13 22:29:20 |显示全部楼层
好的,JAKE谢谢,也就是这种方法吧,其实在INDEX中返回函数就行了
speedph粉丝
您需要登录后才可以回帖 登录 | 论坛注册

Archiver|SpeedPHP.com ( 粤ICP备08008671号 )  

GMT+8, 2012-2-7 01:29

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部