![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Witam (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif)
Pisze skrypt sklepu internetowego, zależy mi na tym aby sklep obsługiwał wielopoziomowe kategorie tzn np: SPRZĘT AGD ---| .......................|-miksery .......................|-pralki---| .....................................|-ładowane od góry .....................................|-ładowane od przodu mój pomysł na tabele w bazie odpowiedzialna za przechowywanie informacji o kategoriach jest następujący:
tabela przechowujaca informacje o produktach:
problem pojawia sie przy próbie stworzenia menu ktore takze musi byc wielopoziomowe, a przedewszystkim dynamiczne tzn. musi tworzyc sie automatycznie na podstawie informacji pobranych z bazy danych. Udało mi się znaleźć pewne gotowe menu lecz nie potrafie poradzić sobie z jego tworzeniem na podstawie automatycznie pobranych informacji z bazy. kod menu i jego dokładny opis znajduje się pod adresem MENU nie będę go tu wklejał bo jest dosyć obszerny. Problem tkwi w napisaniu skryptu który wygeneruje kod korzystając z informacji zapisanych w bazie wg wzoru: Domyślam się że trzeba skorzystać z jakiś pętelek lecz nie mam pojęcia jak to zrobić. Może macie jakieś inne pomysły na strukture bazy bądź też samego menu chodzi mi poprostu aby udało mi się napisać skrypt sklepu z wielopoziomowymi kategoriami i menu do ich przeglądania. Z góry dziękuję za wszelkie porady. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 0 Dołączył: 12.02.2007 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
A tak zastanawiam się czy nie można by robić tak aby w bazie określać głębokość menu. Np. 0 1 2 itp. wówczas będziesz wiedział że 0 jest na samej górze a 1 jest dzieckiemm rodzica o wartości 0 natomiast 2 dzieckiem rodzica o wartosci 1. Pozwoli ci to później nawet na zamienianie pozycji dynamicznie przenoszenie z jednego do drugiego itp. a jeśli chcesz aby to było dodatkowo menu rozwijane to sądzę że nie jest to trudne już po tym jak je wygenerujesz korzystając z PHP. Użyj JS i może CSS visibility: none; itp. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Więcej niż powyższe nie mogę ci pomóc, ale też za jakiś czas będę musiał napisać taki skrypt i powyższe mi wg projektu działa. ale... :/ zawsze może być lub jest jakieś ale...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Dziekuje za zainteresowanie i podsuniecie swojej koncepcji, przeanalizowałem to co napisałes i doszedlem do pewnych wnioskow mianowice.
Wyglad tabeli wypelnionej danymi przy moim zalozeniu: TABELA KATEGORIE ------------------------------------------------------------------ |id_kategorii|id_kategorii_nadrzednej|nazwa |opis| ------------------------------------------------------------------ |1 |0 |SPRZĘT AGD| | |2 |1 |MIKSERY | | |3 |1 |PRALKI | | |4 |3 |Ład od góry | | |5 |3 |Ład od przod| | ------------------------------------------------------------------ Wygląd tabeli wypełnionej danymi przy twoim założeniu: TABELA KATEGORIE ------------------------------------------------------------------ |id_kategorii|glebokosc_menu |nazwa |opis| ------------------------------------------------------------------ |1 |0 |SPRZĘT AGD| | |2 |1 |MIKSERY | | |3 |1 |PRALKI | | |4 |2 |Ład od góry | | |5 |2 |Ład od przod| | ------------------------------------------------------------------ do tego momentu jest ok ale jezeli postanowimy dodac jeszcze chocby jeden poziom zerowy np. SPRZET RTV ktory bedzie poczatkiem nowego drzewka u Ciebie wystapi problem bo kategoria SPRZET RTV przyjmie glebokosc "0" i jezeli dodamy jej jakas podkategorie np: TELEWIZORY i ta podkategoria przyjmie zgodnie z Twoim zalozeniem wartosc glebokosc = "1" skad bedziemy wiedziec kogo dzieckiem sa MIKSERY, PRALKI, TELEWIZORY czy sa to dzieci SPRZETU AGD czy RTV u mnie taki problem nie wystapi bo kategoria SPRZET RTV przyjmie id_kategorii = 6, id_kategorii nadrzednej = 0 a jej dzieci przyjma kolejne id_kategorii natomiast id_kategorii_nadrzednej beda przyjmowac = 6 i bedzie wiadomo czyimi sa dziecmi. Widze ze nawet moja koncepcja mogla by dzialac ale jak wygenerowac dla niej menu (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? to jest dla mnie problem.... Tam pod tym linkiem prowadzacym do strony z MENU o którym wspominam jest naprawde dobry opis i wg niego mozna tworzyc nieskonczone struktury i glebokosci ja przedstawiajac tu schemat zawezilem go do 1 poziomu 0 st, 2 poziomow 1 st i 2 poziomow 2 stopnia ale mozna je dowolnie rozbudowywac moze jesli przeczytasz to pomoze Ci to w wymysleniu czegoas aby mi pomoc generalnie problem lezy napisaniu skryptu generujacego takich pare znacznikow HTML wg ponizszego schematu Jezeli zle mysle co do Twojej koncepcji, prosze popraw mnie. Moze wspolnie cos wymyslimy Tobie z tego co piszesz tez bedzie potrzebne takie rozwiazanie. Ten post edytował noels 12.07.2007, 12:54:09 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 5.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
takie cos napisalem na studioceramica.pl
łap klase ktora moze Ci sie przydac (dowolna ilosc podkategorii- rekurencyjnie w takim porzadku jak ty opisales)
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 130 Pomógł: 1 Dołączył: 29.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Nie radziłbym korzystać z takich rozwiązań jak podał poprzednik, albo mi sie zdaje albo przy każdym pobraniu kategorii nadrzednych będzie także zapętlać się dodatkowe mysql_query dla tych podrzędnych, co za tym idzie jeśli będziesz chcial wyświetlić 3 kategorie i do każdej 3 podkategorie to wywołanych zostanie 10 zapytań, czyli lepiej nie mowić co by było jeśli tych kategorii podkategorii i kolejnych drzew było więcej. Można to zrobić jednym zapytaniem korzystając z LEFT/RIGHT JOIN'a.
Ten post edytował flv 12.07.2007, 18:23:33 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za klase ... muszę teraz to przeanalizować bo ja nigdy nie używałem klas i zastanowic sie nad tym w razie problemow pozwole sobie zapytac Cie o niezrozumiale dla mnie rzeczy.
Odpowiedz mi jeszcze tylko czy ta klasa bedzie odpowiednia dla mojej struktury tabeli przechowujacej informacje o kategoriach ? czy powinienem pomyslec o innej strukturze ? Sprobowalem to przeanalizowac ale nie rozumiem niestety jest to chyba zbyt skomplikowane jak na moj obecny poziom wiedzy. Jezeli moglbys mi pomoc w dostosowaniu tego do moich potrzeb czyli napisania funkcji do generowania takiego kodu jaki wzor zamiescilem wczesniej na podstawie mojej struktury bazy bede wdzieczny. Nie oczekuje na gotowca, lecz proszę o pomoc, chcialbym wykorzystac menu ktore prezentowalem wczesniej z moja struktura tabeli. Oczywiscie widzialem menu ktore zamieszczales na stronie ktorej adres podales i zasada dzialania jest dokladnie taka jaka jest mi potrzebna wiec rozumiemy sie o co mi chodzi. Ten post edytował noels 12.07.2007, 13:44:15 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 5.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
bedzie smigac jesli bedziesz mial cos takiego np
W tej klasie jest takie cos: $efekt .= ">>"; zamiast tego musisz dodac jakis kod html bo w tym przypadku bedzie wyswietlalo: kat1 >>subkat1 >>subkat2 >>>>subsubkat1 >>>>>>subsubkat1 >>>>>>subsubkat2 >>>>subsubkat2 >>>>>>subsubkat1 >>subkat3 etc... Ten post edytował __mK 12.07.2007, 16:12:50 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Utworzyłem taka tabele jak pokazales, pozmienialm nazwy pol w klasie i niestety nie moge jej uruchomic... :-( poprostu caly czas sa bledy. Obawiam sie ze pomimo tego ze bardzo mi na tym zalezy nie poradze sobie z tym.
Ciezko jest z kawalka wyrwanego kodu cos osiagnac bo nawet nie wiem za bardzo co tam sie dzieje w tej klasie, ja zawsze robilem wszystko na samych funkcjach nie stosowalem nigdy klas widocznie nie doszedlem do tego stopnia zaawansowania. Kilka pytan 1. Czemu wyskakuje blad w lini public $ile=0; nastepujacej tresci: Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\www\test.php on line 8 2. Gdzie tu jest miejsce na dokonanie polaczenia z baza danych ? 3. Po co funkcja function pobierzKategorie() skoro jest ona pusta ? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 5.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zamiast public daj var bo public wystepuje w php 5 a ty moze masz starsza wersje php
aha i oczywiscie przed stworzeniem obiektu tej klasy polacz sie z baza... d; ps kategorie ktore sa najwyzej w drzewie maja id = -1 Ten post edytował __mK 13.07.2007, 10:05:30 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Naprawde nie mam pojecia jak uruchomic ten skrypt nie dziala mi poprostu nic...
Zrobilem tabele wg zalecen tzn:
Dane w tabeli:
Skrypt wygląda następująco:
Aha i jeszcze jedno a na jakiej zasadzie rozróżnisz jesli np: dwa poziomy najwyzsze czyli powiedzmy AGD i RTV i kazdy z nich bedzie mial osobne podkategorie, ktore podkategorie naleza do ktorego rodzica RTV czy AGD ? Prosze pomóż bo nie moge ruszyc z miejsca lub podpowiedz jak skonstruowac petle aby dalo sie to zrobic na mojej zaproponowanej tabeli i aby uzyskac taki krotki kod html jak opisywany wczesniej |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 5.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
kolejno -1 0 0 to id kategorii nadrzednych czyli jesli pralki i lodowki maja byc sub kategoriami Sprzed AGD to te pola powinny byc 1 1 (tak jak ma sprzet AGD) |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 0 Dołączył: 16.01.2007 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
czyli taki układ
Rozumiem :-) teraz oczywiscie działa, postaram sie dostosowac to do generowania takiego kodu jaki jest mi potrzebny w razie problemow pozwole sobie zwrocic sie do Ciebie z dalszymi pytaniami. potrzebuje uzyskac nastepujaca postac kodu: Biorę się więc do pracy. Bardzo dziękuje za pomoc i poświecony czas |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 16:30 |