Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Menu sortowanie
sebian
post 11.03.2010, 15:04:15
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


Witam.

Problem polega na tym iz nie wiem jak zrobić Menu drzewko. Nie mam problemu z wyświetleniem wynikow z bazy tylko z sortowaniem tak aby wygladało to tak:

Grupa 1
- Produkt 1
- Produkt 2
- Produkt 3
Grupa 2
- Produkt 1
- Produkt 2
- Produkt 3
itd...

Ilość pozycji i grup zależna jest od tego ile sie tego wprowadzi przez panel admina.
Także chodzi mi głownie jak to wyświetlić w takiej strukturze jak wyżej podałem.
Oto co posiadam:

Index.php
  1. <?php
  2.  
  3. include('baza.php');
  4.  
  5. echo '<h2>Kategorie artykułów</h2>';
  6.  
  7.  
  8. $result = mysql_query("SELECT * FROM articles_categories ORDER BY id ASC");
  9. while($row = mysql_fetch_array($result))
  10. {
  11. echo '<a href="cat.php?id='.$row['id'].'"><b>'.stripslashes($row['tytul']).'</b></a><br />';
  12. echo stripslashes($row['opis']).'<br /><br />';
  13. }
  14.  
  15.  
  16.  
  17. ?>


cat.php
  1. <?php
  2.  
  3.  
  4. include('baza.php');
  5.  
  6. $id = (int)$_GET['id'];
  7.  
  8. $result = mysql_query("SELECT * FROM articles_categories WHERE id='$id'");
  9. $row = mysql_fetch_array($result);
  10.  
  11. echo '<h2>'.stripslashes($row['tytul']).'</h2>';
  12.  
  13. $result = mysql_query("SELECT * FROM articles WHERE id_cat='$id' ORDER BY tytul ASC");
  14. while($row = mysql_fetch_array($result))
  15. {
  16. echo '<a href="art.php?id='.$row['id'].'"><b>'.stripslashes($row['tytul']).'</b></a> <!--('.date("d.m.Y, H:i", $row['data']).') --> <br />';
  17. echo stripslashes($row['opis']).'<br /><br />';
  18. }
  19.  
  20.  
  21.  
  22. ?>


art.php
  1. <?php
  2.  
  3.  
  4. include('baza.php');
  5.  
  6. $id = (int)$_GET['id'];
  7.  
  8. if(isset($_POST['ok']))
  9. {
  10. $data = time();
  11.  
  12. if(empty($nick) || empty($tresc)) $komunikat = 'Wpisz wszystkie pola!';
  13. else
  14. {
  15. $query = "INSERT INTO `articles_comments` (`id_art`, `nick`, `tresc`, `data`) VALUES ('$id', '$nick', '$tresc', '$data')";
  16.  
  17. if(mysql_query($query)) $komunikat = 'Pomyslnie dodano komentarz!';
  18. }
  19. }
  20.  
  21. $result = mysql_query("SELECT * FROM articles WHERE id='$id'");
  22. $row = mysql_fetch_array($result);
  23.  
  24. echo '<h2>'.stripslashes($row['tytul']).'</h2>';
  25. echo '<p>'.stripslashes($row['tresc']).'</p>';
  26.  
  27. echo $komunikat;
  28.  
  29.  
  30.  
  31. ?>


I struktura bazy:
  1. CREATE TABLE `articles` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_cat` int(11) NOT NULL,
  4. `tytul` text NOT NULL,
  5. `tresc` text NOT NULL,
  6. `opis` text NOT NULL,
  7. `data` int(11) NOT NULL,
  8. `suma` int(11) NOT NULL,
  9. `ocen` int(11) NOT NULL,
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=MyISAM ;
  12.  
  13.  
  14. CREATE TABLE `articles_categories` (
  15. `id` int(11) NOT NULL AUTO_INCREMENT,
  16. `tytul` text NOT NULL,
  17. `opis` text NOT NULL,
  18. PRIMARY KEY (`id`)
  19. ) ENGINE=MyISAM ;
  20.  
  21.  
  22. CREATE TABLE `articles_comments` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `id_art` int(11) NOT NULL,
  25. `nick` text NOT NULL,
  26. `tresc` text NOT NULL,
  27. `data` int(11) NOT NULL,
  28. PRIMARY KEY (`id`)
  29. ) ENGINE=MyISAM ;


Ten post edytował sebian 11.03.2010, 16:14:24
Go to the top of the page
+Quote Post
Ges
post 11.03.2010, 16:53:22
Post #2





Grupa: Zarejestrowani
Postów: 61
Pomógł: 9
Dołączył: 22.02.2008

Ostrzeżenie: (0%)
-----


Generalnie logika mogłaby być taka:


  1. $categories = getAllCategories(); // getAllCategories pobiera SELECT * FROM tabeli kategorii
  2.  
  3. foreach($categories as $categoryId => $category)
  4. {
  5. print $category->name;
  6.  
  7. $subcategories = getSubcategories($categoryId);
  8. //getSubcategories($categoryId) - pobiera wszystkie akrykuły, które należa do tej kategorii, czyli SELECT * FROM ... WHERE id_cat = $categoryId
  9.  
  10. foreach($subcategories as $subcategory)
  11. {
  12. print "-" . $subcategory;
  13. }
  14. }


Oczywiście kod powyżej się nie kompiluje, ale powinnien Cię naprowadzić na sposób w jaki to napisać.
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 17:25:48
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. include('baza.php');
  4.  
  5. $categories = mysql_query("SELECT * FROM articles_categories ORDER BY id ASC"); // getAllCategories pobiera SELECT * FROM tabeli kategorii
  6.  
  7. foreach ($categories as $categoryId => $category)
  8. {
  9. print $category->name;
  10.  
  11. $subcategories = mysql_query("SELECT * FROM articles WHERE id_cat='$categoryId' ORDER BY tytul ASC");
  12. //getSubcategories($categoryId) - pobiera wszystkie akrykuły, które należa do tej kategorii, czyli SELECT * FROM ... WHERE id_cat = $categoryId
  13.  
  14. foreach ($subcategories as $subcategory)
  15. {
  16. print "-" . $subcategory;
  17. }
  18. }
  19. ?>


przy foreach wywala bład... :/ Warning: Invalid argument supplied for foreach() in C:\Program Files (x86)\WebServ\httpd-users\arty\index.php on line 8

Nie wiem dlaczego.

Jeszcze tak probowałem:
  1. <?php
  2.  
  3. include('baza.php');
  4.  
  5. echo '<h2>Kategorie artykułów</h2>';
  6.  
  7.  
  8. $result = mysql_query("SELECT * FROM articles_categories ORDER BY id ASC");
  9. while($row = mysql_fetch_array($result))
  10. foreach($row as $id => $category)
  11. {
  12. print $category->name;
  13.  
  14. $result = mysql_query("SELECT * FROM articles WHERE id_cat='$id' ORDER BY tytul ASC");
  15. while($row = mysql_fetch_array($result))
  16.  
  17. foreach($row as $subcategory)
  18. {
  19. print "-" . $subcategory;
  20. }
  21. }
  22.  
  23.  
  24.  
  25. ?>

ale wtedy wyswietla tylko nagłowek h2 i nic pozatym...

Ten post edytował sebian 11.03.2010, 17:33:42
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 17:49:21
Post #4





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Można spróbować przy użyciu jednego zapytania, coby nie zadżumiać bazy winksmiley.jpg
  1. $articles = mysql_query("SELECT a.*, ac.tytul tytul_kat FROM articles a
  2. LEFT JOIN articles_categories ac ON ac.id = a.id_cat
  3. ORDER BY a.id_cat, a.tytul");
  4.  
  5. $currentCat = -1;
  6.  
  7. while($art = mysql_fetch_array($articles)) {
  8. if($art['id_cat'] != $currentCat) {
  9. echo '<h2>'. $art['tytul_kat'] .'</h2>';
  10. $currentCat = $art['id_cat'];
  11. }
  12.  
  13. echo $art['tytul'];
  14. }


Ten post edytował luck 11.03.2010, 18:27:42


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 18:13:03
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


biggrin.gif PIerwszy raz widze tak skomplikowane zapytanie do bazy biggrin.gif
Wiem ze jest tam zapytanie do articles_categories i articles... ale gdzies jest w zapytaniu bład i nie moge sie połapac... bład wywala w lini:
  1. while($art = mysql_fetch_array($articles)) {
mysql_fetch_array(): supplied argument is not a valid MySQL result resource
czyli zapytanie jest skopan, tylko gdzie biggrin.gif
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 18:25:00
Post #6





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Racja, sorki. Niepotrzebne WHERE gdzieś się zaplątało.
  1. SELECT a.*, ac.tytul tytul_kat FROM articles a
  2. LEFT JOIN articles_categories ac ON ac.id = a.id_cat
  3. ORDER BY a.id_cat, a.tytul


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 18:54:36
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


dziwny wynik wyszedł.. tongue.gif

Mysłałem ze wypluje mi tak jak to w bazie jest zrobione czyli:

Kategoria 1
- Artykul 1
- Artykul 3
Kategoria 2
- Artykul 2

ale zapodał całkiem inny wynik mianowicie smile.gif

Artykul 1
- Artykul 1
- Artykul 3
- Artykul 2

Nie jestem debesciakiem w php ciagle sie ucze, ale z tym nie wiem co zrobic tongue.gif
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 19:01:14
Post #8





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Skopiuj jeszcze raz mój kod, bo porawiłem kilka literówek. Powinno być ok.


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 19:07:07
Post #9





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


Wyszło bajecznie, dzieki wielkie smile.gif smile.gif
teraz sobie menu podepne z tym już chyba dam rade smile.gif
Masz brwara smile.gif
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 19:09:34
Post #10





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


No to całe szczęście, bo bym się zeźlił, że na próżno pisałem winksmiley.jpg
Pozdrawiam.


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 19:28:19
Post #11





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


ha tongue.gif Jeszcze jeden szkopuł tongue.gif biggrin.gif Jak dorobiłem do tego link tongue.gif:P:P

http://78.9.89.146/~arty/ (lnku do mojego PC)


tam gdzie pisze "Kupa" pod linkiem powinien być art tongue.gif
A jest w kategori 2 w artykule nr 2 tongue.gif
Potrzebuje z tabeli articles jeszcze ID wyciagnać i podpiac pod link aby prawidłowo wyswietlało tylko nie wiem jak dołozyć zapytanie do tego co zrobiłeś... jesli byś mogł mi tez wytłumaczyc lub masz jakies linkacze gdzie opisana jest budowa takich długich zapytan to bede dzwieczny smile.gif

Ten post edytował sebian 11.03.2010, 19:32:22
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 19:36:40
Post #12





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Bo pewnie do linka wstawiasz id kategorii, zamiast artykułu. Mam rację? Taki prosty debug:
  1. echo $art['tytul'] .', id artykułu='. $art['id'] .', id kategorii='. $art['id_cat']


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 19:38:45
Post #13





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


No własnie dla tego sie tak stało dlatego tez potrzeba dołożyc zapytanie do articles w celu pobrania id tongue.gif
Tylko wiem jak sie pisze takie wieksze zapytania smile.gif
Teroretycznie wiem co zroić ale nie potrafie tego wykonac tongue.gif

edit.

Dałem zamiazt id_cat samo id i jest git... ale wytłumacz mi gdzie jest fragment zapytania ktory wyciaga id z articles... bo jakos nie dowidze....

Ten post edytował sebian 11.03.2010, 19:40:59
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 19:45:50
Post #14





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Cytat(sebian @ 11.03.2010, 19:38:45 ) *
Dałem zamiazt id_cat samo id i jest git... ale wytłumacz mi gdzie jest fragment zapytania ktory wyciaga id z articles... bo jakos nie dowidze....

No właśnie o to mi chodziło smile.gif A id jest stąd:
  1. SELECT a.*

Pobierasz wszystkie kolumny z tabeli articles.


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 19:49:26
Post #15





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


Cholerna gwiazdka tongue.gif:P
A moge sie dowiedzieć tak na przyszłość o co chodzi z "a" i z "ac" w zapytaniu smile.gif
Go to the top of the page
+Quote Post
luck
post 11.03.2010, 19:53:14
Post #16





Grupa: Zarejestrowani
Postów: 317
Pomógł: 58
Dołączył: 6.11.2005

Ostrzeżenie: (0%)
-----


Aliasy tabel. Lepiej to widać z użyciem "AS" (które normalnie można je pominąć, a zapytanie i tak będzie poprawne)
  1. SELECT a.* FROM articles AS a

Jeśli masz bardziej rozbudowane zapytanie, to do konkretnych tabel odwołujesz się przez alias. Czyli a.* = articles.*.


--------------------
Go to the top of the page
+Quote Post
sebian
post 11.03.2010, 20:08:42
Post #17





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


Juz kumam.. smile.gif telar jeszcze problemik z małym znacznikiem tongue.gif
  1. <span class="styletext0"><center>Nasze artukuły</center></span>
  2. <div id="menu_boczne" class="arrowlistmenu">
  3. <?php
  4. include('admin/baza.php');
  5. $articles = mysql_query("SELECT a.*, ac.tytul tytul_kat FROM articles a
  6. LEFT JOIN articles_categories ac ON ac.id = a.id_cat
  7. ORDER BY a.id_cat, a.tytul");
  8.  
  9. $currentCat = -1;
  10.  
  11. while($art = mysql_fetch_array($articles)) {
  12. if($art['id_cat'] != $currentCat) {
  13. echo '<h3 class="menuheader expandable">'. $art['tytul_kat'] .'</h3>';
  14. $currentCat = $art['id_cat'];
  15. }
  16.  
  17. echo '<li><a href="art.php?id='.$art['id'].'"><b>'.$art['tytul'].'</a></li>';
  18.  
  19. }
  20.  
  21. ?>
  22. <!-- <h3 class="menuheader expandable">: GRUPA 1</h3>
  23. <ul class="categoryitems">
  24. <li><a href="#">Pozycja 1</a></li>
  25. <li id="tab2"><a href="#">Pozycja 2</a></li>
  26. <li id="tab3"><a href="#">Pozycja 3</a></li>
  27. <li id="tab4"><a href="#">Pozycja 4</a></li>
  28. <li id="tab5"><a href="#">Pozycja 5</a></li>
  29. </ul>
  30. <h3 class="menuheader expandable">: GRUPA 2</h3>
  31. <ul class="categoryitems">
  32. <li id="tab1"><a href="#">Pozycja 1</a></li>
  33. <li id="tab2"><a href="#">Pozycja 2</a></li>
  34. <li id="tab3"><a href="#">Pozycja 3</a></li>
  35. <li id="tab4"><a href="#">Pozycja 4</a></li>
  36. <li id="tab5"><a href="#">Pozycja 5</a></li>
  37. </ul>
  38. <h3 class="menuheader expandable">: GRUPA 3</h3>
  39. <ul class="categoryitems">
  40. <li id="tab1"><a href="#">Pozycja 1</a></li>
  41. <li id="tab2"><a href="#">Pozycja 2</a></li>
  42. <li id="tab3"><a href="#">Pozycja 3</a></li>
  43. <li id="tab4"><a href="#">Pozycja 4</a></li>
  44. <li id="tab5"><a href="#">Pozycja 5</a></li> -->
  45. </ul>
  46. </div>

Kazda ta pentla
  1. echo '<li><a href="art.php?id='.$art['id'].'"><b>'.$art['tytul'].'</a></li>';
musi siedzieć w
  1. <ul class="categoryitems"> </ul>
bo inaczej js zle interpretuje całe menu isie nie rozwija.. smile.gif tylko z tym ze ul nie moze być petla.
Czyli to musiało by byc takie cos
  1. <ul class="categoryitems">
  2. I TU PETLA
  3. </ul>


Ten post edytował sebian 11.03.2010, 20:10:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.09.2024 - 03:11