Autor | Zpráva | ||
---|---|---|---|
michal454454 Profil |
#1 · Zasláno: 11. 12. 2014, 23:46:06
Zdravím chtěl bych prosím vás poradit s tím že vypisuji přes foreach z databáze články na úvodní stranu a samozřejmě po vytvoření dalších a dalších článků se mi všechny vypisuji najednou pod sebe.. potřebuji aby ty starší články se ukládali na nejakou jinou stranku a zustavali tam například jen ty 3 nejnovější... Díky :)
|
||
juriad Profil |
#2 · Zasláno: 12. 12. 2014, 00:02:20
Hledej stránkování v PHP.
V rychlosti - budeš mít v adrese parametr strana=cislo . A to číslo použiješ pro výpočet LIMITu v databázovém dotazu:
"SELECT * FROM tabulka ORDER BY datum LIMIT " . (($strana - 1) * $pocetNaStranu) . ", " . $pocetNaStranu |
||
michal454454 Profil |
#3 · Zasláno: 12. 12. 2014, 15:31:04
Aha.. :) takze jak to bude kdyz mam
$clanky=$db->select(clanky,*); foreach($clanky as $cl){ echo "<a class="clanek" href="index.php?action=zobrazClanek"> '.$cl["nazev"]. .$cl["obrazek"].'</a>"; } |
||
Tomáš123 Profil |
michal454454:
„ echo "<a class="clanek" href="index.php?action=zobrazClanek"> '.$cl["nazev"]. .$cl["obrazek"].'</a>"; “
Takto ti to určite nepôjde. Úvodzovkám, ktoré chceš iba vypísať musí predchádzať spätné lomítko "\" (Ctrl+alt+q). Čiže by si mal uvedený riadok prepísať zhruba do takejto podoby: echo "<a class=\"clanek\" href=\"index.php?action=zobrazClanek\"> ".$cl["nazev"]. .$cl["obrazek"]."</a>"; echo '<a class="clanek" href="index.php?action=zobrazClanek"> '.$cl["nazev"]. .$cl["obrazek"].'</a>'; Len nesmieš pliesť úvodzovky a apostrofy. |
||
Kubo2 Profil |
Tomáš123:
...Alebo: echo <<<Odkaz_Sablona <a class="clanek" href="index.php?action=zobrazClanek" > {$cl['nazev']} {$cl['obrazek']} </a> Odkaz_Sablona; michal454454: Ale predtým, než sa opäť spýtaš, prečo ti to nefunguje, mal by si si ujasniť, že (za predpokladu, že nazev je celý názov článku a obrazek URL adresa obrázka) ti taký kód v cykle vypíše ku príkladu toto:
<div> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.1 http://example.com/obrazky/001.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.2 http://example.com/obrazky/002.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.3 http://example.com/obrazky/003.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.4 http://example.com/obrazky/004.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.5 http://example.com/obrazky/005.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.6 http://example.com/obrazky/006.png</a> <a href="index.php?action=zobrazClanek" class="clanek">Článok No.7 http://example.com/obrazky/007.png</a> </div> Všimni si hlavne cieľ (atribút href u odkazov), ktorý je všade rovnaký. Tzn. na ktorýkoľvek odkaz klikneš, vždy sa dostaneš na tú istú stránku, bez ohľadu na to, či text odkazu e Článok No.1 alebo Článok No.6.
|
||
michal454454 Profil |
#6 · Zasláno: 12. 12. 2014, 19:45:14
Nebojte se tu syntaxi mam napsanou ve skutecnosti dobře jen sem jsem to psal ve spechu malicko.. a jak to mám tedy udelat..? :) s tim aby se ty clanky prehazely jinam? :)
takhle to mam tedy fakt jak to je: <?php $novinky = $db->select('clanky','*'); foreach($novinky as $novinka){ echo '<a href="index.php?action=zobrazClanek&id='. $novinka['id'].'" class="novinka prvni" style=" background:url(' . $novinka['obrazek'] . ');background-size:100% 100%;background-color:white;margin:0 0 5 0;">' .$novinka['nazev'] . '[čtěte více...]</a>'; } ?> |
||
juriad Profil |
#7 · Zasláno: 13. 12. 2014, 04:51:40
michal454454:
Takže [#3], [#4] a [#5] je vlastně obdočka jinam - proč se nevyplatí zbytečně zkracovat kód. Co je $db a jeho metoda select? Potřebuješ položit dotaz, kterému zadáš klauzuli LIMIT. To provedeš na 3. řádku, ale jak, to netuším. Nezapomeň záznamy z databáze seřadit podle datumu sestupně. V [#2] jsem řekl, že budeš potřebovat parametr strana v adrese. Z tohoto parametru pak zjistíš kolik záznamů přeskočit: if (isset($_GET['strana'])) { $strana = (int) $_GET['strana']; if ($strana <= 0) { $stana = 1; } } else { $strana = 1; } Klauzule LIMIT chce dva parametry: 1) kolik záznamů přeskočit; to bude to (($strana - 1) * $pocetNaStranu) ,
2) kolik záznamů vrátit; $pocetNaStranu ,
kde $pocetNaStranu je samozřejmě proměnná, kterou si někde definuješ.
Jakmile toto budeš mít mělo by se na stránce zobrazovat jen $pocetNaStranu novinek. A napsáním parameru strana=2 , strana=3 by se měly zobrazovat starší novinky.
A pak už jen musíš vytvořit odkazy na předchozí a následující stranu. Ale to až budeš mít vše předchozí rozchozené. |
||
michal454454 Profil |
Aha :) a to:
if (isset($_GET['strana'])) { $strana = (int) $_GET['strana']; if ($strana <= 0) { $stana = 1; } } else { $strana = 1; } napisu kam? :) tenhle vypis clanku mam v souboru homepage.php který je naincludovan do index.php ve switchi zaroven tam je i naincludovan soubor toho konkretniho clanku přes if(isset($_GET["action"])) if($_GET["action"]){ case 'zobrazClanek' include "clanek.php"; break; } JO a tam promena $db to je vlastne inicializace te tridy databaze která je naincludovana a pripojena k index.php $db=new medoo(); |
||
juriad Profil |
#9 · Zasláno: 13. 12. 2014, 13:15:27
OK, podle dokumentace medoo (kdo mohl tušit, že používáš zrovna tuto knihovnu) bude dotaz vypadat asi takto:
$db->select('clanky', '*', [ 'ORDER' => 'datum DESC', # sem doplníš název sloupce s datumem 'LIMIT' => [(($strana - 1) * $pocetNaStranu), $pocetNaStranu] ]); A kam napíšeš definici strany bys měl vědět ty. Zkus se zamyslet, já ti to záměrně neřeknu. |
||
michal454454 Profil |
#10 · Zasláno: 13. 12. 2014, 13:20:56
no ta bude nejaky vstupni argument?? :)
|
||
michal454454 Profil |
#11 · Zasláno: 13. 12. 2014, 23:31:43
jak to tedy prosím bude s tou promennou ja ted nevím.... :/ díky moc :)
|
||
juriad Profil |
Proměnná musí být definována před tím, než je použita. Stačí tedy těsně před ten select. Na to jsi sám (úvahou, pokusem) mohl přijít sám před 10 hodinami.
A nebo jsi prostě mohl definovat proměnnou následovně a podívat se, jak (a zda) to funguje. $strana=1; „ja ted nevím“ A kdy to budeš vědět? |
||
michal454454 Profil |
#13 · Zasláno: 14. 12. 2014, 00:13:26
a jak je ta strana v zavislosti na ostatnim kdyz to ty clanky vypisuje do souboru homepage.php ktery je naincludovany v index.php? myslím to $strana ? :)
|
||
juriad Profil |
#14 · Zasláno: 14. 12. 2014, 00:18:33
michal454454:
A jak se stránkovaním souvisí výpis článků? Nijak. Prostě někde máš kód uvedený v [#6], ten upravíš, jak jsem naznačil, a před něj přidáš definici $strana .
|
||
michal454454 Profil |
#15 · Zasláno: 14. 12. 2014, 18:05:18
ok no :)
|
||
michal454454 Profil |
:)
ok no ted to funguje ze to vypisuje 3 nejnovejsi clanky na hlavni stranu ale kde jsou tedy tedka ty starsi ? :) jak udelat to abych si mohl zobrazit i ty nekde jinde ještě? :) diky |
||
juriad Profil |
#17 · Zasláno: 14. 12. 2014, 23:13:47
Dotazem do databáze:
SELECT COUNT(*) AS pocet FROM clanky zjistíš počet stránek a pak vygeneruješ příslušný počet odkazů:
$stranek = ceil($pocet / $pocetNaStranku); for ($i = 1; $i <= $stranek; $i++) { echo "<a href=\"index.php?strana=$i\">strana $i</a>"; } |
||
michal454454 Profil |
#18 · Zasláno: 15. 12. 2014, 00:15:54
Mohl bys mi jen kdyžtak popsat ten zdrojak co co dělá? :) díky
|
||
juriad Profil |
michal454454:
Jaké znalosti PHP nebo jiných programovacích jazyků máš? Jestli žádné, nemá smysl pokračovat v lepení kusů kódů dokud se nenaučíš základy. Cyklus for a výpis pomocí echo jsou skoro první věci, které se probírají (databáze jsou naopak jedna z těžkých kapitol). Jediné, co je trochu pokročilejšího je funkce ceil, která zaokrouhluje nahoru. Jak položit dotaz do databáze víš, jen si ten můj musíš přepsat do podoby, kterou používá medoo. |
||
michal454454 Profil |
#20 · Zasláno: 15. 12. 2014, 20:29:30 · Upravil/a: michal454454
jo jí vím co jsou ty věci jen jse chtěl poradne vedet co to dela celkove... ;)
a promenou $pocet si zas nadefinuju předtím teda? a jak by se napsal ten vyber z databzase pomoci ty knihovny medoo teda? |
||
Časová prodleva: 9 let
|
0