Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]wybór kategorii ala alegro, jw
miras
post
Post #1





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Witam, googlowałem trochę i nie za bardzo pomogło, potrzebuję zrobić dynamiczny wybór kategorii ala allegro, 4 poziomowe menu, ma ktoś może jakiś link do tutoriala czy cos ?

Dzięki z góry!
Go to the top of the page
+Quote Post
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Zdefiniuj dynamiczny, bo na Allegro przy kategoriach nie widzę żadnej "dynamiki", od tak zwykła struktura drzewkowa.

Ten post edytował markonix 9.02.2014, 12:19:32
Go to the top of the page
+Quote Post
miras
post
Post #3





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Dynamiczny - w sensie chodziło mi, aby było to bez przeładowywania strony.
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Chodzi ci o to, że masz np. <select> z markami samochodów i po wybraniu danej marki w innym selectcie pokazują się modele odpowiednie dla marki?
onchange
Go to the top of the page
+Quote Post
miras
post
Post #5





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


Ok, poradziłem, pozostaje tylko problem taki, że wyświetla mi tylko 1 podkategorię, a poziomu 3 i 4 już nie..

select.php

  1. <?php
  2.  
  3. $connection = @mysql_connect('xx', 'xx', 'xx')
  4. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  5. $db = @mysql_select_db('xx', $connection)
  6. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  7.  
  8. if(!empty($_GET['id'])) {
  9. $id = $_GET['id'];
  10.  
  11. $kat = mysql_query("SELECT * FROM xx WHERE children='$id'");
  12.  
  13. while ($row = mysql_fetch_assoc($kat)) {
  14. $tab = array($row['id']=>$row['name']);
  15. }
  16.  
  17. echo json_encode($tab);
  18. }
  19.  
  20.  
  21. ?>
  22.  



select.js
  1. //skrypt będzie uruchamiany gdy strona się całkowicie załaduje
  2. $(document).ready(function() {
  3.  
  4. //przypisanie akcji wywołania dodatkowej listy do zdarzenia typu change
  5. $('#kategorie').live('change', function(){
  6. var id = $(this).val();
  7.  
  8. //adres url do pliku PHP z kodem generującym dane w formacie JSON
  9. var url = 'select.php?id='+id;
  10.  
  11. //jeśli istnieje już select-lista o id: podkategorie, to usuń ją
  12. if($('#podkategorie').length>0)
  13. $('#podkategorie').remove();
  14.  
  15. //metoda pobierająca dane JSON z podanego adresu w zmiennej url
  16. $.getJSON(
  17. url,
  18. function(data){
  19.  
  20. //tworzymy nową, pustą listę select o id: podkategorie i ją dołączamy do formularza
  21. select = '<select id="podkategorie"></select>';
  22. $('#formularz fieldset').append(select);
  23. var lista = $('#podkategorie');
  24.  
  25. //ukrywamy listę. Potrzebne to będzie do uzyskania animacji pojawienia się elementu na stronie
  26. lista.hide();
  27.  
  28. //generowanie kolejnych opcji listy
  29. $.each(data, function(key, val){
  30. var option = $('<option/>');
  31. option.attr('value', key)
  32. .html(val)
  33. .appendTo(lista);
  34. });
  35.  
  36. //animacja pojawienia się elementu na stronie
  37. lista.show('scale', 500);
  38. },
  39. 'json'
  40. );
  41. })
  42. })


index.php:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <title>[jQuery]Animowana zależna lista rozwijana - demo by Piotr Nalepa</title>
  6. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
  7. <script src="http://blog.piotrnalepa.pl/demo/jquery-select/jquery-ui-1.8.14.custom.min.js"></script>
  8. <script src="select.js"></script>
  9. </head>
  10. <body id="page">
  11. <header>
  12. <hgroup>
  13. <h1>[jQuery]Animowana zależna lista rozwijana</h1>
  14. <h2>demo by Piotr Nalepa</h2>
  15. </hgroup>
  16. </header>
  17. <form action="select.php" id="formularz" action="post">
  18. <fieldset>
  19. <legend>Kategorie</legend>
  20. <select id="kategorie">
  21. <option value="1411">Kategoria 1</option>
  22. <option value="1411">Kategoria 2</option>
  23. <option value="1411">Kategoria 3</option>
  24. <option value="1411">Kategoria 4</option>
  25. </select>
  26. </fieldset>
  27. </form>
  28. </body>
  29. </html>
  30.  



Ten post edytował miras 9.02.2014, 13:35:40
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Podany skrypt moim zdaniem działa tylko na 2 poziomy, nie jest uniwersalny.
Go to the top of the page
+Quote Post
miras
post
Post #7





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


To ma ktoś jakiś pomysł jak to rozwiązać?
Go to the top of the page
+Quote Post
markonix
post
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Wszystko zależy jak teraz to wygląda w bazie i jaki ma być efekt (co trzeba wybrać).
Ja bym zmodyfikował ten kod tak, że gdy stworzy nową listę select to niech na niej też będzie nasłuchiwał zmiany i tworzył kolejny select obok tak aż do momentu gdy powstała listą nie będzie miała podkategorii potomnych (np. json zwróci null czy inną umowną wartość).
Go to the top of the page
+Quote Post
miras
post
Post #9





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


W bazie to wygląda tak:

id name children
1 motoryzacja 0
2 samochody 1

Mógłbyś jakiś prototyp tego pokazac, bo nie poradzę sobie..
Go to the top of the page
+Quote Post
_Borys_
post
Post #10





Grupa: Zarejestrowani
Postów: 587
Pomógł: 190
Dołączył: 5.02.2011
Skąd: 64-800

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


  1. <option value="1411">Kategoria 1</option>
  2. <option value="1411">Kategoria 2</option>
  3. <option value="1411">Kategoria 3</option>
  4. <option value="1411">Kategoria 4</option>

Czemu wszędzie takie samo id
Go to the top of the page
+Quote Post
miras
post
Post #11





Grupa: Zarejestrowani
Postów: 1 004
Pomógł: 9
Dołączył: 18.01.2011
Skąd: Siedlce

Ostrzeżenie: (30%)
XX---


to akurat chciałem sprawdzić na przykładzie działu motoryzacja, przypadek po prostu (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
markonix
post
Post #12





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(miras @ 9.02.2014, 17:51:55 ) *
W bazie to wygląda tak:

id name children
1 motoryzacja 0
2 samochody 1

Mógłbyś jakiś prototyp tego pokazac, bo nie poradzę sobie..

Nigdy nie miałem potrzeby pisania takiego skryptu więc nie mam żadnych prototypów.

Przykład który dałeś rozwiązuje 3/4 problemów, tylko go troszkę ulepszyć, zrobić bardziej elastycznym wg algorytmu, który Ci podałem.
Jak nie masz ochoty próbować to napisz w dziale zleceń.
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
ylko problem taki, że wyświetla mi tylko 1 podkategorię, a poziomu 3 i 4 już nie..

$tab = array($row['id']=>$row['name']);
W petli nadpisujesz ciagle zmienną $Tab, wiec nie ma co sie dziwic ze zawsze masz tylko ostatnią wartosc..... Troche myslec trzeba.

$tab[$row['id']] = $row['name'];
Teraz masz "dopisywanie" a nie jak wczesniej "nadpisywanie"
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 9.10.2025 - 11:33