Wapové verze některých aplikací jsou teď i přes zatím poměrně drahé wapování velmi oblíbené. V tomto článku vám ukážu, jak si můžete vytvořit wapovou verzi bazaru, o kterém bylá část předcházejících dílů.
Celá aplikace bude mít několik funkcí. V první řadě bude vybírat všechny články z databáze a vypisovat je po určitém počtu na karty. Budeme také muset odstranit některé speciální znaky a ošetřit chybové zprávy. Přidáme k tomu jednoduché stránkování, aby se po kartách mohli návštěvníci vůbec pohybovat. A to je asi tak všechno. Pusťme se tedy do práce.
Nejprve si naddefinujeme funkci na stránkování výpisu na karty. Je to taková obdoba našeho stránkování, popsaného v části "Bazar - výpis". Na jednu kartu nesmíme dát moc inzerátů najednou, protože některé mobilní telefony by to taky nemusely rozchodit. Já jsem zvolil takový průměr - 3 inzeráty na stránce. Samotná funkce pre_da() má tedy úplně stejnou konstrukci, pouze nahradíme HTML odkazy za WAP odkazy na karty.
Další funkce - mysql2wap() bude obstarávat ono generování wapových stránek. Konstrukce je opět podobná vypisování inzerátů na HTML stránku. V první části ukládáme proměnné jako počet inzerátů, kolik inzerátů má být na stránce a počítáme, kolik karet nám zabere výpis všech inzerátů. Následuje otevření vytvořeného wap souboru a první zápis. Tento zápis tvoří hlavička wap stránky. Hned nato začneme s vypisováním inzerátů. Celý výpis umístíme do cyklu for, přičemž každý průchod cyklem bude mít funkci - výpis definice karty, výběr dat z databáze a jejich zapsání do souboru, přidání odkazu na další kartu a ukončení definice jedné karty. Takto se nám vytvoří talik karet, kolik stránek zabere vypsání všech inzerátů, což je účelem. Uprostřed cyklu for odstraníme "nebezpečné znaky" pomocí funkce strtr(), do níž umístíme znaky , které mají být nahrazeny a za co mají být nahrazeny. Konečný, upravený text nakonec vložíme do souboru a následuje další průchod cyklem. Po posledním průchodu vložíme ukončovací tag </wml> a soubor zavřeme. Tímto máme soubor kompletně vygenerován a připraven k prohlížení ve wap browseru.
<?
function pre_da($zobrazena_strana, $pocet_stran)
{
If (($zobrazena_strana==1) && ($zobrazena_strana==$pocet_stran))
{ return ""; }
elseif (($zobrazena_strana!=1) && ($zobrazena_strana==$pocet_stran))
{ return "<a href=\"#card".($zobrazena_strana-1)."\">Zpet</a><br/><a href=\"#card1\">Na zacetek</a><br/>"; }
elseif (($zobrazena_strana!=$pocet_stran) && ($zobrazena_strana>1))
{ return "<a href=\"#card".($zobrazena_strana+1)."\">Vpred</a><br/><a href=\"#card".($zobrazena_strana-1)."\">Zpet</a><br/>"; }
elseif (($zobrazena_strana==1) && ($pocet_stran!=1))
{ return "<a href=\"#card".($zobrazena_strana+1)."\">Vpred</a><br/><a href=\"#card".($pocet_stran)."\">Na konec</a><br/>"; }
else
return ""; }
function mysql2wap()
{
If (!IsSet($zobrazena_strana)):
$zobrazena_strana=1;
endif;
spojeni();
$vysledek = MySQL_Query("SELECT * FROM koupim ORDER BY ID DESC");
// výběr všech záznamů
$celkove_zaznamu = MySQL_Num_Rows($vysledek);
// spočítání všech záznamů
$na_strance=3;
// počet záznamů na jedné stránce
$pocet_stran=Ceil($celkove_zaznamu/$na_strance);
// kolik stran?
$file = "koupim.wml";
$fp = FOpen ($file, "w");
FWrite ($fp, "<?xml version=\"1.0\" encoding=\"windows-1250\"?><!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\"><wml>"); // 1. vypis - hlavicka
for ($zobrazena_strana=1; $zobrazena_strana <= $pocet_stran; $zobrazena_strana++): // dynamic vypis
$limit1=(($zobrazena_strana-1)*$na_strance);
// od kolikateho zobrazit?
$limit2=($na_strance);
// zobrazit x zaznamu
$limit="LIMIT ".$limit1.", ".$limit2."";
$sql=MySQL_Query("SELECT * FROM koupim ORDER BY ID DESC ".$limit);
if (!$sql):
FWrite ($fp, "<card name=\"error\" title=\"error\">Chyba při provádění výpisu!</card></wml>"); // chyba 1
die;
endif;
if (mysql_num_rows($sql)==0):
FWrite ($fp, "<card name=\"error\" title=\"error\">Nebyl nalezen žádný záznam!</card></wml>"); // chyba 2
die;
endif;
$celkem = MySQL_Num_Rows($sql); // celkovy pocet zaznamu
if ($celkem!=0):
FWrite ($fp, "<card name=\"card".$zobrazena_strana."\" title=\"Bazar-koupim-strana: ".$zobrazena_strana."/ ".$pocet_stran."\">"); // karta
while($zaznam=mysql_fetch_row($sql))
{
$zaznam[2] = strtr($zaznam[2], "ÁÄČĎÉĚÍĹĽŇÓÖÔŔŘŠŤÚŮÜÝZŽáäčďéěíĺľňóöôŕřšťúůüýzž°][}{", "AACDEEILLNOOORRSTUUUYZZaacdeeillnooorrstuuuyzz )()(");
$zaznam[3] = strtr($zaznam[3], "ÁÄČĎÉĚÍĹĽŇÓÖÔŔŘŠŤÚŮÜÝZŽáäčďéěíĺľňóöôŕřšťúůüýzž°][}{", "AACDEEILLNOOORRSTUUUYZZaacdeeillnooorrstuuuyzz )()(");
$zaznam[4] = strtr($zaznam[4], "ÁÄČĎÉĚÍĹĽŇÓÖÔŔŘŠŤÚŮÜÝZŽáäčďéěíĺľňóöôŕřšťúůüýzž°][}{", "AACDEEILLNOOORRSTUUUYZZaacdeeillnooorrstuuuyzz )()(");
FWrite ($fp, "<b>titulek:</b> ".$zaznam[2]."<br/><b>přidáno:</b> ".$zaznam[3]."<br/><b>text:</b> ".$zaznam[4]."<br/><br/>");
}
while(false);
FWrite ($fp, pre_da($zobrazena_strana, $pocet_stran));
FWrite ($fp, "</card>"); // karta konec
endif;
endfor; // end dynamic vypis
FWrite ($fp, "</wml>");
FClose($fp);
mysql_close;
}
mysql2wap();
?>
|
Nyní se před námi otevírá otázka - jak skript pozná, že v databázi existuje nový inzerát a že tedy má vygenerovat wapovou stránku znovu? To zajistíme velmi jednoduše. Budeme vycházet z faktu, že když uživatel přidá nový inzerát, spustí se skript pridej.php (který jsme si vytvořili v prvním dílu seriálu o bazaru). Do tohoto souboru tedy načteme pomocí include náš nový skript, generující wap stránky. Nyní při každém přidání inzerátu se tento skript spustí a vygeneruje nám celou wapovou stránku znova. V tomto dílu jsem si tedy vytvořili skript, generující wapové stránky koupim.wml. Jak jste jistě správně odhadli, tento skript mírně předěláme, abychom mohli generovat wapové stránky k sekci prodám a ostatní. Toto "předělání" bude spočívat jen v nahrazení tabulky, ze které se budou vybírat data a souboru, do kterého se budou zapisovat.
Samozřejmě jsem myslel i na ty z vás, kterým se ty otravné skripty přepisovat vůbec nechce :-) . Zdrojové kódy jsou ZDE.
Pěkný zbytek dne (či začátek noci).
Čevelíček Marek
|