当前位置:沸点梦工场 > WAP网页设计 > Php wap开发教程 > 浏览文章

PHP做WAP的总结

互联网 2007年06月04日 【字体:

Hello World
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="card1" title="Title">
<P>
<!--Write your card implementation here.-->
Hello World!!
</P>
</card>
</wml>

可以用opera来查看和校验你的代码,通过校验一般用手机访问就没问题了

下面是一个应用例子
wap_list.html
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>

<card title="{typename}">
<p align="center">
<img src="./logo.gif" alt="img" />
<br/>
</p>
 <p align="center">
 {typename}({total})
 <br/><br/>
 </p>

<p>
<!-- BEGIN list -->
 <a href="show.php?id={id}">{name}</a> ({hit})
 <br/>
<!-- END list -->
 </p>

<p>
{pagebar}
 </p>

<p align="center">
<br/> <br/>
<a href="index.php">返回首页</a>
<br/> <br/>
{time}
<br/>
@2006 xjtusky.com
 </p>
</card>
</wml>

对应的list.php
<?php

// --------------------------------------------------------------------------
// File name : list.php
// Description : 列表
// Requirement : PHP4 (http://www.php.net)
//
// Copyright(C), Langyufeng, 2005, All Rights Reserved.
//
// Author: Langyufeng (langyufeng@hotmail.com)
//
// --------------------------------------------------------------------------
define('ROOT_PATH', '../');
require_once(ROOT_PATH . 'Includes/Global.php');

header('Content-Type: text/vnd.wap.wml');
echo '<?xml version="1.0" encoding="GB2312"?>';//这东西不能放到 php 外面

$id = $_GET['id'];
if($id == ''){
 echo "分类ID不存在";
 exit;
 }

// 分页
$page = $_GET['page'];

 if (!empty($page)){
 $start_limit = ($page - 1) * $Config['pagePer'];
 }else
 {
 $start_limit = 0;
 $page = 1;
 }

$SQL = "SELECT `id` , `name` , `hit` FROM " . GAME_TABLE . " WHERE `typeid` =$id ";

$Result = $DB -> query($SQL);
$total = $DB -> _GetNumRows($Result);

$SQL .= " ORDER BY id DESC LIMIT $start_limit, $Config[pagePer]";

$Result = $DB -> query($SQL);
while($Row = $DB -> queryArray($Result)){
 $list[] = array(
     'id' => $Row['id'],
 'name' => $Row['name'],
     'hit' => $Row['hit']
 );
 }

// 分页
$cont = ceil($total / $Config['pagePer']);
if($cont > 1 && $num % $Config['pagePer'] == 0)
 $pagebar = paginationtxt (floor($cont), $page, 'list.php?id=' . $id . '&amp;page');
 elseif($cont > 1)
 $pagebar = paginationtxt (floor($cont) + 1, $page, 'list.php?id=' . $id . '&amp;page');

$typename = typename($id);

$time = date("H:i:s");

//$qc = "?";
 $page = new SmartTemplate("wap_list.html");

 //$page -> assign('sitename', $Config['sitename']);
 $page -> assign('typename', $typename);
 $page -> assign('pagebar', $pagebar);
 $page -> assign('total', $total);
 $page -> assign('list', $list);
 $page -> assign('time', $time);
 $result = $page -> result();
 //$page -> output();
 echo $result;
?>

分页函数
function paginationtxt ($count,$page,$url){
 
 if($page>1)
 {
 $re="\n<a href=\"$url=1\">首页</a> <a href=\"$url=".($page-1)."\">上一页</a>";
 }
 if($page<$count)
 {
 $re.="\n<a href=\"$url=".($page+1)."\">下一页</a> <a href=\"$url=$count\">尾页</a> ";
 }
 return $re;
}

这个是放在下载目录下的,具体的自己看了
.htaccess
AddType text/vnd.sun.j2me.app-descriptor .jad
AddType application/java-archive .jar
AddType application/vnd.symbian.install .sis

有一个地方必须注意:链接中不能这么用?id=**,而应该这么用xx.php?id=**
呵呵,第一次搞这个玩意,出了不少错,感谢phpe的wsjakey指点

以下摘自:http://www0.ccidnet.com/school/web//2001/05/25/70_4286.html

WML程序的结构形式及组成:

1)语法。WML是一种标记语言,延续了XML的语法规则。

2)文件声明。所有的WML程序必须在文件的开头处声明XML文件类型,包括XML的版本,WML的文档类型、所用规范等。

3)标签。在WML语言中需要使用标签(Tag),使用形式与HTML和XML等标记语言中的形式是完全一致的。

4)元素。WML的元素(Element)用于描述卡片组(Deck)的标记信息即结构信息。一个元素通常有一个首标签、内容、其它元素及一个尾标签组成,具有下述两种结构之一:

<首标签>内容</尾标签>

<标签/>

元素包含的内容中还可以有元素,这些元素也是有首标签、相应内容、其它元素及尾标签组成。不包含内容的元素成为空元素。它为一个单独的标签。或者说,单独的标签也是一种元素。

5)属性。WML与XML一样,其标签可以包含很多属性。属性用于给标签提供必要的附加信息,且属性内容通常在起始标签内使用。不过,属性内容不会被浏览器显示,它至作为参数为标签提供必要的信息。

指明属性值的时候,需要把该值用引号扩起来,可以是单引号或者双引号,引号通常成对嵌套使用。属性名称必须小写。例如:<card id="card 1" ontimer="#card2" title="Toolkit Demo">

而且,单引号的属性中还可以包含双引号的属性。实体字符也可以作为属性值。实体字符是指诸如&、<、>、'、"的特殊字符,在WML程序中显示着类字符需要特殊处理,后面我们介绍具体方法。

6)注释。WML程序中也可以加入注释。注释内容用于给开发人员顺利阅读源代码提供方便,它不会被浏览器显示出来。注释内容在标签中用感叹号(!)引出,并用于<!--注释内容-->的形式。例如:<!-- Write your card implementation here.-->。需要说明的是,XML程序中不支持注释的嵌套。

7)文档结构。WML文档是由“卡片(Card)”和“卡片组(Deck)”构成的,一个Deck是一个或多个Card的集合。当客户端发出请求之后,WML即从网络上把Deck发送到客户浏览器,这是用户就可以浏览Deck内包含的所有Card,而不必从网上单独下载每一个Card,程序中的第一个Card是缺省得可见的Card。

注意:Deck是一副纸牌的意思,这里是指一叠卡片,所以我们在这里称之为它为“卡片组”。另外,Card指的是WAP手机屏幕大小的网页,尽管有时一个Card可能需要多屏才能显示完,但我们也可以把它翻译成“页面”,不过这样与HTML中的页面容易混合。因此我们在这里称之为卡片。

WML字符使用基本规则
WML是一种比较严格的语言,字符使用必须遵守相应的规则,这些基本规则主要包括以下几个方面:

1)大小写敏感。在WML中,无论是标签元素还是属性内容都是大小写敏感的,这一点继承了XML的严格特性,任何大小写错误都可能导致访问错误。

一般来说,WML的所有标签,属性,规定和枚举及它们的可接受值必须小写,Card的名字和变量可大写和小写,但它是区分大小写的。包括参数的名字和参数的数值都是大小写敏感的,例如variable1、Variable1和vaRiable1都是不同的参数。 2)空格。对于连续的空字符,程序运行时只需要一个空格。属性名、符号(=)和值之间不能有空格。

3)标签。标签内属性的值必须使用双引号(")或单引号(')括起来。对于不成对出现的标签,必须在大于号(>)前加上顺斜杠(/),比如换行标签必须写成<br/>才正确。

4)不显示的内容。在WML中,不显示的字符主要包括换行符、回车符、空格和水平制表符,它们的8位十六进制内码分别为10、13、32及9。

程序执行时,WML将忽视所有的多于一个以上的不显示字符,即WML会把一个或多个连续的换行、回车、水平制表符及空格转换成一个空个。

5)保留字符。这是WML的一些特殊字符,如小于号(<)、大于号(>)、单引号“'”、双引号“"”、和号(&)。

6)显示汉字。如果希望WML程序执行时能够显示汉字,则只需要程序开头使用encoding指定汉字字符集即可。例如:<?xml version="1.0" encoding="gb2312">。

注意:指定汉字字符集的形式和方法可能因为开发工具或WAP手机的不同而不同。