接上一篇PHP例解Webzine编辑和发送(一)
清单 3:创建 HTML 表
<table border=1>
<?php
for ($i=0; $i<$elems; $i++) {
$item = trim($cats[$i]);
$ifile = ereg_replace(" ","",$item);
$color = ($ifile == $topic) ? "pink" : "silver";
$url = "index.php3?topic=$ifile";
$anchor = " " . ($item != $topic ? "<a href=\"$url\">$item</a>" : "$item") . " ";
echo(" <tr><td bgcolor=\"$color\"><center><b>$anchor</b></center></td></tr>\n");
}
?>
</table>
这个表以 HTML 模式开始和结束,但其大部分中间过程都处于PHP模式下。现在我们逐行分析这个示例。它以HTML模式开始(这是PHP的正常开始模式)。表的边框宽度为 1:
<table border=1>
现在,切换到PHP模式:
<?php
for 循环将从0开始,一直到元素的总数减1为止(因为它使用的是 < 而不是 <=)。换句话说,如果有3个元素,则将以0/1/2迭代它们:
for ($i=0; $i<$elems; $i++) {
trim 函数将删除前导/尾随空格并返回。这是必不可少的,因为用来读取类别文件内容的 file函数将在每个类别名的最后保留尾随换行字符。所以这将把 "Politics\n"转换为 "Politics"。
$item = trim($cats[$i]);
下面是一个“搜索并替换”操作,用来去掉 $item中的空格,并将结果存放在 $ifile 中。所以主题名 "The Arts" 将变为 "TheArts"。 在向网页传递参数(index.php3?topic=TheArts) 以及指定主题文件名(如TheArts.txt)时,主题名很有帮助。如果您没有必要关心空格,则会更加简单。
$ifile = ereg_replace(" ","",$item);
$color 的赋值使用三元运算符 ?:(它有与
C 类似的语法test?truevalue:falsevalue),以为选定的主题将$color 变量设置为 pink 或者 silver。
$color = ($ifile == $topic) ? "pink" : "silver";
每个菜单项与一个 URL 相关联;所以如果主题为 "Politics",则URL将为 index.php?topic=Politics。PHP提供引号内的变量名替换。因此,在这个表达式中,$ifile变量的内容只在运行时替换引号中的$ifile。许多人发现这比用连接操作符显式地利用引号中的元素和变量名构建字符串更加容易。
$url = "index.php3?topic=$ifile";
在PHP中,句点操作符表示连接。我仍然使用 ?: 运算符在此赋值操作中插入一个条件。如果当前项(比如说,Politics)不是选定的主题,则anchor是 <a
href="index.php?topic=Politics>Politics</a>。如果选定的主题是Politics,则anchor就是 Politics。在任一种情况下,anchor 两侧都有空格。
echo(" <tr><td bgcolor=\"$color\"><center><b>$anchor</b></center></td></tr>\n");
下面的echoe语句将指定的字符串插入输出流(即,HTML网页的正文)中。所以可以使用这条语句插入整个表行。在字符串中使用\"可以插入一个引号字符。上面计算出的$color和$anchor变量自动代入它们的引用位置:
echo(" <tr><td bgcolor=\"$color\"><center><b>$anchor</b></center></td></tr>\n");
for 循环的结束:
}
再次从PHP模式返回HTML模式:
?>
类别菜单的HTML表的结束:
</table>
对程序创建过程的分析到此结束!
故事的表示
一旦选定一个故事,您就需要将这个故事的正文从故事文件打印到当前的网页上。(编辑模块author.php3 以正确的 HTML格式准备这个故事。)这是个简单的过程。在下面的代码段中,假定故事编号存储在变量$story 中。如果 $story 等于33,则这个故事的文件为 s33.txt。
$storyfile = fopen("s$story.txt","r");
fpassthru($storyfile);
在上例中,fopen函数打开一个文件,并返回该文件的一个句柄,然后通过赋值运算符将这个句柄保存在变量$storyfile 中。fpassthru函数将文件的内容复制到当前的输出设备(输出HTML文件),并自动关闭该文件。
内容预告
本文(第 1.2 部分)介绍了 Webzine 这个简单PHP应用程序的第一部分,并详细分析了几小段代码示例。(应用程序的这部分代码大小只有2K,所以没有许多大型的代码示例供我们选择!)这应该使您对PHP的强大功能有了很好的体验,但后面的内容还多着呢。
下一部分的篇幅与前面大致相同。我将说明故事菜单的表示是如何呈现在读者面前的,从而完成对发送模块的讨论。然后我将讨论允许作者提交故事的编辑模块。虽然编辑模块比发送模块大得多,但我们不会如此详细地讨论它:我们只需要说明与发送模块不同的那些有趣概念。
参考资源
PHP.net是 PHP语言的官方主页。在这里您可以免费下载PHP的最新版本,还可以查看PHP开发的发展方向。这里还有一个常见问题解答、一个手册以及许多其他资源。
PHPbuilder.com面向的是开发人员,其中包含大量的文章和代码样例、零活登记以及到PHP资源的链接。
Webmonkey的PHP部分包含有关PHP的大量入门级文章。