Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [js] lista zależna od selecta
wicc
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 30.07.2007

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


Mam pole SELECT w którym są kategorie. Chcę zrobić tak, żeby po wybraniu którejś (bez klikania - onChange) w div'ie poniżej wyświetlała się lista produktów. Zrobiłem coś takiego (pracuję na SMARTY i korzystam z jQuery oraz script.aculo.us)

katalog.tpl
  1. <select name="cat" onChange="show_products(this)">
  2. <option value="0">wybierz</option>
  3. {section name=i loop=$cats_list}
  4. <option value="{$cats_list[i].cat_id}">
  5. {$cats_list[i].cat_name}
  6. </option>
  7. {/section}
  8.  
  9. {section name=i loop=$products_list}
  10. <div id="{$products_list[i].product_id}">{$products_list[i].product_name}</div>
  11. {/section}

funkcja wysyłająca ID wybranej kategorii
  1. function show_products(sel)
  2. {
  3. var cat = sel.options[sel.selectedIndex].value;
  4.  
  5. new Ajax.Request("action.php", {
  6. method: "post",
  7. parameters: { id : cat }
  8. });
  9. }

action.php
  1. <?php
  2. if($_POST['id']!='')
  3. {  
  4. $q = mysql_query("SELECT * FROM products WHERE product_cat = '$cat'");
  5. $products_list = array();
  6. while ($tab = mysql_fetch_assoc($q))
  7.  {
  8. $products_list[] = $tab;
  9.  }
  10.  $smarty->assign('products_list', $products_list);
  11. }
  12. ?>


nie wiem dlaczego tablica $products_list nie jest przekazywana do szablonu :/ funkcja na pewno wchodzi do pętli if($_POST['id']!='') w pliku action.php bo to sprawdzałem.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


uu.. no tak kolego nie da rady...

spróbuj tak:
katalog.tpl
  1. <select name="cat" onChange="show_products(this)">
  2. <option value="0">wybierz</option>
  3. {section name=i loop=$cats_list}
  4. <option value="{$cats_list[i].cat_id}">
  5. {$cats_list[i].cat_name}
  6. {/section}
  7.  
  8. <div id="plist"></div>


javascript (dla kolorania użyłem php):
  1. <?php
  2. function show_products(sel)
  3. {
  4. var cat = sel.options[sel.selectedIndex].value;
  5.  
  6. new Ajax.Request("action.php", {
  7. method: "post",
  8. parameters: { id : cat },
  9. onSuccess: function(obj){ document.getElementById("plist").innerHTML = obj.responseText;
  10. });
  11. }
  12. ?>


action.php, dodajemy nazwe templatki na koncu do wyswietlenia;:
  1. <?php
  2. if($_POST['id']!='')
  3. {  
  4. $q = mysql_query("SELECT * FROM products WHERE product_cat = '$cat'");
  5. $products_list = array();
  6. while ($tab = mysql_fetch_assoc($q))
  7.  {
  8. $products_list[] = $tab;
  9.  }
  10.  $smarty->assign('products_list', $products_list);
  11.  $smarty->display('products_list.tpl');
  12. }
  13. ?>

no i na końcu trza stworzyć nowy plik products_list.tpl, do którego przekazujesz tablicę ze smarty (do już załadowanego templata się po prostu nie da):

  1. {section name=i loop=$products_list}
  2. <div id="{$products_list[i].product_id}">{$products_list[i].product_name}</div>
  3. {/section}


dopiero Tak Ci to zadziała
Go to the top of the page
+Quote Post

Posty w temacie


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: 25.08.2025 - 05:48