Autor Zpráva
michal454454
Profil
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
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
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>";
Alebo:
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
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
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
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
no ta bude nejaky vstupni argument?? :)
michal454454
Profil
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
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
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
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
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
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
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?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: