Ja to robię tak... (jquery)
Kod
<select id="category" name="category" onchange="loadItems(this.value);">
<option value="0" selected="selected">wszystkie kategorie</option>
<option value="1">Kat 1</option>
<option value="2">Kat 2</option>
</select>
Kod
<div id="subcat">
<select name="subcategory">
<option value="0">wszystkie typy sprzętu</option>
</select>
</div>
js
Kod
function loadItems(value) {
$.get("ajax.php?subcategory", { category: value }, // pobranie za pomocą ajax danych z pliku ajax.php
function(data){
$('#subcat').html(data); // wczytanie ich do div o id="subcat"
});
}
ajax.php
<?php
if(isset($_GET['subcategory'])) {
$mysql = MyRegistry::Registry('MySql');
$items = $mysql->selectGroup(dbTableItems, "id, name", "category='$id'", "ORDER by name"); // pobranie sub kategorii z bazy danych
$template = MyRegistry::Registry('Template');
$template->assign('items', $items);
$template->display('subcategory.tpl'); // wczytanie pliku tpl
}
?>
subcategory.tpl
Kod
<select name="type">
<option value="0" selected="selected">wszystkie typy sprzętu</option>
{foreach from=$items item=items}
<option value="{$items.id}">{$items.name}</option>
{/foreach}
</select>
Można to zrobić nie używając smarty chodziło mi o analogię działania.
Jeszcze taki myk na firefox'a który po odświeżeniu zapamiętuje wybrane opcje (żeby nie było takiej sytuacji, że jest zaznaczona kategoria, a nie ma sub kategorii).
js
Kod
$(document).ready(function(){
var category = $("select#category").val();
if(category > 0) {
loadItems(category);
}
});