Autor | Zpráva | ||
---|---|---|---|
sloncz Profil |
#1 · Zasláno: 19. 7. 2014, 00:59:56 · Upravil/a: Moderátor (editace znemožněna) 19. 7. 2014, 11:37:48
DObrý, mám dotaz ohledně stránkování.
Na webu mám stránky se jmenem dnesnidatum.php, vcerejsidatum.php, jinedatum.php a každý z těch souborů obsahuje XXX záznamů. Každý záznam je uzavřný v <cast_1>obsah 1</cast_1>, <cast_2>obsah 2</cast_2>. Můj dotaz zní, je-li možné udělat v každé této stránce stránkování, aby se z těch např. 50 záznamů, zobrazilo na dané stránce maximálně 10 záznamů a dole byly tlačítka, která by přivedli na další stránku (ideálně změna jen pomocí GET požadavku ?zobrazit=2 - zobrazí dalších 10 záznamů, ?zobrazi=3 - zobrazí dalších 10 záznamů). Jde mi o to, že pokud je v souboru například 300 částí, tak aby netrvalo miliony let, než se stránka s těmi všemi údaji načte. Pokud by někdo měl nějaké rady, jak dané stránkování udělat, byl bych moc rád, Děkuji. |
||
Tori Profil |
#2 · Zasláno: 19. 7. 2014, 07:00:57
sloncz:
Ty záznamy máte napsané napevno (= jen řetězec), anebo se do nich dynamicky doplňují nějaké hodnoty, proměnné, volání funkcí apod.? |
||
sloncz Profil |
Ty záznamy jsou napsány na pevno, nijak se neměnní. Je to html stránka, která se rovnou zobrazuje na webu.
|
||
Tori Profil |
#4 · Zasláno: 19. 7. 2014, 11:36:16
Můžete to html rozebrat nějakým html parserem, a načíst jen prvky v zadaném pořadí.
Anebo se dá udělat cache - stránku rozebrat jen jednou, vytahnout z ní data, uložit do pole, serializovat a uložit do souboru. Při dalším čtení jen vytáhnete prvky s indexem x–y z pole. Dá se to zautomatizovat, aby se serializovaná data aktualizovala pokaždé, když bude čas modifikace cache starší než čas modifikace zdrojového souboru. Druhá varianta bude asi rychlejší pro seznamy s min. stovkami položek (odhadem). A asi by to šlo udělat i JavaScriptem, nastavit display: none položkám mimo požadovaný rozsah. Zadání pro zobrazení záznamů od do dávejte (a měňte) pomocí kotvy, je potřeba u ní sledovat jestli se změnila a pokud ano, tak projít stránku a skrýt/zobrazit požadované záznamy.
|
||
sloncz Profil |
#5 · Zasláno: 19. 7. 2014, 12:41:50
Když bych tomu dal jen
display:none; , tak se mi stejně budou načítat všechny soubory, jen nebudou vidět a stránka bude stejně nabíhat dlouho :/
|
||
mimochodec Profil |
#6 · Zasláno: 19. 7. 2014, 15:32:42
sloncz:
„Když bych tomu dal jen display:none;, tak se mi stejně budou načítat všechny soubory, jen nebudou vidět a stránka bude stejně nabíhat dlouho :/“ Proto to taky Tori zmiňuje jen jako jednu z možností, ne jako jednoznačně nejlepší variantu. Výhodou by naopak bylo, že při klikání na starší / novější desítky záznamů by se ze serveru nestahovalo nic. Mně ještě nejsou úplně jasné ty počty. Počet záznamů v těch jednotlivých souborech je vždy stejný? Pokud ano, nejspíš by se dala napsat nějaká logika, která by s těmi soubory pracovala jako se svého druhu "databází". Řekněme, že při požadavku zobraz.php?datum=20140415 by si php sáhlo pro patřičný soubor, vytáhlo požadovaná data a zobrazilo. Kromě toho by se už jednou rozparsovaná data dala uložit v nějaké efektivnější formě, která by od druhého požadavku dále byla ještě rychlejší. |
||
Alphard Profil |
#7 · Zasláno: 19. 7. 2014, 16:39:37
Zdá se, že to nestránkované řešení už někde funguje. Bylo by dobré uvést odkaz.
|
||
sloncz Profil |
#8 · Zasláno: 19. 7. 2014, 18:49:28
Vše mám na localhostu, takže nevím jak bych sem dostal ukázku.
Mně ještě nejsou úplně jasné ty počty. Počet záznamů v těch jednotlivých souborech je vždy stejný? Každý soubor je pro jedno dané město v ČR. V každém souboru není přesně XX záznamů, ale každý záznam je uzavřen v tagu <cast_1>obsah 1</cast_1>, <cast_2>obsah 2</cast_2>, .. Napadlo mě, že by šlo nějak spočítat počet těch tagů a pak na stránce vypsat prvních 10 záznamů. Přesně, jako to funguje v DB s řádkama. |
||
mimochodec Profil |
#9 · Zasláno: 19. 7. 2014, 22:42:45
sloncz:
„Napadlo mě, že by šlo nějak spočítat počet těch tagů a pak na stránce vypsat prvních 10 záznamů. Přesně, jako to funguje v DB s řádkama.“ Šlo. A pokud je tam opravdu i to číslování <cast_1>obsah 1</cast_1> , nevidím v tom žádný problém. Zjistíš nejvyšší číslo, z něj spočítáš, kolik těch desítek v souboru je, podle toho vygeneruješ nějaký blok se stránkováním. A vypíšeš tu desítku, která je zrovna požadovaná.
|
||
sloncz Profil |
#10 · Zasláno: 19. 7. 2014, 23:23:24
Dobře, když tedy si do proměnné vypočítám počet těch částí, jak potom vypíšu pouze 10 záznamů? Pořád se v tom motám, protože u DB k tomu stačí jeden sql příkaz, ale tady? :/
|
||
mimochodec Profil |
#11 · Zasláno: 20. 7. 2014, 01:36:07
Vezmeš obsah souboru a najdeš pozici <cast_1> a pozici </cast_10>. To, co tě zajímá, je mezi tím. Získáš to pomocí substr. Pak najdeš předěly mezi jednotlivými záznamy a jejich obsah. Prostě naprogramuješ parser.
|
||
sloncz Profil |
#12 · Zasláno: 20. 7. 2014, 09:53:25
Sakra, omlouvám se za nepřesné informace. Ono je to sice rozdělený do částí, ale do částí jako
<table>obsah_cast_1</table>, <table>obsah_cast_2</table>, .. Takže podle čísel to asi půjde špatně. :/ |
||
mimochodec Profil |
#13 · Zasláno: 20. 7. 2014, 10:01:27
Ne, půjde to stejně dobře. Jestli se na to necítíš, tak to dej do Práce a zakázky. Nebo mi rovnou mailem pošli ukázku, podívám se na to. Mail mám v profilu.
|
||
Časová prodleva: 10 let
|
0