|
|
|
(Xajax, Smarty) передать полученный список из БД в форму в SELECT
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Решил поизучать Xajax. Пару примеров на практике просто меня поразили возможностям :) Решил сделать несколько фич на своём сайте... Есть форма где два селекта: марка автомобиля и модель. Например марка Nissan, модель Sunny и т.д. Я хочу, чтобы при выборе первого автоматически появлялся второй селект со списком моделей данной марки. index.php ... // список марок для отбора отзывов (для Ajax не использую) function get_marki_for_otz() { $out = array(); $cnt = 0; $q = db_query("SELECT DISTINCT(m.id), m.title FROM dorogi_marki as m, dorogi_otz as o WHERE m.id = o.id_marki ORDER BY m.title") or die (db_error()); while ($row = db_fetch_row($q)) { $out[$cnt][0] = $row[0]; $out[$cnt][1] = $row[1]; $cnt++; } return $out; } // список моделей по марке для отзывов (для Ajax нужна обязательно!) function get_model_for_otz($id) { $out = array(); $cnt = 0; $q = db_query("SELECT DISTINCT(m.id), m.title FROM dorogi_models as m, dorogi_otz as o WHERE m.id = o.id_model ORDER BY m.title") or die (db_error()); while ($row = db_fetch_row($q)) { $out[$cnt][0] = $row[0]; $out[$cnt][1] = $row[1]; $cnt++; } // $objResponse->addAssign("models", "innerHTML", $text); $objResponse = new xajaxResponse("windows-1251"); return $objResponse; } ... $xajax->registerFunction("get_model_for_otz"); ... tpl: <FORM action="/otz/" method="post"> Быстрый отбор: марка <SELECT name="id_marki" onchange="xajax_get_model_for_otz(document.getElementById('id_marki').value);"> <OPTION value="0">все</OPTION> {section name=i loop=$marki_for_otz} <OPTION value="{$marki_for_otz [0]}"{if $marki_for_otz[0] == $id_marki} selected{/if}>{$marki_for_otz[1]}</OPTION> {/section} </SELECT> модель ... подскажите как граммотно можно передать данные с функции get_model_for_otz(), чтобы сформировался второй select со списком моделей выбранной марки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 11:55 |
|
||
|
(Xajax, Smarty) передать полученный список из БД в форму в SELECT
|
|||
|---|---|---|---|
|
#18+
а что тут сложного? Должно быть так: два селекта id="model" и id="mark", второму желательно поставить display: none; выбераем модель машины, погружаем модели (я бы на Вашем месте отложил xajax на самую дальнюю полку и пользовался бы JQuery) как толкьо подгрузили марки, создаем option'ы для каждой марки, для селекта с id="mark" после делаем его видимым и всё:) могу сделать рабочий пример на JQuery, нужно?:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 12:49 |
|
||
|
(Xajax, Smarty) передать полученный список из БД в форму в SELECT
|
|||
|---|---|---|---|
|
#18+
можете сделать, посмотрю... просто для Smarty Xajax как-то блее удобен на первый взгляд, JQuery - впервые слышу :) но щас буду читать... P.S.: подскажите как передать данные во втрой селект рационально, плиз, кто знает Xajax :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 12:56 |
|
||
|
(Xajax, Smarty) передать полученный список из БД в форму в SELECT
|
|||
|---|---|---|---|
|
#18+
сделал так. работает, но если есть идеи граммотнее - пишите ;) // список моделей по марке для отзывов function get_model_for_otz($id) { $out = ""; $q = db_query("SELECT DISTINCT(m.id), m.title FROM dorogi_models as m, dorogi_otz as o WHERE m.id = o.id_model ORDER BY m.title") or die (db_error()); while ($row = db_fetch_row($q)) { $out .= "<OPTION value=\"$row[0]\">$row[1]</OPTION>"; } $objResponse = new xajaxResponse("windows-1251"); $objResponse->addAssign("id_model", "innerHTML", $out); return $objResponse; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 13:31 |
|
||
|
(Xajax, Smarty) передать полученный список из БД в форму в SELECT
|
|||
|---|---|---|---|
|
#18+
вот хорошая статья для начинающих http://www.rsdn.ru/article/inet/jQuery.xml строить option'ы на серверной стороне (вообще по хорошему клиенту должен возвращаться ВСЕГДА массив значений, которые он уже будет строить сам) это не есть хорошо. передевайте массив обработанный функцией json_encode() и уже на клиентской стороне стройте option'ы и разлочивайте\показывайте второй селект. мой вам совет :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2008, 14:34 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=318&tid=1455827]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 316ms |

| 0 / 0 |
