Я в Yii совсем начинающий и у меня появилась задача реализовать на Yii с использованием AJAX select-меню.
Задача механизма:
В select-меню имеется несколько пунктов. При выборе какого-либо пункта меню должна меняться вьюшка (сновной шаблон остается, а шаблон контентного наполнения меняется).
Подскажите пожалуйста, как такое реализовать в Yii или где можно почитать про реализацию такой задачи с использованием Yii?
P.S. Прошу прощения, если излагаю неправильными словами. Я ещё новичек тут.
По моему роль Yii тут только в том, как "красиво" разместить JS код, который вы должны будете написать сами.
С помощью jQuery вы можете реализовать то, что хотите? Повесить обработчик onChange на ваш select в котором обновлять контент AJAX’ом?
И действительно ли вам нужен AJAX? Например когда задача только в изменении select’a B то порою легче при создании страницы разместить на ней все возможные наборы для SelectB и при переключении SelectA подставлять в SelectB данные со страницы (не обращаясь к AJAX)
Предварительно верстаете странички с наполнением контента.
Собственно вешаете обработчик события onchange на ваш select.
Далее делаете ajax запрос. Например:
$.ajax({
type:'POST',
url: "<?php echo CController::createUrl('controller/action');?>",//ваш контроллер или отдельный аякс контроллер
update: '#content',//ваш ид контента
data: {selected: $this.val()},// значение вашего селекта
success:function(data) {
$('#content').empty();
$('#content').append(data);//добавляем ответ в контент
}
});
Далее переходим к контроллеру.Например:
public function actionAction()
{
/**
*Здесь делаете что вам нужно. Например определяете какой файл вывести
*в зависимости от select. Значение нам доступно как $_POST['selected']
*/
$this->renderPartial('content_page',array());//рендерим нужный файл.
}
Человек написал что он новичок, а вы на него набросились. Он ведь спросил как это реализовать в Yii а не на javascript.
Эта задача у меня возникает часто, например для рендера страниц статистики, на которых есть куча менюшек,grid-ов и графиков. Возможно это не самое лучшее решение но для меня оно работает просто,понятно и быстро.
У меня нет желания набрасываться на новичков, только желание внести ясность, что это задача гораздо более для JS (jQuery) а не Yii.
Касаемо Yii, Ineersa показал хороший пример JS кода, у меня как раз под рукой такого не было, а я тогда покажу как его использовать средствами Yii. Тут лучше не добавлять JS код прямо в представлении. Для этого рекомендую registerScript например:
<?php
$js="$('#Item_drop_from_type').change(function(){
//ваш JS код (AJAX запрос, как выше показал ineersa)
}
})
.trigger('change'); //благодаря этой строке обработчик сработает при отображении страницы (не дожидаясь пока вы первый раз его измените)
";
Yii::app()->clientScript->registerScript("SomeUniqString", $js, CClientScript::POS_READY); //таким образом в Yii добавляют JS код
PS: еще правильнее, было бы вынести весь JS код в .js файлы (размещяя их уровнем выше чем папка /protected) и подключая:
таким образом удобнее редактировать сам файл, т.к. там будет подсветка синтаксиса именно JS. Но возникают сложности с передачей параметров из PHP, например нельзя вставить <?php echo CController::createUrl(‘controller/action’);?> но параметры можно передавать через HTML через атрибут data, или любой, который захотите, надеюсь вы понимаете что я имею в виду.
Charger, ineersa, благодарю за ответы и отзывчивость!
В приведенных примерах явно вижу много для себя интересного.
Как только выцеплю хоть часок свободного времени, обязательно изучу глубже
Мне нужно не обновление контента второго select’а в зависисмости от первого. Select у меня один. В зависимости от того, что выбирается в Select - должна происходить смена формы ввода на странице.
Например: Наш Select находится на странице "Справочники". В перечне Select мы имеем такие пункты: "Справочник операционных систем", "Справочник типов подключения к сети", "Справочник производителей мониторов" и тд.
Выбираем в нашем Select "Справочник операционных систем" и на странице должен появится список систем и тд. Если выбирем "Справочник производителей мониторов", то видим список производителей и тд.
Задача состоит в смене контента на странице в зависимости от того, что было выбрано в Select.
Только сейчас смог добраться до исходников. Попытался сделать по предложенным вами вариантам, но ничего не получается
То браузер "вешается", то ошибка "Object of class SearchController could not be converted to string".
Браузер "вешается", если добавляю свой js-файл c ajax-запросом, обернутым в функцию в список пакетов Yii. В onchange ставлю ту функцию в которую обернул ajax-запрос. И вставляю js-файлы при помощи
и кстати с $this в строке "[color="#008800"][size="2"]data:[/size][/color][size="2"]" я предполагаю будут проблемы. Вероятно $(this) имелось ввиду? [/size]