WAP-Enabling a Website with PHP3 - Switching to WML (
Page 3 of 4 )
After we got the HTML site going, the next task was to WAP it up. The first
concern was how much we would have to hack php3 to tell it not to emit a first
line that says
Content-type: text/html
Although I couldn't find it documented anywhere, I found to my deep and
abiding joy that if you use the php3 header() function to output a
different content-type header, that suppresses the default. Bingo! Every WML
card deck now includes this php fragment at the top:
<?
header("Content-type: text/vnd.wap.wml");
echo "<?xml version=\"1.0\"?>\n";
echo "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"" .
" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n";
?>
and that deals with all the usual crud you have to cough out
to get started with WAP. From there on it was plain sailing. It took six hours
to a) learn enough WML to get something done and b) implement it. I used Steve
Mann's book "Programming Applications with the Wireless Application Protocol"
(Wiley, ISBN 0-471-32754-9) as my reference, plus a few downloaded tutorials
from places like
Waptastic for backup. I
wouldn't recommend any of them. Considering how restricted the WML language is,
you would have thought it wouldn't take much explaining, but I have yet to see a
decent tutorial on it. Maybe I am just too dim to pick it up easily. That might
also account for how limited our
current
WAP version of the site is.
Of course you can't rely on WML being correct without testing it. If there is
a WML weblint-alike, I'd like to find it, but haven't looked hard enough yet. It
would be a big help to ensure that the WML is well-formed on the way out. You
also have to check that your WAP site `works', to the degree that you can make
anything work through such a limited medium. There are a number of WAP phone
simulators around. There is a web-based one at Gelon as well as others from phone.com and the marvellously named Slob-Trot in Finland. Sadly both the latter
two only run under Windows so far as I can tell, but vmware came to the rescue. Or, at least it did
for the Slob Trot browser, the phone.com version ran but didn't paint any images
on the screen. I later found a native Windows machine and it seemed OK on that.
Using the simulators to test the WML allowed the php3 templates to be written
very quickly. Here is the full `place' template:
<?
require("stdwaphdr.tpl");
require('stdplace.tpl');
?>
<? $votepics = array("xx", "x", "+", "++", "+++"); ?>
<card title="Search results" id="first">
<p>
<?htmTplacetypename();?>(s) near <? htmT("placesearch"); ?><br/>
<? if(isset($places)): ?>
<? $placelist = new PlaceList; $placelist->import($places);
$placelist->reset(); $count = 1; while($place = $placelist->next()): ?>
<? echo htmlspecialchars("\"$place->name\", " . $place->county_address()); ?>
<? printf("(%.2fm) ", ($place->distance_km()*100/1.6)/100); ?><br/>
<? if(isset($Objects[$place->unique_id . "votes"])){
$arrayref = $Objects[$place->unique_id. "votes"];
// echo "Scores:";
$first = 1;
while(list($key, $value) = each($arrayref)){
$idx = $value - 1;
if($idx < 0)
continue;
$vname = $Objects["voteranktoshortnames"][$key];
if ($first) { $first = 0; } else { echo ", "; }
if (($idx < sizeof($votepics)) && ($idx >= 0)) {
echo "$vname $votepics[$idx]";
} else {
error("Vote value out of range");
}
}
echo "<br/>\n";
} else {
// echo "No votes yet<br/>\n";
} ?>
<? endwhile; ?>
<? else: ?>
No matches!
<? endif; ?>
Go back<anchor title="back"><prev>back</prev></anchor>
</p>
</card>
<?
require("stdwapftr.tpl");
?>
This article copyright GBdirect
Ltd 2000. All rights reserved. Reprinted from http://www.gbdirect.co.uk/ with
permission.