Изменение значения переменной smarty с помощью AJAX;множественный выбор - PullRequest
0 голосов
/ 21 марта 2011

У меня есть 3 выбора на странице, 2-й и 3-й выбор должен заполняться опциями в зависимости от значения, выбранного в первом выборе.Например: первый выбор имеет список стран, если я выберу страну A из этого выбора, 2-й выбор заполнится городами этой страны, 3-й выбор заполнится, я не знаю,Самые популярные имена в стране.

Я хочу реализовать это с помощью AJAX, но поскольку сайт написан с использованием Smarty, мне трудно.Каждый выбор заполняется массивом, который назначается из php.Я хотел бы как-то изменить значения 2-го и 3-го массива, не перезагружая страницу, в зависимости от идентификатора, который я получаю из 1-го выбора.

Я попытался запросить страницу, которая присваивает значения smarty, и попытался изменить массивы, но это не сработало во внешнем интерфейсе.Есть идеи?

РЕДАКТИРОВАТЬ: Код выглядит примерно так:

$countries = Country::getCountries();
$cities = City::getCities($country_id); //the parameter is not necessary 
$names = Name::getNames($country_id); //the parameter is not necessary 

$smarty->assign("countries",$countrires);
$smarty->assign("cities",$cities);
$smarty->assign("names",$names);
//display template etc

на странице шаблона

<select name="countries">
{foreach from=$countries item=country}
   <option value="{$country.id}">{$country.name}</option>
{/foreach}
</select>

и 2 другихвыбирает выглядят одинаково.

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Конечно, было бы полезно увидеть код для этого, но я кратко опишу процесс, который вы, вероятно, должны предпринять:

(1) Настройте страницу городов точно так же, как вы установили-в любом другом в рамках, которые вы можете или не можете использовать.

(2) Шаблон вывода для страницы городов должен выглядеть примерно так (без заголовка или включает):

{foreach $cities as $city} <option value="{$city.id}">{$city.name}</option> {/foreach}

(3) Страница городов должна иметь возможность принимать какой-либо параметр для указания страны, для которой мы должны выбирать города, например, с переменной GET.

(4)Вызов AJAX должен запросить URL-адрес (например, /cities?country=USA) с обратным вызовом для замены innerHTML элемента выбора городов на ответ.

(5) Нет шага 5.

0 голосов
/ 30 апреля 2011

Выбор стран вызвал функцию, которая сделала следующее:

function updateSelect(){     
 var country_id = document.getElementById("country_id").value;
 ajax.requestFile = 'ajax.php?country_id='+sec_id;
 ajax.onCompletion = todo;
 ajax.runAJAX();
}

function todo(){
 var value = eval(ajax.response);
 document.getElementById('city_tr').style.display = 'table-row';
 if (value !=undefined) document.getElementById('td_city').innerHTML = value ;
             else document.getElementById('city_tr').style.display = 'none';
}

сценарий ajax.php повторил выбор, сгенерированный на основе полученного им идентификатора.

...