请问有没有利用phplib template模板写的实例

edited 十月 2013 in PHP新手區
请问有没有利用phplib template模板写的实例,phplib那个太简单了,我天分不高,没能全搞清楚,想找一些实例来看看,请介绍几个,好吗?谢谢

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=1373

評論

  • edited 三月 2006
    先在我们要测试的网站的目录下建两个文件夹inc和template.目录inc下放引用文件,比如类库,函数库等,这里我们就把template.inc放如该目录下.tempate下放模板文件,我们先建一个模板文件first.html,内容如下
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第一个模板文件 </TITLE>
    </HEAD>

    <BODY>
    真想对你说:我爱你 {lover} ,但我却不敢说,因为我知道你爱的人是 {man}.
    <P>
    <font color="#0000FF">{author}</font> 于 {date}
    </BODY>
    </HTML>
    用inc,template命名文件目录,都是我的个人习惯,你完全可以采取不同的方式.我用扩展名为.html的名称命名模板文件,是为了方便美工用frontpage或者dreamweaver修改,但这完全取决于你自己的习惯.

    first.html模板中的{lover},{man},{author}可以称为"模板变量",用花括号({})把变量名称括住即组成一个模板变量.模板变量就是模板元素的一种。你可能会担心它的命名问题,其实除了空格(" "),回车换行("\r", "\n"),tab(\t)外它都被视为是正确的.所以
    {your-lover}
    也是正确的.这点有时可能会令你很痛苦,因为模板里的有些javascript代码可能无意间变没有了,比如
    if(a>b){document.write("i love u");}
    中的
    {document.write("i love u");}
    也被视为一个变量了.上面的代码在你选的模板处理方式下,可能会变成if(a>b){},从而导致javascript错误.为什么会"变没"了呢?稍后将做解释.

    上面我们定义的三个变量{lover},{man},{author}的原因是,我们想随时改变它们的值.下面我们就来做这个工作.新建first.php文件,内容如下:
    <?php
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template", "keep"); //注1

    //将整个文件读进来
    $tpl->set_file("main", "first.html"); //注2

    //给文件中的模板变量赋值
    $tpl->set_var("lover", "kiki"); //注3
    $tpl->set_var("man", "ccterran"); //注4
    $tpl->set_var("author", "iwind"); //注5

    //完成替换
    $tpl->parse("mains", "main"); //注6

    //输出替换的结果
    $tpl->p("mains"); //注7

    ?>
    浏览器中浏览这个文件,你就会发现输出


    真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

    iwind 于 {date}


    这一切正如我们所期望的(除了{date}).注1
    $tpl = new Template("template", "keep");
    是创建一个Template类的实例对象.它有两个参数,都是可选的.

    第一个参数是模板所在目录,如果不设置则为"."(即当前目录),由于我们刚才把模板文件first.html放到template下了,所以这里为template.注意它一般使用相对路径,如果你用相对于根目录(比如 /phplib/test/template)的路径,就会出现
    Template Error: set_root: /phplib/test/template is not a directory.
    Halted.
    的错误.

    第二个参数是指定模板类对"未完成处理"变量的处理方式,所谓"未完成处理"指的是模板变量未赋值,块未完成替换工作(下面一节将讲到它),它有三个值可选,分别为"keep","comment","remove":
    如果设为"keep",这些变量将原封不动的保留下来.
    如果设为"comment",那么会在报错的同时,将未完成处理的变量全部转换成HTML的注释.
    如果设为"remove",未完成处理的变量便会被删除(这也是默认的情况).

    所以在上面的例子中,我指定的是"keep",于是{date}因为未赋值,所以还保留着.而缺省的情况下是"remove",所以,如果我这样创建实例对象
    $tpl = new Template("template", "remove");
    或者
    $tpl = new Template("template");
    的话,输出就变成了
    真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

    iwind 于



    可以看出{date}被删除了.如果是
    $tpl = new Template("template", "comment");

    它的结果将是


    真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.

    iwind 于


    看起来和"remove"方式一样,但查看源文件,我们会发现
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第一个模板文件 </TITLE>
    </HEAD>

    <BODY>
    真想对你说:我爱你 kiki ,但我却不敢说,因为我知道你爱的人是 ccterran.
    <P>
    <font color="#0000FF">iwind</font> 于 <!-- Template variable date undefined -->
    </BODY>
    </HTML>

    其中有<!-- Template variable date undefined -->的错误信息,告诉我们date变量未定义(赋值).

    用"comment"或许对程序的调试很有帮助.

    我们再回头看看
    if(a>b){document.write("i love u");}

    {document.write("i love u");}
    会"变没"的问题,是因为模板类视之为模板变量,但你没有给它指定值(当然会没有),且你没有指定"keep"方式来处理未定义变量,所以它就被"remove"了.

    所以在模板使用过程中应该多多注意这些问题.

    注2是将一个模板文件加载进来,事实上你可以一次加载多个模板(在第四节将讲到这个问题).你可以想象
    $tpl->set_file("main", "first.html");
    把"first.html"内容给变量"main"(尽管很多人称之为"句柄",但本文决定不谈"句柄"),所以"main"的值就变成模板的内容了,包含着那些模板变量.

    注3,注4,注5,是给模板变量赋值.值是什么,你自然可以随便定.比如你还可以
    $tpl->set_var("lover", "kiki1");
    $tpl->set_var("man", "ccterran1");
    $tpl->set_var("author", "iwind_php");
    你也可以一次完成给一列的变量赋值.这样
    $tpl->set_var(
    array("lover"=>"kiki", "man"=>"ccterran", "author"=>"iwind")
    );
    如果你想设置一个变量的值为空的话,可以
    $tpl->set_var("man", "");
    或者
    $tpl->set_var("man");

    注6,是执行将上面$tpl->set_var给模板变量指定的值替换掉模板中的模板变量这个操作,第一个参数即为模板分析的结果,也可以视为一个变量.

    当然注7的 $tpl->p("mains"); 就将模板分析的结果如你所愿的输出啦.

    喏,恭喜你,你的第一个模板类应用就完成了.你可能不小心弄错了哪个地方,模板类默认情况下会自动打印出错误提示的,根据这些提示,你就很容易就可以找出问题所在,在第6节将会具体讲到.
  • edited 三月 2006
    在上一节中,我们知道模板元素的一种:模板变量,并知道如何在程序中给它赋值,使之呈现我们想要的东西.这对一般的简单网页来说,或许就已经够用了.现在我们设想一稍微复杂的一种情况,在template目录下新建一个second.html模板文件,内容为:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第二个模板文件 </TITLE>
    </HEAD> <BODY>
    下面是一个列表
    <UL>
    <li>张三 的成绩是 82
    <li>李四 的成绩是 90
    <li>王儿 的成绩是 60
    <li>麻子 的成绩是 77
    </UL>
    </BODY>
    </HTML>
    上面的列表中列出了"张三","李四","王二","麻子"四人的成绩.假设要用PHP代码嵌入HTML的方式输出的话,你可能是这样写的:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第二个模板文件 </TITLE>
    </HEAD>

    <BODY>
    下面是一个列表
    <?php
    $result = mysql_query("SELECT username,score FROM my_tbl");
    ?>
    <UL>
    <?php
    while ($row = mysql_fetch_array($result))
    {
    ?>
    <li><?=$row["username"]?> 的成绩是 <?=$row["score"]?>
    <?php
    }
    ?>
    </UL>
    </BODY>
    </HTML>

    这样写很适合PHP新手,但你很快发现你或者美工改这个列表样式的时候需要多么的小心翼翼,特别是美工,如果他不懂你写得PHP代码,那么他会终日生在恐惧之中!因为稍微的不小心,可能就会带来程序的运行错误.而且如果他想把这个列表从一个地方移到另一个地方,也是相当不容易的.于是作为程序员的你不得不把美工(虽然你做的可能性更大)修饰过的页面重新审查一次,无形中就造成费时费力。

    现在好了,有了Template模板类,你可以把你的代码从模板中抽取出来了.你可能会这样修改second.html模板:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第二个模板文件 </TITLE>
    </HEAD>

    <BODY>
    下面是一个列表
    <UL>
    <li>{username1} 的成绩是 {score1}
    <li>{username2} 的成绩是 {score2}
    <li>{username3} 的成绩是 {score3}
    <li>{username4} 的成绩是 {score4}
    </UL>
    </BODY>
    </HTML>

    显然,你采取了一个良好的命名方式,用1,2,3..来表示每一行数据,然后你在你的程序里循环给这些变量赋值,也是不难的,比如:(second.php)

    <?php
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //将整个文件读进来
    $tpl->set_file("main", "first.html");

    //连接数据库,选择数据库略
    省略.....

    //查询结果
    $result = mysql_query("SELECT username,score FROM my_tbl");

    //给文件中的模板变量赋值
    $i=0;
    while ($row = $idb->fetch_array($result))
    {
    $i++;
    $tpl->set_var("username" . $i, $row["username"]);
    $tpl->set_var("score" . $i, $row["score"]);
    }

    //完成替换
    $tpl->parse("mains", "main");

    //输出
    $tpl->pparse("mains", "main");

    ?>

    这样你也能得到正确结果.在特殊情况下你或许需要这样做.但Template提供了一个更方便的"大的模板变量",那就是块.我之所以称之为"大的模板变量",是因为它也可以视为可以包含其他模板变量的变量.形式如
    <UL>
    <!-- BEGIN list -->
    <li>{username} 的成绩是 {score}
    <!-- END list -->
    </UL>

    即用<!-- BEGIN 块名称 -->和<!-- END 块名称 -->定义了一个名为list的块,(注意:我在这里为了方便理解,只称之为块名称).这个块里面又包含一些HTML代码(<li>等等)以及模板变量({username},{score}).

    在讲述如何用块输出列表之前,我们先谈一下块的定义格式.

    首先<!-- BEGIN list -->和<!-- END list --> 都要各自为一行,亦即下面的块的定义是错误的
    1,
    同行的 <!-- BEGIN list -->
    <li>{username} 的成绩是 {score}
    <!-- END list -->
    2,
    <!-- BEGIN list -->
    <li>{username} 的成绩是 {score}
    <!-- END list --> 同行的

    <!--和-->都是固定的,也就是说只能是两个中划线("-"),且它们与BEGIN list之间都至少有一个空(空格或tab),看下面的例子
    <!--BEGIN list -->
    <!-- BEGIN list-->
    它们都是错误的块的定义方法,因为第一个<!--与BEGIN之间至少应该有一个空,第二个-->与list之间至少有一个空.

    BEGIN/END和list之间也应该有一个空格,注意是有且仅有一个空格,不能多也不能少.

    块的名称建议你只使用字符,数字,下划线以及它们的组合.

    BEGIN和END两个词语都应该是大写的。

    好了,下面开始探讨如何是这个块变成一个列表.我们可以这样
    <?php
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //将整个文件读进来
    $tpl->set_file("main", "second.html");

    //加载块list
    $tpl->set_block("main", "list", "lists");

    //连接数据库,选择数据库略
    省略.....

    //查询结果
    $result = mysql_query("SELECT username,score FROM my_tbl");

    //给文件中的模板变量赋值
    while ($row = $idb->fetch_array($result))
    {
    $tpl->set_var("username", $row["username"]);
    $tpl->set_var("score", $row["score"]);
    $tpl->parse("lists", "list", true);
    }

    //完成替换
    $tpl->parse("mains", "main");

    //输出
    $tpl->pparse("mains", "main");

    ?>

    记住把你的数据库连接写在我省略的部分,就可以打印正确的结果,一如

    下面是一个列表

    张三 的成绩是 82
    李四 的成绩是 90
    王儿 的成绩是 60
    麻子 的成绩是 77



    可以看到在PHP代码里有两个东西
    $tpl->set_block("main", "list", "lists"); //代码1
    $tpl->parse("lists", "list", true);
    就不可思议的将整个块循环输出了.代码1用来加载模板main中的块list,并给其一个名字lists,list就是模板中的一个大变量,它的内容就是<li>{username} 的成绩是 {score}即:
    "list" = "<li>{username} 的成绩是 {score}"
    之所以用lists命名,是为了程序的可读性,也就是说我很容易就知道XXXs是XXX块的名称.

    使用set_block后,模板中的块内容
    <!-- BEGIN list -->
    <li>{username} 的成绩是 {score}
    <!-- END list -->
    就被lists代替了.于是我们的模板就变成了
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 我的第二个模板文件 </TITLE>
    </HEAD>

    <BODY>
    下面是一个列表
    <UL>
    {lists}
    </UL>
    </BODY>
    </HTML>

    块变成了一个变量(lists)!下面只要将lists变量替换成我们想要的就行了.

    代码二所处的循环
    while ($row = $idb->fetch_array($result))
    {
    $tpl->set_var("username", $row["username"]);
    $tpl->set_var("score", $row["score"]);
    $tpl->parse("lists", "list", true); //代码2
    }
    每一次循环,两个set_var分别给username,score赋值,然后"list"就变成了
    "list" = "<li>具体的名字 的成绩是 具体的分数"
    代码2就是将list分析后的内容赋给lists,这样就完成了整个块的分析.

    parse第三个参数可以设置list中的值是直接存在lists里面,还是附加在原有值之后.我们这里设置为true,说明是附加在原有值之后,才得以每个list的值都会显示出来.反之设为false的话,后面的值会覆盖掉以前的值.最终的结果会是



    下面是一个列表

    麻子 的成绩是 77


    综上所述,Template模板类的替换方式是:
    1,用set_block将模板中的list块(或者你命名的其他块)替换成变量lists.
    2,用set_var给list块中的变量赋值
    3,把赋值并执行替换后的list内容依次给lists
    4,完成分析
  • edited 三月 2006
    在PHP程序里,我们常常会把"公用代码"或"公用部分"写进一个文件里,前者象我们的系统配置文件,比如config.php,或者公共函数都写入一个functions.php文件里;后者象一个站点都需要用到的页面头部,尾部.这样做的好处是可以很方便的维护站点,而如果这个公用部分要有所改动,无需再去改每一个页面,大大减少了我们的工作量.
    以前你或许用require,include(require_once,include_once)引进一个公用的页面头部,确实方便而有效,现在我们用Template模板类也可以实现了,并且可以很方便的把一个页面随意插入另一个模板的任意地方.如果你想也把要插进的页面做成含有变量的模板的话,那么你会发现模板类会把这个工作处理的很好.

    在template目录下新建三个文件third.html,header.html,footer.html.内容分为如下
    third.html
    <!-- 这是页面头部 -->
    {header}
    <BODY>
    下面是一个列表
    <UL>
    <!-- BEGIN list -->
    <li>{username} 的成绩是 {score}
    <!-- END list -->
    </UL>
    <!-- 这是页面脚部 -->
    {footer}
    </BODY>
    </HTML>

    header.html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> {title} </TITLE>
    </HEAD>

    footer.html
    <P>author © iwind

    你也看到了,我们前几节的例子中都是用
    $tpl->set_file("main", "模板文件名");
    来加载模板文件的。只所以命名为"main",是因为我们想给它一个意义:主模板。这里的third.html就可以称之为“主模板”,而欲嵌入主模板third.html的{header}变量所在位置的模板文件header.html,则可以称为"子模板".同样footer.html也是一个"子模板",我们想把它放到主模板里的{footer}位置.一个主模板内可以随意嵌入不限内容,尺寸大小,格式等的任何多个子模板.

    下面我们开始我们的PHP程序.

    先是创建一个类的实例对象
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //读进三个模板文件的内容,分别给变量"main", "my_header", "my_footer"
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
    $tpl->parse("header", "my_header");
    $tpl->parse("footer", "my_footer");

    //然后完成主模板内变量的替换,并输出主模板分析后的内容
    $tpl->parse("mains", "main");

    //输出
    $tpl->p("mains");

    于是,我们便可以通过查看源文件确信header.html,footer.html两个子模板文件的内容已经被加进主模板里了.

    <!-- 这是页面头部 -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> </TITLE>
    </HEAD>
    <BODY>
    下面是一个列表
    <UL>
    <!-- BEGIN list -->
    <li> 的成绩是
    <!-- END list -->
    </UL>
    <!-- 这是页面脚部 -->
    <P>author © iwind
    </BODY>
    </HTML>

    你会发现,所有的变量都没了,包括我们未赋值的{title},{username},{score}.这是因为我们在创建对象时,第二个参数未设置,而自动采用了"remove"
    $tpl = new Template("template");

    $tpl = new Template("template", "remove");
    的效果是一样的.

    如果我们想给这些变量也赋值,那么方法和单个模板里变量的分析方法是一样的.
    //读模板内容进变量
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //设置子模板header.html里的变量title的值
    $tpl->set_var("title", "这个是网页标题");

    //以下分析主模板里的块的内容
    //设置块
    $tpl->set_block("main", "list", "lists");
    $array = array("张三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
    foreach ($array as $username=>$score)
    {
    $tpl->set_var("username", $username);
    $tpl->set_var("score", $score);
    $tpl->parse("lists", "list", true);
    }

    所有程序为
    <?php
    //包含进模板类 template.inc
    require "inc/template.inc";

    //创建一个实例
    $tpl = new Template("template");

    //将整个文件读进来
    $tpl->set_file("main", "third.html");
    $tpl->set_file("my_header", "header.html");
    $tpl->set_file("my_footer", "footer.html");

    //设置header.html里的变量title的值
    $tpl->set_var("title", "这个是网页标题");

    //设置块
    $tpl->set_block("main", "list", "lists");
    $array = array("张三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
    foreach ($array as $username=>$score)
    {
    $tpl->set_var("username", $username);
    $tpl->set_var("score", $score);
    $tpl->parse("lists", "list", true);
    }

    //执行my_header,my_footer里的模板变量替换,并把最终结果分别赋给主模板中的header,footer
    $tpl->parse("header", "my_header");
    $tpl->parse("footer", "my_footer");

    //完成主模板内变量的替换
    $tpl->parse("mains", "main");

    //输出
    $tpl->p("mains");

    ?>

    输出的结果为
    <!-- 这是页面头部 -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 这个是网页标题 </TITLE>
    </HEAD>
    <BODY>
    下面是一个列表
    <UL>

    <li>张三 的成绩是 82
    <li>李四 的成绩是 90
    <li>王二 的成绩是 60
    <li>麻子 的成绩是 77
    </UL>
    <!-- 这是页面脚部 -->
    <P>author © iwind
    </BODY>
    </HTML>

    一切都是我们所期望的.

    在这个程序里,我们用
    $tpl->set_block("main", "list", "lists");
    加载一个块.其实它的第一个参数为该块所在父变量,如果这个块在header.html里,那么恐怕要这样写了
    $tpl->set_block("my_header", "list", "lists");
    但分析方法还是一样的.

    从以往和这节中的例子,我们可以看出来,定义一个模板变量{var}值的方法是用
    $tpl->set_var("var_name", "var_value");
    但把一个变量的值给另一个变量就需要用parse.
    $tpl->parse("target_name", "from_name", true);
    或者
    $tpl->parse("target_name", "from_name", false);
    使用parse就先执行from_name大变量的模板变量的替换,然后再把所得结果赋给target_name.

    一个变量{varname}无论在模板的何处(块里面,子模板里),定义的方法都是一样的.

    子模板里还可以嵌入新的子模板,称之为"多重嵌套",分析的方法都是一样的,只是一般用不到.块也可以多重嵌套,而且非常有用,使得模板可以设计的可以很清晰,这就是我们下一节的内容了
  • edited 三月 2006
    非常感谢!
    太清楚了,这些我都会多加练习的!

    我想再请教个问题:

    我曾经用双重偱环来输出一个想要的m行,n列的表格来列出数据库中的数据.(注:m行是由数据库中要输出的数据总数决定的,不是人工确定的,n列就是人工确定的)

    程式大概如下:

    for($i=0;$i<mysql_num_rows($res);)
    {
    for($w=0;$w<4;$w++)
    {
    if(!mysql_data_seek($res,$i)) continue;
    if(!($row=mysql_fech_object($res))) continue;
    echo $row->sort;
    $i++;
    }
    ......(注:这里是一个表格修补代码,此略)
    }

    这段程序在我的商城网站上是没有错的,输出的内容和想要的是一样的,但现在我想利用模板来输出同样的格式,但不知道为什么老实现不了,不知道是模板方面设置的问题,还是这段程序的问题,请赐教,谢谢
    程序如下:
    <?php
    include "include/template.inc";
    include "config/config.php";

    $str="select * from sort";
    $res=mysql_query($str);

    $t=new template("temp");

    $t->set_file(array("test"=>"test.ihtml"));

    $t->set_block("test","row","rows");
    $t->set_block("test","row2","row3");


    for($i=0;$i<4;)
    {
    for($con=0;$con<3;$con++)
    {
    if($i<4){
    $t->set_var(array("link"=>$i,"right"=>($i<4?$i:" ")));
    $t->parse("rows","row",true);
    $i++;
    }
    }
    $t->parse("row3","row2",true);
    }


    $t->pparse("ss","test");

    ?>

    模板如下:

    <TABLE border="1" width="100%" cellpadding="0" cellspacing="0">
    <TR>
    <td colspan='3'>jatly test</td>
    </TR>
    <!-- BEGIN row2 -->
    <TR>
    <!-- BEGIN row -->
    <TD height="25"><div align="center"><a href="{link}" class="link_eng">{right}</a></div></TD>
    <!-- END row -->
    </TR>
    <!-- END row2 -->
    </TABLE>
    如果看不到模板文件,附加档案里面有
  • edited 三月 2006
    for($i=0;$i<4;)
    {
    for($con=0;$con<3;$con++)
    {
    if($i<4){
    $t->set_var(array("link"=>$i,"right"=>($i<4?$i:" ")));
    $t->parse("rows","row",true);
    $i++;
    }
    }
    $t->parse("row3","row2",true);
    }



    上面是你写的,每什么大问题,长篇大论的我也懒得看,不过至少你犯了一个我曾经犯过得错误,内参循环没有在循环之前清空.
    其实phplib得文章大陆网上多得是,我看你打得全是简体字,应该是大陆得吧,phpe,phpx上文章多得是啊。
    B.T.W:我现在用smarty,觉得不错,phplib的确是太弱了点

    我改得如下(没试,而且多年不用lib了):
    for($i=0;$i<4;)
    {
    $t->set_var('rows');
    for($con=0;$con<3;$con++)
    {
    if($i<4){
    $t->set_var(array("link"=>$i,"right"=>($i<4?$i:" ")));
    $t->parse("rows","row",true);
    $i++;
    }
    }
    $t->parse("row3","row2",true);
    }
  • edited 三月 2006
    对,我是广州的,
    问题我昨晚已经解决了,解决方法和你的是一样的!

    Thank you very much!
  • edited 三月 2006
    我再请求个问题,上回看了你的请点后,开始了解smarty,发现一个问题,所以想问问:

    define('__SITE_ROOT', 'c:/data/smarty')

    smarty中定义路径用的是绝对路径,那如果我是自己到网路上申请的空间,我在不知道空间的绝对路径下,应该怎么修改此处呢?
  • edited 三月 2006
    透過 phpinfo() 或是 print_r($_SERVER); 就可以大概知道
Sign In or Register to comment.