Autor | Zpráva | ||
---|---|---|---|
Truuhlik Profil |
#1 · Zasláno: 29. 1. 2010, 09:59:48 · Upravil/a: Truuhlik
Opět zdravím,
$soubor = file("data.txt"); foreach($soubor as $line){ $data = explode("||", $line); if($data[0] == $_GET['id'] continue; else{ $id = $data[0]; $nazev_novinky = $data[1]; $obsah_novinky = $data[2]; echo "tady si to všechno pěkně vypíšu pod sebe"; } } takhle mi to vypíše všechny novinky pod sebe - při představě že v souboru bude 50 řádků, tak mi to nahání hrůzu - 50 novinek na jedné stránce nevěděl by někdo jak nastránkovat tento výstup třeba v podobě nekonečného stránkování 1 2 3 4 5 6 7 8 ...? z mysql databáze vím jak na to, ale u tohoto nemám páru, hledal jsem i na netu kde se dalo, ale najít něco pořádnýho a hlavně jednoduchého je umění a druhý dotaz směřuje k seřazení - v mysql ORDER BY id DESC (nebo ASC) - jak to udělat tady? předem díky za odpovědi |
||
AM_ Profil |
#2 · Zasláno: 29. 1. 2010, 11:32:27 · Upravil/a: AM_
- řazení: php má funkci [url=php.net/sort]sort[/url], případně další mutace jako ksort, asort, rsort atd... Pokud to chceš mít seřazené tak, jak je to ve vstupním souboru, tak tak už to seřazené je když to načteš :)
Pokud řadíš složitější záznamy podle určitého kritéria (ID příspěvku), jsou dvě řešení: - udělat si funkci na porovnání dvou záznamů podle ID a řadit funkcí usort, která si pro porovnání zavolá tvojí funkci - vytvořit asociativní pole, kde klíče budou ID a pak třídit přes ksort //edit: pokud třídíš pole polí podle prvního prvku zanořeného pole, myslím, že si s tím poradí obyčejný sort() - stránkování: úplně stejně jako nad databází, jen klauzuli LIMIT start, pocet si budeš muset naimplementovat - velice jednoduše, prvních start řádků přeskoč a dalších pocet vypiš. |
||
Truuhlik Profil |
#3 · Zasláno: 29. 1. 2010, 11:47:38
v mysql je to o dost jednodušší - vlastně si spočítám všechny řádky určím po kolika vypast
používám tohle: (nevěděl bys jak to aplikovat právě na můj problém?) $radku = mysql_num_rows(mysql_query("SELECT id FROM tabulka;")); $po = 15; /* počet řádků na stránku */ $max_stranek = ceil($radku / $po); /* počet stránek */ $url_stranka = ($_GET["stranka"] / $po) + 1; /* Aktuální stránka */ for($i=0; $i < $max_stranek; $i++) { $cislo = ($i + 1); $url_cislo = ($cislo * $po) - $po; if($url_stranka != $cislo) { echo "<a href=\"?stranka=".$url_cislo."\">".$cislo."</a>\n"; } else echo "<strong>".$cislo."</strong>\n"; } } if(empty($_GET["stranka"])) {$stranka = 0;} else {$stranka = $_GET["stranka"];} $cist = mysql_query("SELECT * FROM tabulka ORDER BY id DESC LIMIT ".intval($stranka).",$po"); while($data = mysql_fetch_assoc($cist)) { … } |
||
AM_ Profil |
#4 · Zasláno: 29. 1. 2010, 12:49:42
$radku = mysql_num_rows(mysql_query("SELECT id FROM tabulka;"));
čistější je toto: list($radku) = mysql_fetch_row(mysql_query("SELECT COUNT(id) FROM tabulka")); v případě souboru: $soubor = file("data.txt"); $radku = count($soubor); //neni nic jednodussiho :) //kod pro vypocet stranek je naprosto stejny //algoritmus pro vypis //nahrazuje: //$cist = mysql_query("SELECT * FROM tabulka ORDER BY id DESC LIMIT ".intval($stranka).",$po"); //while($data = mysql_fetch_assoc($cist)) //nahradit timto: //vypis $soubor[$stranka] az $soubor[$stranka+$po] for ($i = $stranka; $i < $stranka+$po; $i++){ ... } |
||
Časová prodleva: 1 měsíc
|
|||
Truuhlik Profil |
#5 · Zasláno: 5. 3. 2010, 13:54:03 · Upravil/a: Truuhlik
takže dělám na svém malém projektíku, ale vůbec nejsem schopen dát to do kupy, podařilo se mi vypsat žádaný počet řádků, dokonce to i nastránkovat, ale problém je v nastránkovaném výsledku - pořád mi to stránkuje jenom 1 řádek (tzn. mám 3 stránky, na každé 10 řádků, ale každý ten řádek je pořád to samé)
prosím vás nevěděl byste někdo kde by mohl být problém? header("Content-Type: text/html; charset=utf-8"); $soubor = file("data/soubory.txt"); $radku = count($soubor); $po = 10; $max_stranek = ceil($radku/$po); $url_stranka = ($_GET['stranka']/$po)+1; if(empty($_GET['stranka'])){$stranka = 0;} else{$stranka = $_GET['stranka'];} foreach($soubor as $line){ $data = explode("||", $line); if($data[0] == $_GET['id'])continue; else{ $idecko = $data[0]; $nazev = $data[1]; $url = $data[2]; } } /*tady je ten největší problém - docílil jsem vytáhnutí 10ti řádků to jo, ale ten řádek je pořád stejný - nevěděl by někdo jak na to?*/ echo "<table>"; for($a = $stranka; $a<$stranka+$po; $a++){ echo "<tr> <td>$nazev</td> <td><a href='$url'>Stáhnout</a></td> </tr>"; } echo "</table>"; //tady si vypíšu číslování 1, 2, 3... atd plně funkční for($i=0; $i<$max_stranek; $i++){ $cislo = ($i+1); $url_cislo = ($cislo*$po)-$po; if($url_stranka!=$cislo){ echo "<a href='?stranka=$url_cislo'>$cislo</a>"; } else{ echo "<strong>$cislo</strong>"; } } |
||
AM_ Profil |
#6 · Zasláno: 5. 3. 2010, 19:27:44
Truuhlik:
> for($a = $stranka; $a<$stranka+$po; $a++){ > > echo "<tr> > <td>$nazev</td> > <td><a href='$url'>Stáhnout</a></td> > </tr>"; > } > echo "</ Jak by to mohlo nebýt stejné, když v každé iteraci znovu vypíšeš $nazev a $url a mezitím je nijak nezměníš? Ty data třeba nacpi do pole a z něj vypisuj, když v cyklu pořád dokola vypisuješ jednu proměnnou, samozřejmě to vypíše několikrát to samé. |
||
Truuhlik Profil |
#7 · Zasláno: 5. 3. 2010, 23:39:42
já jenom nevím jak - napadlo mě dát výpis do
foreache, konktrétně do části else {}, ale nepodařilo se, opět ten stejný problém - fakt nevím jak dál - něvěděl bys jak na to? samozřejmě že jsem hledal i na netu, strejda google, ale flat files a stránkování to je asi nadlidský výkon |
||
Časová prodleva: 14 let
|
0