Diskuze: Výpis konkrétního článku
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 50 zpráv z 51.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Pro zobrazení článku budeš potřebovat jeho ID které bys měl mít už v tvém dotazu. Toto id pak dosadíš do nového dotazu na který potom použiješ funkci fetch(), tím by jsi měl získat do pole infomace o jednom určitém článku který už jen v nějaké šabloně vypisuješ..
snad jsem ti trochu pomohl a ostatní mě tu neukamenují
No daj dajaky odkaz, alebo čo...
Treba ti select, ale iný, vyberáš len ten konkretný článok, čo chceš. Väčšinou sa to robí podľa ID, ale môžeš to urobiť aj pomocou odkazu...
SELECT * FROM clanky WHERE zverejnen=1 AND clanok_id = "id_clanku_ktory_chces_zobrazit".
Potom treba preskúmať, či ti to vráti ako objekt, alebo ako pole, alebo bohvieako, lebo dnes je toľko kadejakých DB wrapperov, že už som z toho somár. Takže ak máš iba jeden článok, napr. v laraveli a dáš ->first(), tak dostaneš priamo objekty a nemusíš už ísť cez foreach. DBO tuším funguje tak, že ti do poľa dá aj jeden jediný row. takže potom musíš cez foreach. Daj nejaký kód, a štruktúru databázy, alebo čo.
Omlouvám se ale asi jsem to napsal špatně. Zkusím to napsat ještě jinak.
Stránka obsahuje výpis článků:
Výpis 1 - nadpis článku, krátký popis článku, náhled obrázku u článku
a odkaz na článek (odkaz je vytažen taky z MySQL z konkrétního
článku)
Výpis 2 - nadpis článku, krátký popis článku, náhled obrázku u článku a odkaz na článek (odkaz je vytažen taky z MySQL z konkrétního článku)
Při kliknutí na odkaz se mi zobrazí, že stránka neexistuje.
Nevím totiž jak napsat script, který pracuje i s URL.
Každý článek se má zobrazit v jednom jediném souboru (řekněme
contents.php) a já nevím co do tohoto souboru napsat aby se mi tam zobrazil
ten konkrétní článek. Takže je momentálně opět prázdý a přemýšlím nad tím co tam
vlastně napsat.
Už je to lépe pochopitelné co myslím?
tak se omlouvám. Holt
mě to nenapadlo.
Doufám, že to nebylo myšleno jako sarkasmus
Na to slúži súbor, ktorý sa volá router a ktorý určite nemáš zakomponovaný. V ňom nastavíš, že aký controller sa má spúšťať na ktorej URL adrese. Nuž, toto spraviť v raw PHP je drina aj pre mňa, čo mám čo-to odkódené...
V skratke to môžeš dosť cigánskym spôsobom urobiť tak, že bude
každý a jeden článok odkazovať na súbor content.php a vždy do neho
pošleš v $_POST dáta práve z toho článku, ktorý ti treba. Je to pre teba
pochopiteľné, alebo to treba šťavnatejšie opísať? Ale pozor, je to dosť cigánsky
spôsob.
Jo to bude ono. Díval jsem se na tutoriál "Jednoduchý redakční systém v
PHP objektově (MVC)" a je to přesně ono. Nicméně přiznám se, že se
znalostmi jaké mám toto nedám dohromady ani omylem
Byl by prosím někdo schopen vytvořit ten router?
Klidně i zaplatím, když to bude fungovat.
Nejlépe s vysvětlivkama pro troubu. Abych to pochopil a pak už neotravoval
Stačí říct cenu. Podotýkám, že nejsem nějak bohatý
Vím, že to ale bude něco stát.
Děkuji případně
Neplať, poďme na to... Poznáš jQuery? Použil si ho už na frontende?
Jasné, aj ja som toho názoru... ono riešiť router je naprd. Pravdepodobne sa ani samotný router ako taký spraviť nedá... Väčšinou sa to rieši tak, že htaccess (v horšom prípade nginx) si nastavíš tak, že ti smeruje niekde, kde sa spracovávajú URL. Zvykne to byť index.php, ktorý sa odkazuje na router a v routri je nejaký mechanizmus, ktorý ti vráti to, čo potrebuješ. Je to dosť zložité a neni to robota na dve hodiny.
Daj konečne už link, čo robíš, nech sme v obraze. Dalo by sa to vyriešiť celá stránka cez GET, ktorou by si si preposielal podstránky a pod. Je to cigánska robota, ale fungovalo by to. Pokiaľ nechceš spraviť druhý facebook (čo asi nechceš), tak by to obzvlášť vadiť nemalo...
Ja som toho názoru, že človek by mal vedieť aj to, ako fungujú veci, ktoré sa dnes už nepoužívajú.
jQuery jsem nikdy nepouzival. Snazim se zatim naucit PHP. Na JS ( to mam
takovy pocit ze je jQuery) se chci postupne propracovat. Je to problem
kdyztak?
Kazdopadne diky
Co se týká linku tak je to spíše jen učebnice pro mě. Žádný link
jako takhle vlastně není
Chci něco udělat až budu umět pořádně PHP. Zatím umím jen okraj (hodně
slabý okraj) PHP. HTML a CSS ano ale toť vše. Chci umět více
Nie je, ale šlo by elegantne použiť presne na to, čo potrebuješ. Ešte k tomu moderne, AJAX-ovo by natiahlo na pozadí obsah článku a tým pádom aj rýchlejšie, keďže ťaháš len HTML článku a nie HTML celej stránky.
O AJAXu vím. Tím by se to hodně urychlilo. Bohužel to neovládám. Zkusil
jsem se v tom vyznat ale momentálně se chci nějak soustředit na PHP. Vím,
že JS nabízí taky hodně šikovných možností.
Byť Tebou, tak to skúsim, lebo hneď zistíš, že je to jednoduché. A PHP použiješ aj tak, lebo PHP Ti musí načítať obsah článku z databázy.
Myslím, že když půjdeme krok po kroku tak to určo nějak zvládnu
Pomohl by jsi mi tedy kdyžtak prosím s tím routerem? I kdyby to mělo být i
přes JS? Myslím zase na druhou stranu, že to nebude ke škodě. Alespon budu
vědět více
Môžem, len netuším čo máš ako napísané. Použil si na severi nejaký framework? Nette? Symphony? Laravel? Čo klient? Použil si nejaký framework tam? Daj nejaký konkrétny kód, ukáž čo konkrétne nefunguje a presne to aj vyriešime a nebudeme tu mať len neurčitú akademickú debatu.
Nepoužívám žádný framework. Vše jsem si napsal sám
Toto je zobrazení výpisu článku.
<?php
foreach ($claneknahled as $nahled)
{
echo ('<div class="vypismini">');
echo('<img src="./images/'.htmlspecialchars($nahled['img_clanku']));
echo('" alt="'.htmlspecialchars($nahled['nadpis_clanku']).' - '.htmlspecialchars($nahled['rubrika']).' - Povolte si v prohlížeči obrázky, jinak neuvidíte obsah správně"><div class="detailni">');
echo('<h2 class="rubrika">' . htmlspecialchars($nahled['rubrika']).'</h2>');
echo('<h2>' . htmlspecialchars($nahled['nadpis_clanku']).'</h2>');
echo('<p>' . htmlspecialchars($nahled['perex_clanku']).'</p>');
echo('<a href="' . htmlspecialchars($nahled['kategorie']).'/'. htmlspecialchars($nahled['link_clanku']).'" title="'.htmlspecialchars($nahled['nadpis_clanku']). '">Více</a>');
echo ('</div>');
echo ('</div>');
}
Jde mi o to, že když kliknu na link, tak chci aby se mi otevřel článek.
Momentálně nemám nic dalšího.
Výpis se tahá takto
$claneknahled = Db::queryAll('
SELECT *
FROM clanky
WHERE zverejnen = 1
LIMIT 5
');
Podotýkám, že mi jde o to aby se mi třeba v content.php mohl zobrazit
detail článku.
Soubor je vytvořený ale je momentálně ještě pořád prázdný, protože
nějak fakt netuším co do něj napsat. Nápad mám ale nevím jak to
napsat.
Jinak to co tady vidíš (to co jsem udělal) je na základě toho co jsem
našel tady. Ale nechápu mechanismus zobrazení článku samotného po
kliknutí.
Čiže tie <a href="">Více</a> teda ukazujú na neexistujúce stránky?
Ano. Momentálně to odkazuje na neexistující stránku, protože nevím jak vyřešit zobrazení stránky z MySQL bez toho abych pokaždé vytvořil stránku na serveru s tím konkrétním linkem. To je pak MySQL zbytečné, protože se to může tahat i bez toho.
Nicméně v MySQL je v tabulce 'kategorie' a v tabulce 'link_clanku' napsaná adresa.
Takže ak tomu dobre rozumiem, zo stránky na ktorej je zoznam článkov chceš po kliknutí na "Viac" načítať stránku "content.php" a problém je, že pri každom článku kotva odkazuje na tú istú stránku <a href="content.php">. Čiže vlastne chceš mechanizmus, kód v stránke "content.php" ktorý rozlíši aký článok chceš stiahnuť z databázy a vygenerovať ho do stránky. O toto ide?
Tak jsem to asi napsal špatně
Po kliknutí na více, které odkazuje třeba na "kategorie/clanek" se má
článek načíst do souboru content.php ale url má být "kategorie/clanek".
Soubor content.php má jen umožnit zobrazení konkrétního článku.
Absolútne najjednoduchšie riešenie je odovzdať stránke content.php ID článku. Napríklad tak, že do tej stránky s náhľadom článkov vygeneruješ do "a href" nie len content.php, ale pripneš aj ID. Nech ten link vyzerá miesto takto <a href="content.php">Více</a>, napríklad takto pre prvý článok <a href="content.php?id=123">Více</a> a takto pre druhý <a href="content.php">Více</a>
Následne v tej stránke content.php budeš mať asi takýto začiatok:
<?php
$id = $_GET["id"];
// A teraz načítaj z DB obsah článku s takým ID
// Niečo ako SELECT content FROM posts WHERE id=$id
Na půl hodiny odejdu. Jak se vrátím tak se na to podívám detailně a
zkusím to rovnou.
Každopádně pokud je to ono tak jsem úplný idiot a tobě díky.
Tak teraz chápem. Ale pokiaľ viem, je to založené, väčšinou, zrovna na podobnom princípe, ako som Ti napísal. Ty vlastne voláš v linku článok ako napr. content.php?category=sport&post=spartak-zasa-prehral. A následne si v content.php zistíš v poli $_GET[] ktorý článok sa má vlastne do stránky vygenerovať. Akurát, že zároveň máš v Apache v .htaccess nakonfigurovaný URL rewriting, ktorý z linku content.php?category=sport&post=spartak-zasa-prehral urobí čo potrebuješ. Napríklad skryje meno stránky, content.php a z query stringu "?category=sport&post=spartak-zasa-prehral" urobí "/sport/spartak-zasa-prehral".
Jo je to jak říkáš. Nicméně mi to nefunguje. Napsal jsem ten dotaz takto
$id = $_GET["kategorie"].$_GET["link_clanku"];
// zobrazení detailu článku z MySQL
$clanekdetail = Db::queryOne("
SELECT *
FROM clanky
WHERE kategorie AND link_clanku = $id
");
a nic.
Každopádně je i jasné, že musím nějak upravit odkaz ale nejsem si jistý
co tam dát. Zkusil jsem toto ale nějak se to nechce zobrazit
echo('<a href="./cestaksouboru/clanek.php?=' . htmlspecialchars($nahled['kategorie']).'/'. htmlspecialchars($nahled['link_clanku']).'" title="'.htmlspecialchars($nahled['nadpis_clanku']). '">Více</a>');
Ale jsem na dobré cestě, protože už to neříká, že stránka
neexistuje. Ale i tak se mi to nedaří zprovoznit
Máš pro hlupáka ještě nějakou radu?
Moc děkuji
Tak ani po cca 2 hodinách se mi nepovedlo zobrazení článku.
Kdyby někdo přeci jen podle toho co jsem tady napsal, věděl jak toho
docílit tak mu budu moc vděčný. Už fakt nevím.
I jsem si hrál s kódem a stejně nic.
Nyní to mám napsané následovně
Do index.php jsem vložil toto
<?php
if((!$_GET['id1']) && (!$_GET['id2']))
{include ('./includes/stavba/content.php');}
else
{
$clanekdetail = Db::queryOne("
SELECT *
FROM clanky
WHERE kategorie = $id1"."AND link_clanku = $id2
"); include ('.cestaksouboru/clanek.php');}
?>
a soubor clanek.php v sobě má
<?php
$id1 = $_GET['kategorie'];
$id2 = $_GET['link_clanku'];
// zobrazení detailu článku z MySQL
$clanekdetail = Db::queryOne("
SELECT nadpis_clanku
FROM clanky
WHERE kategorie = $id1 AND link_clanku = $id2
");
?>
a stejně nic. V linku
echo('<a href="' . htmlspecialchars($nahled['kategorie']).'/'. htmlspecialchars($nahled['link_clanku']).'" title="'.htmlspecialchars($nahled['nadpis_clanku']). '">Více</a>');
jsem neměnil vůbec nic.
Vymyslel som pre Teba nasledovné, pomerne jednoduché avšak pomerne univerzálne riešenie. Už ho spisujem...
Založ si nový súbor, pomenuj ho index.php a vlož do neho nasledovný kód:
<a href="clanky/sparta-prehrala/">TEST</a>
<?php
echo $_GET["clanky"];
?>
A založ ešte súbor s názvom .htaccess a do neho vpíš toto:
RewriteEngine On
RewriteRule ^([^/]+)/([^/]+) /index.php?$1=$2
Potom si už len otvor prehliadač na adrese localhost a klikni na ten link. Kód je kratučký a mal by si z neho pochopiť, ako sa cesta prevádza na query string. Skús si to, skús to pochopiť a teoreticky by Ti to malo stačiť na to routovanie ktoré potrebuješ pre svoje cms.
Moc ti děkuji. Z tohoto bych to měl pochopit
Sice mi to nějakou chvilku asi zabere abych to pobral ale toto je naprosto jak
pro blbečka
Díky moc
Na to se stejně asi budu muset vyspat abych to pochopil
Každopádně už vidím co jsem tam nikde neměl. V htaccess jsem neměl ty
lomítka. Na to jsem zapoměl. A jestli to chápu dobře, tak ten link po
kliknutí zobrazí vše co je za názvem clanky.
Teď jen musím přijít na to jak to použiju. Každopádně díky za
berličku.
Áno, ten htaccess vlastne zmení ten href /clanok/nazov-clanku na
index.php?clanok=nazov-clanku. Proste text za prvým lomítkom načíta do
premennej $1 a text za druhým lomítkom načíta do premennej $2 a následne je
tam prepisovacie pravidlo aby zavolal index.php?$1=$2. Samozrejme, že to ide
použiť aj inak, ako napríklad
akykolveksubor.php?kategoria=$1&clanok=$2 a potom to v subore
akykolveksubor.php čítaš ako $_GET["kategoria"] a $_GET["clanok"]. Len som to
napísal čo najjednoduchšie na pochopenie. Ale myslím, že to fakt dáš a
navedie Ťa to na správnu cestu. A samozrejme, keby to nešlo, píš...
Jasně. Zkusil jsem i menší test. Změnil jsem clanky na clanek a je to
presne jak jsem to pochopil. Každopádně kdyby nahodou tak budu ještě
otravovat. Ale toto je i pro mě dostatečné
Ahoj. Tak konečně jsem se k tomu dostal.
Takže to nefunguje a navíc ten příkaz v htaccess nějakým mě divným
způsobem zablokoval zobrazování všech obrázků.
A článek se i tak nechce zobrazit.
Tak teď už fakt nevím
Přijde mi to už směšné.
To je teoreticky v poriadku, to bol základný príklad. Prepíš ten htaccess ako je uvedené nižšie a statické súbory by mali začať fungovať:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+) /index.php?$1=$2
Tými dvoma riadkami si tam vlastne pridal podmienku, že ak sa jedná o reálny adresár, alebo súbor, nech to neprepisuje a pošle tak, ako to je. Skús to, malo by to byť ono...
Kus vola jsem. Věděl jsem, že do toho htaccess mám něco dopsat.
Díky.
Nicméně i tak se mi nedaří článek zobrazit.
Statické súbory - obrázky a pod. už to načíta? Už to nechce načítať len článok po kliknutí na "Více"?
Obrázky už to načítá.
Nicméně článek to stále nenačítá
Dobre. Aké linky sú vygenerované v tej stránke s náhľadom na články? Napíš presný href.
Zobrazeno 50 zpráv z 51.