АБРАКАДАБРА (Тоже самое но в читаемом виде)
No4nie mitarstva speca po raskrutke, ili postrani4niy vivod kontenta v brauzer na primere PHP
Prislal: Roman Dukhanin
Polovina vtorogo no4i, neskol'ko dney nedosipa... I vdrug ozarenie - nakonec-to a ponal, kakoy-takoy super-puper skript mne nujen dla raskrutki moego novogo sayta. Skazano - sdelano, sajus'... net ne pisat' etot super-puper skript :) Programmisti narod leniviy, speci po raskrutke tem bolee (otsuda i banneroobmennie seti, avtoregistratori v katalogax i pr. lentayskie 6tu4ki). V ob6em lezu na Google i na4inau metodi4no ob6arivat' Runet v poiskax trebuemogo. Proxodit 4as, dva... V du6u zakradivautsa smutnie podozrenia, plavno pererastau6ie v uverennost', 4to trebuemiy mne skript v prirode libo ne su6estvuet, libo spratan na 4'em-to zapovednom lokalxoste s pravami dostupa 000.
Razbivau stoa6uu pered skriptom zada4u na neskol'ko sostavnix i minut za 15 pi6u realizaciu bol'6instva ego (skripta) funkciy :) Radostno berus' za sleduu6uu fi4u... V ob6em, neobxodimo vsego-to navsego obespe4it' postrani4niy vivod kontenta. To est', naprimer, imeetsa 60 statey i nujno eti stat'i vivodit' po 10 na stranicu i postroit' menu dla onogo vivoda v vide "1 2 3 ..."
4etire utra, okroma zavetnogo "LIMIT" v golovu ni4ego ne prixodit. I delo daje ne v tom, 4to BD k moemu skriptu nikakogo otno6enia ne imeet. S gore4'u ponimau, 4to kvalifikacia poterana, lu46ie godi jizni projiti vpustuu i... idu na Google ;) Posle... v ob6em uje nastupil rassvet. K etomu vremeni a poznakomilsa s ku4ey literaturi po dannomu voprosu, no vezde situacia tak ili ina4e rassmatrivalas' v kontekste raboti s SQL, libo a postoanno natalkivalsa na kakuu-to rastirajirovanno-zaumnuu stat'u pro "otdelenie algoritma postrani4nogo vivoda ot konteksta ili-4to-to-v-etom-rode" (IMXO, nijeprivedennie 7 stro4ek koda etu problemu re6aut) v kotoroy ni4ego6en'ki ne ponal... :( I vot kogda a uje ot4aalsa i re6il 4to utro ve4era mudrenee, na kakom-to dremu4em, zaros6im mxom forume (adres k sojaleniu kanul v Letu - po krayney mere u mena ego net), natknulsa na perepisku nekoego ve4no izvinau6egosa Programmera i bezumnogo i zlobnogo Moderatora - tema perepiski bila posva6ena imenno postroeniu menu dla postrani4nogo vivoda. I eto bilo imenno to 4to nujno!
V ob6em, nije po tekstu a ispravlau nespravedlivost': teper' v Internete est' stat'a o tom, kak obespe4it' postroenie menu dla postrani4nogo vivoda! Prostoy rabo4iy kod na PHP, s podrobnimi kommentariami. Nikakoy izli6ney funkcional'nosti tipa ssilok "next page". Sdelano sie namerenno - ni razu v jizni ne najimal na "next" esli mojno bilo najat' na nomer stranici - a dannaa stat'a napisana s cel'u dat' vozmojnost' ponat' osnovnoy princip, t.e. 4em men'6e koda, tem lu46e (xota knopka "next" i dobavlaetsa trema strokami koda).
Sogla6enia o kommentariax k kodu:
- "Stat'a" - eto nekiy celostniy blok dannix (ne obazatel'no tekstovix) kotoriy i vivoditsa po neskol'ko 6tuk na stranicu (eto mogut bit' stat'i, novosti, kartinki i pr.)
- "Stranica" - eto stranica :) na kotoroy raspolojeno nekotoroe koli4estvo "statey".
$total_articles_number = 79; //ob6ee koli4estvo statey $articles_per_page=10;
// koli4estvo statey na stranice //polu4aem koli4estvo stranic
$total_pages = ceil($total_articles_number/$articles_per_page);
// zapuskaem cikl - koli4estvo iteraciy ravno koli4estvu stranic
for ($i=0; $i<$total_pages; $i++){ // polu4aem zna4enie $from (kak $page_number)
dla ispol'zovania v formirovanii ssilki $page_number=$i*$articles_per_page;
// esli $page_number (fakti4eski eto proverka togo avlaetsa li $from teku6im) ne sootvetstvuet teku6ey stranice,
// vivodim ssilku na stranicu so zna4eniem $from ravnim $page_number
if ($page_number!=$from) echo " ".($i+1)." ";
// ina4e prosto vivodim nomer stranici - dannaa stroka neobazatel'na,
// propustiv ee vi prosto polu4ite link na teku6uu stranicu else echo $i+1;
// esli page_number - teku6aa stranica - ni4ego ne vivodim (ssilku ne delaem) } ?>
Takim obrazom, na ekrane brauzera mi polu4ili 4to-to vrode "1 2 3 4 5 6 7 8", pri etom URL (na moem komp'utere, pri vibrannoy tret'ey "stranice")
vigladit tak: http://localhost/ep/ep.php?from=20. Obratite vnimanie, na to, 4to stranice pod nomerom "3" sootvetstvuet zna4enie from=20 to est' ots4et vivodimix statey budet vestis' v dannom slu4ae s 20-y.
Voob6e, kak vi uje ponali, peremennaa $from igraet zdes' klu4evuu rol'. Ona u4astvuet v postroenii ssilok na kajduu otdel'nuu stranicu (esli, kone4no, mojno tak virazit'sa :), i samoe glavnoe - daet nam to4ku ots4eta dla vivoda statey. Naprimer (i navernaka vi sdelaete imenno tak) ukazateli na stat'i (ili sami stat'i ;) mojno pomestit' v massiv, s posleduu6ey viborkoy i vivodom v brauzer po 10 statey, na4inaa ot zna4enia $from.
To est' e6e raz inimi slovami: ves' ogorod sobstvenno i gorodilsa radi togo, 4tobi dat' skriptu dannie otnositel'no togo na kakoy "stranice" sey4as naxoditsa posetitel' i na4inaa s kakogo nomera "stat'i" sleduet vivesti zadannoe koli4estvo etix statey na stranicu - a eto i est' zna4enie peremennoy $from. T.e. pri $from=20 vivedutsa stranici s 21 po 30 (eto takje zavisit ot realizacii vivoda i zna4enia peremennoy $articles_per_page)
Vot i vse - predislovie dlinnee 4em kod :) A v Jizni vsegda tak - preludia gorazdo dlinnee 4em final ;)
Duxanin Roman as RWinner winner@2winners.com |