菜鸟请教phplib中的block问题

yyst 2003-12-04 11:31:43
模板 tstemp.ihtml [code]
<html>
<body>
<table width="300" border="0">
<tr>
<td>welcome!</td>
</tr>
<!-- begin tsc -->
<tr>
<td>this is the {colors} sky!</td>
</tr>
<!-- end tsc -->
</table>
</body>
</html>


PHP页 [code]
<?PHP
include_once("phplib72/php/template.inc");
$ts = new Template("template/");
$col = "blue";
$ts->set_file("tshandle","tstemp.ihtml");
$ts->set_block("tshandle","tsc","tscs");
for ($i=1; $i<5; $i++)
{
$ts->set_var("colors",$col);
$ts->parse("tscs","tshandle",true); -----(**)
}
$ts->parse("tsoutput","tshandle");
$ts->p("tsoutput");
?>


分块输出无效,只能输出一行。请问是哪里的错误?
并且从网上和书中看的例子里面,加(**)这一行应该是
$ts->parse("tscs","tsc",true); (中间的参数是块的名称,而不是handle)
这样用的话会报错,说 tsc 不是一个 handle,难道网上和书中的例子都错了?
请各位高手多多指点!
...全文
46 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyst 2003-12-04
  • 打赏
  • 举报
回复
这是普通的用法吧,在块block里面怎么用?循环里面的语句怎么写?能说详细些吗?谢谢!
wangmingsky 2003-12-04
  • 打赏
  • 举报
回复
用法是这样的:parse(handler, value, true)
yyst 2003-12-04
  • 打赏
  • 举报
回复
谢谢楼上三位兄弟,特别是 磨碎的沙子。
终于成功了~~ :)
(教程上的都是小写begin,end :( )
xuzuning 2003-12-04
  • 打赏
  • 举报
回复
1、<!-- BEGIN tsc --><!-- END tsc -->
否则不能正确执行,但不会报错
2、你的template.inc文件是多大的?如是15k左右的则无block功能
weiwei6 2003-12-04
  • 打赏
  • 举报
回复
是版本的问题,用phplib7.4吧,偶然兄给过我一个网址,你搜搜吧
wangmingsky 2003-12-04
  • 打赏
  • 举报
回复
不客气.
你有一个错误我才发现:
<!-- begin tsc -->中的begin必须用大写:BEGIN
<!-- end tsc -->中的end必须用大写:END
因为这个原因,所以tsc句柄没有找到
这是字符窜匹配问题.
yyst 2003-12-04
  • 打赏
  • 举报
回复
十分感谢你--磨碎的沙子!

书上的例子也是和你一样用 $ts->parse("tscs", "tsc", true);
可以这样就报错:
----------------------------------------------------
Template Error: loadfile: tsc is not a valid handle.
Halted.
----------------------------------------------------
意思好象是 tsc 不是有效的句柄 。
难道是我的phplib7.2文件的问题吗?还是我的配置有问题,(php4.32 , zend client studio 3.01)
如果不是程序的问题,我会尝试重新配置php环境。
再次感谢! :)
wangmingsky 2003-12-04
  • 打赏
  • 举报
回复
这样和你说吧:
当你定义了
$ts->set_file("tshandle","tstemp.ihtml");
那就是说tshandle就是文件名tstemp.ihtml,但不是tstemp.ihtml文件中的内容,它仅仅代表这个文件名;但这个赋值是用在普通的用法中,而block的文件名(不是文件内容)赋值需要用另外一个方法,就是set_block,
$ts->set_block("tshandle","tsc","tscs");
tsc表示你的块名,也就是<!-- begin tsc -->中的tsc,但这个块名是在哪个模板中的必须指定,不然就不知道在哪里刷新了,指定他的父级模板就是tshandle,而tshandle在前面已经赋值就是tstemp.ihtml,也就是说tsc块是在tstemp.ihtml模板文件中的,tscs就是你要临时保存tsc块内容的,根据你的循环,它的内容会不断的增加,不需要加{}
parse应该写成$ts->parse("tscs", "tsc", true);
tscs就是你以前设置的临时变量,tsc就是你在tstemp.ihtml模板文件中的块,true表示追加
yyst 2003-12-04
  • 打赏
  • 举报
回复
我现在了解 parse() 函数的用法了。
但是具体到这个例子,我试后还是实现不了块的输出。我真的很菜...
上面的这个例子对你来说应该很简单,帮我看看。
现在的问题是:
1)模板中定义的 tsc ,它的作用是什么?
2)通过 $ts->set_block("tshandle","tsc","tscs"); 定义的 tscs ,它算是什么呢?教程上说它必须写成 {tscs} 的格式,可我测试的时候加与不加没什么区别,是这样的吗?
3)循环中的$ts->parse(handler, value, true);该怎么写?此时 tshandle,tsc,tscs 中谁是 handle, 谁又是 value 呢?

请多指点,多谢了,分少可以再加。
wangmingsky 2003-12-04
  • 打赏
  • 举报
回复
parse(handler, value, true)就是用在block的循环里的,
普通的用法是parse(handler, value)或parse(handler, value, false),
当是true的时候会追加模板变量,不然就不会.

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧