| Autor | Správa |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: St 07.12.11 23:07 |   |
Pomocou PHP parsujem XML subor, ktory obsahuje asi 50 udajov.
Na stranke teda z toho XML suboru dam vypisat tie udaje v poradi ako to je v XML.
Chcel by som vsak dosiahnut, aby na stranke vypisalo len prvych 10 zaznamov, a po kliknuti na stranku 2 dalsich 11-20 zaznamov atd.. proste klasicke strankovanie.
Keby som to mal vypisat z DTB, tak nie je problem strankovanie pomocou LIMIT, avsak ked to taham z XML suboru, neviem si rady.
Len pre info: udaje vypisujem v cykle | kód: | | foreach($content->NAZVY as $adx) {echo ... atd.} |
diky vopred |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 |
Ak toho nieje nejak veľa tak to daj do session. Inak to jedine dať do db aj keď z tade sa to bude musieť zase nejako parsovať...
Vlastne veď si nastavíš nejakú premennú X na dajme tomu 20(záznamy od 20 vyššie), to podľa toho čo ti príde cez $_GET['page'] a inkrement Y ktorý budeš v tom cykle porovnávať s tým X. A vypíšeš len tie od Y=20 po koľko chceš. |
| |
    |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3776 Bydlisko: Bratislava Vek: 27
 |
jednoducho si do $content vlozis len tie zaznamy, ktore sa maju zobrazit na aktualnej stranke - poznas cislo stranky, vies kolko zaznamov sa ma na jednej stranke zobrazit - nie je nic lahsie ako pouzit napr. position() v xpath, pomocou coho si vyselektujes zaznamy, ktore presne potrebujes (od - do) |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: Št 08.12.11 19:04 |   |
diky za odpovede, asi to spravim ako navrhuje stenley. Avsak nevyhodou je, ze po kazdom vypise daneho poctu zaznamov bude musiet stale spracuvat ten XML subor, ktory je externy a znamena to zbytocnu zataz daneho servera.
Teraz je tych zaznamov cca. 50, ale casom ak ich bude viac to moze byt i problem.
A taktiez, ak sa na stranke vypise napr. prvych 10 zaznamov, a medzitym sa XML subor na externom serveri zmeni - updatne o dalsie zaznamy, alebo z neho nieco vymazu, tak uz dany vypis nebude aktualny a strankovanie nemusi fungovat spravne...
Napriek tomu sa mi to zatial zda ako rozumne riesenie. |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Št 08.12.11 19:54 |   |
Keby tá aktualizácia toho XML nebola taká fatálna, tak by sa to dalo riešiť tak, že by si napr. raz za deň cez CRON volal ten parser a ten by ti to uložil do DB. A aplikácia by to už ťahala z DB. |
| |
    |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 10194 Bydlisko: Bratislava Vek: 24
 | Zaslal: Št 08.12.11 20:00 |   |
Zbytočná záťaž? A keď to bude v DB alebo na inom serveri, tam to pobeží na vzduch a žiadna záťaž nebude?
Keby to bolo uložené niekde inde, tak aktualizácia, mazanie a podobne by neexistovali??
neopagan, je toto tvoja prvá webstránka? |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Št 08.12.11 20:08 |   |
Walther:
Ak je ten súbor relatívne malý tak platí to čo píšeš, ale ak je obrovský tak ho
1. musíš stiahnuť
2. sparsovať.
DB by to urobila určite rýchlejšie, nie? |
| |
    |
 |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: Št 08.12.11 20:18 |   |
walther to mas pravdu s dtb by to fungovalo rovnako pri strankovani
Keby udaje boli v dtb na lokalnom serveri tak by zataz bola urcite mensia ako keby kazdu chvilu mal script spracuvat externy XML subor z ineho servera. Pri obrovskej navstevnosti sa mi neraz stalo, ze ten server padol, kde bol podobny XML subor, pretoze naraz bolo extremne vela poziadaviek na jeho parsovanie. Vtedy som vyuzil to co pise camo, ze sa XML stiahol raz denne a pracovalo sa s nim lokalne. Ten subor vsak nebol casto aktualizovany, tak stacilo stiahnut raz denne.
Lenze klient nechce dtb. Preco by som inak asi riesil tento problem?
No nejak to uz vyriesim. |
| |
  |
 |
walther
 Užívateľ
 Založený: 24.01.2008 Príspevky: 10194 Bydlisko: Bratislava Vek: 24
 | Zaslal: Št 08.12.11 20:32 |   |
Môžeš byť konkrétnejší, o aké údaje v xml vôbec ide? |
| |
  |
 |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: Št 08.12.11 20:38 |   |
no kedysi som riesil TVprogram z XML, ale teraz sa jedna o zoznam zakaznikov, ale to je v podstate jedno |
| |
  |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3776 Bydlisko: Bratislava Vek: 27
 | Zaslal: Št 08.12.11 20:38 |   |
ak potrebujes, mozes dany subor stahovat aj castejsie, resp. by pomohol nejaky system upozornovnia na zmeny vykonane v externom xml - ak mas na to dosah, bolo by to super, lebo by si ho stiahol len vtedy, ak by bol aktualizovany... |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: Št 08.12.11 20:59 |   |
nakoniec som to vyriesil tak, ze kazdej hlavnej sekcii v XML som pridal atribut s cislom - napr. | kód: | <ZAKAZNIK count="1">
<meno>xxx</meno>
<adresa>xxxx</adresa>
</ZAKAZNIK>
<ZAKAZNIK count="2">
<meno>xxx</meno>
<adresa>xxxx</adresa>
</ZAKAZNIK>
... atd.
|
a potom vlastne na zaklade parametra page aj v URL dam vypisat dany pocet zaznamov. Pricom premenna limit je vlastne pocet zaznamov na stranku.
| kód: | | if ( $xml->attributes()->count> 0 && $adx->attributes()->count<= $page+$limit ) .. atd... |
funguje to dobre. |
| |
  |
 |
camo
 Zablokovaný užívateľ
 Založený: 05.09.2009 Príspevky: 1176 Bydlisko: Lehota pod Vtáčnikom
 | Zaslal: Št 08.12.11 23:10 |   |
Tak ako je to teda zákazník nechce DB, alebo je príliš často aktualizvané?
Ale napadlo ma ešte možno lepšie riešenie.
Sparsovať to a uložiť ako php pole/objekt, ktoré si potom len includneš. |
| |
    |
 |
stenley
 Moderátor
 Založený: 27.07.2007 Príspevky: 3776 Bydlisko: Bratislava Vek: 27
 |
| neopagan napísal: | | funguje to dobre. |
si si isty? podla mna je to blbost (samozrejme len podla toho kusu kodu, co si sem dal), lebo ked vymazes nejakych zakaznikov, tak ti to uz nebude fungovat spravne - dajme tomu, odstranim prvych 5 zaznamov, na prvej stranke budes zobrazovat 5 zakaznikov a na ostatnych 10? Alebo budes pri kazdej zmene stale aktualizovat hodnoty atributu count v celom subore? toto tvoje riesenie je tusim najhorsia vec, co si mohol spravit  |
_________________ Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB | |
    |
 |
neopagan
 Užívateľ
 Založený: 07.08.2006 Príspevky: 681
 | Zaslal: So 10.12.11 12:55 |   |
blbost to nie je stenley, pretoze po kazdej zmene poctu zakaznikov sa cely XML subor zmaze a prepise sa aktualnymi udajmi, ktorych atributy budu opat spravne v poradi.
Akurat ze by mohlo dojst k tomu, ze ak prave mas otvorenu stranku s prvymi 10 zaznamami tak na druhej stranke sa uz pocet nemusi zobrazit spravne ak medzitym nieco do toho suboru pridali alebo zmazali. Ale to iste by platilo aj v pripade DTB.
Je to samozrejme len kusok kodu co som sem dal, este pokracuje dalej s dalsimi podmienkami.
Mam to otestovane a uz je to LIVE a funguje bez problemov. |
| |
  |
 |
|