Kategorie a menu, generovanie v php

Programovacie jazyky, rady, poradňa...
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Kategorie a menu, generovanie v php

Príspevok od používateľa .:M4jco:. »

Zdravím

Viem že tu už píšem dosť, ale furt mám nejaký problém a to programovanie mi nejako moc nejde ale chcem sa to naučiť, momentálne neviem vyriešiť jeden problém.
Jedná sa o generovanie kateogórií a následne menu z tých kategorií. Viem, je to dosť nezrozumiteľné, ale pokusím sa vam to viac vysvetliť. V databáze mám vytvorený tabulku "categories" a v ňom su kategorie ako napríklad "home" "profil" a tak dalej, každá kategória ma svoje vlastné id. Zatiaľ by malo byť všetko rozumné, tak idem ďalej. Následne chcem vypísať všetky tieto kategórie ktoré mam uložené v databáze do nejakého menu. Proste aby sa na stránke vypísali všetky tie kategórie ako "home" "profil" a podobne. Tu by malo byť tiež všetko jasne, a toto ešte dokážem spraviť, ale potrebujem, aby tie vypísane kategórie boli odkazy, na ktoré keď kliknem tak ma to hodí do príslušnej sekcie, a vypíšu sa články z príslušnej sekcie. Napríklad kliknem na stránku (napr. www.nieco.sk/index.php?category=1) "profil" a vypíšu sa mi všetky záznamy ktoré sú v kategórií profil. Chcem aby sa to generovalo automaticky, pretože robiť to ručne je dosť zbytočné. Proste v administrácií si pridám kategóriu, a ihneď sa mi zobrazí na hlavnej stránke ako blok menu, ktoré bude mať odkaz napríklad www.nieco.sk/index.php?category=1, tak ma to presmeruje do kategŕoie ktorá ma id 1, a podobne. Mám to spravené na svojej stránke, ale je to spravené "na tvrdo" čiže pokial chcem pridať novúsekciu a aby sa zobrazoval v tej kategórií tak musím upraviť súbory...Prajem si aby sa to generovalo automaticky.

Viem, je to možno trochu zložitejšie a dlhšie, ale bol by som rád keby mi to niekto napísal, poprípade niekto naviedol kúskami kódu, a ja si hádam nejako poradím. Za každú radu budem rád.

Ďakujem
vivaSlovakia
Guru wannabe
Guru wannabe
Príspevky: 2119
Registrovaný: 29 júl 2006, 10:30

Príspevok od používateľa vivaSlovakia »

nikde som si nevsimol ze ku kazdemu clanku priradujes id kategorie... bude to potrebne

a zobrazenie clankov spravis s jednoduchym query

Kód: Vybrať všetko

SELECT * FROM clanky WHERE id_categ = '{$_GET['category']}'
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

No to som zabudol napísať. KAždý článok keď ho pridám, a zvolím kategoriu v ktorej bude, tak sa mu priradí id podla kategórie.
Tvoj spôsob ktorý si mi poslal fruxo mám použitý teraz na stránke, a funguje to, ale ja potrebujem aby sa mi generovalo to menu automaticky, tie kategórie su spravené dá sa povedať kompletne. Už len potrebujem generovať to menu automaticky podla tých kategórií ktoré mám vytvorené.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Asi som nepochopil čo potrebuješ, lebo inak je to vytvorenie menu jednoduché.
Použiješ SELECT, ktorý ti vráti všetky kategórie a pomocou php vytvoríš to menu...
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

No a ja potrebujem vedieť ako to menu v tom PHP vytvorím :wink:
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Všadepoužiteľný spôsob neexistuje.

Vieš vyrobiť SELECT, pomocou ktorého dokážeš (v cykle) zobraziť všetky kategórie? Ak áno, tak je to jednoduché. :)
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

Dokážem akurát urobiť select pomocou ktorého vypíšem všetky tie kategórie, do cyklu to neviem zakomponovať, a ani nemám nejaké tušenie ako by to malo vyzerať.

Pokús sa mi aspoň slovne opísať čo sa má vlastne v tom cykle spraviť a ja skúsim niečo napísať a potom to sem hodím na zhodnotenie :wink:
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

$result = mysql_query("select id, nazov from categorie order by nazov");
while($link = mysql_fetch_object($result)){
    echo "<a href=\"index.php?category=".$link->id."\">".$link->nazov."</a><br />";
}
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

Díky, funguje to :-) avšak ešte potrebujem poslednú vec spraviť, a to, že keď sa mi spravia tie linky tvojím selectom (napríklad www.nieco.sk/index.php?category=2) a keď klikenm na ten link, tak sa mi vypíšu všetky články ktoré sú uložené v kategórí s id 2. Nejako to nedokážem zakomponovať do tvojho skritpu :?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

Kód: Vybrať všetko

$result = mysql_query("select id, nazov from categorie order by nazov");
while($link = mysql_fetch_object($result)){
    echo "<a href=\"index.php?category=".$link->id."\">".$link->nazov."</a><br />";
	$result2 = mysql_query("select * from clanky where id_kategorie = ".$link->id);
	while($clanok = mysql_fetch_object($result2)){
		echo "<a href=\"index.php?clanok=".$clanok->id."\" style=\"padding-left:10px\">".$clanok->nazov."</a><br />";
	}
}
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

Hmm, použil som to, avšak pokial kliknem na akýkoľvek odkaz tak sa nezobrazí akoby žiadna kategória. Nevypíšu sa žiadne články ani nič, pritom v každej kategórií je minimálne 5 článkov...
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Napíš čo presne robíš a ako; čo presne chceš dosiahnuť... lebo takto bude audiotrack iba hádať, prečo ti to vlastne nefunguje. :)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

audiotrack nebude hádať prečo to nefunguje, lebo to vie. Skôr by mal hádať ako vypadá zdroják stránky zobrazujúci články :) ja som ho vygeneroval ako clanok=id ale ak sa ti premenná volá inač, tak si to zmeň. Takisto nemyslím že by sa o články staral index.php, skôr to bude iná stránka. Ale upraviť si odkaz už musíš sám, keď si nenapísal ukážku linku na nejaký článok
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

Okej, dám to tu všetko aby v tom nebol problém a aby sa mohol problém vyriešiť :-)

Takže: Na index.php zobrazujem všetky články bez ohladu na to v akej je článok kategórií. Proste sa vypíše 5 článkov a viac sa nerieši.

O zobrazovanie kategórií sa staral súbor node.php ktorý aj v sebe obsahoval zobrazovanie kategórií ale bolo to robené v následovnom štýle:

Kód: Vybrať všetko

switch ($show)
{
	case "blog":
   $query2 ="SELECT nadpis, obsah, kategoria,";
   $query2.=" DATE_FORMAT(datum, '%d.%m, %Y') AS datum";
   $query2.=" FROM nodz_nodes where kategoria='Blog' ORDER BY id DESC LIMIT 10";
   $result2=mysql_query($query2);
   while (list($nadpis2,$obsah2,$kategoria2,$datum2) = 
    mysql_fetch_row($result2)) {
       echo "<b><h2>$nadpis2</h2><h3>Kategória: ($kategoria2)</h3></b>";
       echo "<p>$obsah2</p><p>$datum2</p>";
   }   
		break;
A vlastne ked som chcel zobraziť sekciu "Blog" tak som mal odkaz www.nieco.sk/node.php?show=blog a zobrazili sa mi články z kategorie blog. Potom ked som si chcel urobiť napríklad sekciu "Profil" tak som mal použitý zasa takýto kód:

Kód: Vybrať všetko

	case "profil":
   $query3 ="SELECT nadpis, obsah, kategoria,";
   $query3.=" DATE_FORMAT(datum, '%d.%m, %Y') AS datum";
   $query3.=" FROM nodz_nodes where kategoria='Profil' ORDER BY id DESC LIMIT 10";
   $result3=mysql_query($query3);
   while (list($nadpis3,$obsah3,$kategoria3,$datum3) = 
    mysql_fetch_row($result3)) {
       echo "<b><h2>$nadpis3</h2><h3>Kategória: ($kategoria3)</h3></b>";
       echo "<p>$obsah3</p><p>$datum3</p>";
   }   
		break;
A takto to pokračovalo ďalej. Ako viete, toto nieje bohvieaký dobrý spôsob a prto chcem aby sa menu generovalo automaticky (to je už vyrešené) a aby po kliknutí na danu kategóriu sa zobrazili články z tej sekcie.

A zároveň index.php obsahoval takýto istý kod, avšak nebola tam podmienka where kategoria="abcd"

Teraz som použil tvoj kód, avšak nefunguje to, a problém bude asi v tom že štruktura databazy je trochu iná než som pravdepodobne napísal.

Štruktúra je následovná:

Je tabulka menom "categories" a tam su dva stlpce: id a nazov

Potom mám tabulku menom "nodes" a tam su stlpce následovné: id datum nadpis obsah kategoria

Kde položka kategória obsahuje názov kategórie (a tu bude parvdepodobne tá chyba, pretože myslím si že v stlpci id by malo byť id kategórie v ktorej je uložená)
To je všetko, zatial su tam len tieto dve tabulky, viac ich tam neni.


Potom, linky na články neexistujú. Proste tie správy obsahujú len nadpis(ktorý neni klikatelný) nejaký text a datum. To je všetko.


Hádam by to malo byť jasné aspoň trochu už :-) Je to už posledná vec ktorú potrebujem, potom už tu nebudem otravovať :-)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

menu bude teda nejak takto:

Kód: Vybrať všetko

$result = mysql_query("select id, nazov from categories order by nazov");
while($link = mysql_fetch_object($result)){
    echo "<a href=\"node.php?category=".$link->id."\">".$link->nazov."</a><br />";
   $result2 = mysql_query("select * from nodz_nodes where kategoria = '".$link->nazov."'");
   while($clanok = mysql_fetch_object($result2)){
      echo "<a href=\"node.php?show=".$clanok->id."\" style=\"padding-left:10px\">".$clanok->nadpis."</a><br />";
   }
}
a nodes.php bude takto:

Kód: Vybrať všetko

if(isset($_GET['show']){
	$query2 ="SELECT * ";
   $query2.=" DATE_FORMAT(datum, '%d.%m, %Y') AS datum";
   $query2.=" FROM nodz_nodes where id=".(int)$_GET['show'];
   $result2=mysql_query($query2);
   while (list($nadpis2,$obsah2,$kategoria2,$datum2) =
    mysql_fetch_row($result2)) {
       echo "<b><h2>$nadpis2</h2><h3>Kategória: ($kategoria2)</h3></b>";
       echo "<p>$obsah2</p><p>$datum2</p>"; 
} 

else if(isset($_GET['category']){
	$query2 ="SELECT * ";
   $query2.=" DATE_FORMAT(datum, '%d.%m, %Y') AS datum";
   $query2.=" FROM nodz_nodes as n, categories as c where c.name = s.kategoria and c.id=".(int)$_GET['cat'];
   $result2=mysql_query($query2);
   while (list($nadpis2,$obsah2,$kategoria2,$datum2) =
    mysql_fetch_row($result2)) {
       echo "<b><h2>$nadpis2</h2><h3>Kategória: ($kategoria2)</h3></b>";
       echo "<p>$obsah2</p><p>$datum2</p>"; 
}
keďže je to len z hlavy, a keďže mám stále nejasno čo a ako tam máš, tak to ber s rezervou ak to nepôjde
.:M4jco:.
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 442
Registrovaný: 01 máj 2007, 13:07
Bydlisko: Bassline lover
Kontaktovať používateľa:

Príspevok od používateľa .:M4jco:. »

Díky moc audiotrack, je to hotové a funguje to. Síce som musel prerobiť celú štruktúru mojho webu, lebo som musel definovať globalne premenné ale už mi to funguje. Velmi ti ďakujem za pomoc :)
Napísať odpoveď