Здравствуйте, мне надо модернизировать собственный компонент, добавить туда функционал на ajax. Какие встроенные классы есть для этого в джумле ? что нужно почитать про джумла и аякс ? с чего начать ? И мне что то непонятно, как MVC - в джумле, работает с аякс - например, в шаблоне, вызов аякс функции - там ведь отдельные файлы должны быть для серверного выполнения ? - т.е. уже не файлы самого mvc ?
AJAX это JavaScript обращения к серверному скрипту. Какая серверному скрипту разница как к нему обращаются. http://mootools.net/docs/core/Request/Request http://mootools.net/docs/core/Request/Request.HTML http://mootools.net/docs/core/Request/Request.JSON ну тут да, надо чтобы серверный скрипт JSON обрабатывал.
Re: Joomla + Ajax + MVC + JQuery Блин я не понял как это работает, может кто нибудь привести пример Joomla MVC + Ajax на JQuery ? Нужно просто выполнить из шаблона функцию из модели и получить результат, её выполнения - Т.е. обычными методами вроде этого - //Если сохранение прошло успешно if ($model->save_data($data)){ $message = JText::_(JText::_('P_SAVED')); } // Если сохранить запись не удалось else { $message = JText::_(JText::_('P_MSG_SAVE_FAIL_CHECK_DATA')); $message .= ' ['.$model->getError().']'; // Сообщение об ошибке из модели } $lang= JRequest::getVar('lang'); // Перенаправление $this->setRedirect('index.php?option=com_mycom'.$task.'&lang='.$lang.'&Itemid='.Itemid, $message); Тут сообщение об ошибке, выводиться в стандартном для этого месте джумлы. Нужен пример, как Аяксом вызвать функцию из модели, принадлежащей шаблону и возвратить её результат(успешно или нет) в шаблон. Нашёл для JQuery такие примеры $(document).ready(function(){ // по окончанию загрузки страницы $('#example-1').click(function(){ // вешаем на клик по элементу с id = example-1 $(this).load('ajax/example.html'); // загрузку HTML кода из файла example.html }) }) Но тут вызывается не функция из файла, а загружается сам файл
Так вызываеш загрузку она и происходит. Ищи функцию отправки в mootools так var myRequest = new Request({url: 'mypage.html', method: 'get'}).send('some=data');
Я не понял, блин, я с аяксом до этого не работал, и этот jquery таким языком написан, мне непривычным, что да непонятно.... $(document).ready(function(){ $("#ajax-loader").bind("ajaxSend", function().... Понял что при загрузке документа, к ссылке привязывается событие, потом при нажатии на это событие вызывается функция ajaxEvent, в которой вызывается функция linkAction($(this - это что такое this ???)); далее из этой функции вызывается $.post(cURL, getData); - это типа аяксовский аналог метода пост - т.е. он вызывает php функцию в контроллере, но блин непонятно как параметр cURL сформировался. А где выходной параметр ? т.е. результат загрузки нового хтмл шаблона - как он устанавливается ? и что самое непонятное, как php функция возвращает результат своей работы обратно аяксу, т.е. в этом примере, как я понял в рабочую область компонента, грузятся последовательно шаблоны, т.е. php функция не возвращает результат своего выполнения, а просто перезагружает рабочую область - var ajaxMode = "&tmpl=component&format=raw"; $this->getView('model2','html'); Но непонятно, как эти заново установленные view - загружаются в рабочую область - т.е. ещё с этими примудростями библиотеки jquery разберусь, но пока хотелось бы простой пример, 1. как из мвс шаблона, аяксом вызвать функцию, из модели, которая бы возвращала простое число(например 3) 2. и это число(возвращаемый парамерт функции) установить аяксом в какой нибудь элемент рабочей области(кнопка, ссылка, div) Если можете пожалуйста приведите пример.
Пример 1. Обращение будет, как обычная загрузка страницы, к какому-то URL. Поэтому, чтобы выдавалось только число 3, без мишуры - меню, стилей, модулей левых - нужно вызывать вид &tmpl=component - тогда выдаст только выход компонента. Либо вариант &format=raw, и тогда нужно делать в виде view.raw.php и в tmpl/ соотв. темплейт подготовить. 2. Вот пример с api.jquery.com/jQuery.ajax/ который отправляет данные и получает сообщение: Код (CODE): $.ajax({ type: "POST", url: "some.php", data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); } }); Вместо some.php тут будет http://site.ru/index.php?option=com_xxxx&view=yyy&format=raw Полученный msg можно запихнуть в любой элемент страницы, например в div с id="myId": Код (CODE): $('#myId").html('<p>Получен ответ: '+msg+'</p>');
Re: Пример Т.е. надо вызывать функции не напрямую, а как обычно через контроллер, отправляя параметры в урл, а там контроллер сам вызывет нужную ? - http://site.ru/index.php?option=com_xxxx&view=yyy - Теперь кажеться становиться понятней. А что такое - format=raw ? и параметр в функции - $.ajax - ниже, задаёт функцию, которая будет выполнена в результате успешного выполнения на сервере ? а входной параметр msg - автоматом становиться выходным параметром функции выполненной на сервере ? - Блин этот jquery написан как то по марсиански. success: function(msg){ alert( "Data Saved: " + msg ); Чтобы для точности, во вложении простой пример, при нажатии на кнопке, аяксом происходит обращение к файлу на сервере, который просто выдаёт оутпут. Но там есть ещё и функция "get_data2", можете сделать чтобы при нажатии на кнопке 2, в эту функцию передавался параметр - "привет", а выходной параметр функции отображался на надписе кнопки. И выложить это вложение обратно для примера.
Бесплатно, увы, не могу — очень мало времени. Я думаю, вы суть ajax ухватили, дальше - дело техники, курения доков и анализа примеров и чужих работ. Весь JS любого сайта можно посмотреть )
Помогите, не могу разобраться, блин В шаблоне <div id="test_ajax" onclick="exec_aj_function(this);">Запустить функцию</div> Js файл function exec_aj_function(param){ $.post('index.php?com_mycom&task=save_ajax_param&ajparam='+param.id, al_from_aj); // alert(param.id); } function al_from_aj(data){ alert(data); } В контроллере // Функция тестирования ajax запросов function save_ajax_param(){ $ajparam = JRequest::getString('ajparam'); if ($ajparam == 1) return "Запрос выполнен ".$ajparam; else return "Запрос не выполнен ".$ajparam; } После клике на divе - алертом выходит не "Запрос не выполнен ", а весь вывод html джумлы ((((( Нужно чтобы просто выводилось алертом сообщение из функции контроллера. если при передаче параметров, добавляю к урл &format=raw - ничего не происходит. И ещё вопрос, а если мне надо вернуть из функции контроллера, не просто строку, а объект, массив - как это сделать ?
Что значит брось ? Мне надо это сделать, значит это будет сделано. По теме бы написал - советчик. Просто пока с этим Jquery и аяксом не разобрался - синтаксис для меня непривычный.
Я так понял, что чтобы из джумлы выводилась только строка, необходимо задать один из следующих параметров &format=raw &no_html=1 &tmpl=component Но когда я один из них или все добавляю к url в строке $.post('index.php?com_mycom&task=save_ajax_param&a jparam='+param.id, al_from_aj); - то при нажатии на див - ничего не происходит, и ошибки js тоже не возникает, но и как будто функция вызова контроллера в джумле тоже не вызывается. Что это может быть ?
Чёрт чёрт чёрт - действительно я забыл поставить option= - теперь всё работает. Блин два дня с этой хренью парился. woojin Большое спасибо. Там нет пробела, просто это в форум так вставилось.
Можно и я отмечусь? Подскажите как обновлять сам <select>street. Пока выкрутился поместив его в <div>temp. Сразу скажу, что WEB пока изучаю, думаю заметно ))) controller.php Код (PHP): $streets_list = $model->getStreets($id); if (streets_list) { $streets[]=JHTML::_('select.option', null, JText::_( '' ) ); for ($i=0, $n=count($streets_list ); $i < $n; $i++) { $row = $streets_list[$i]; $streets[] = JHTML::_('select.option', $row->id, $row->name); } echo JHTML::_('select.genericlist', $streets, 'street', ' class="inputbox" ', 'value', 'text', $street ); } .js Код (CODE): $('type').addEvent('change', function(e) { //var sel = $('state').value; var type = $('type').value; var url = 'index.php?option=com_hsearch&task=street_info&format=row&street_type='+type; ajax = new Ajax(url, { update: $('temp'), method: 'post', }).request(); }); view.html.php Код (PHP): $form = new stdClass(); $streets = array(); $streets[] = JHTML::_('select.option', null, JText::_( 'Виберіть тип' ) ); $form->streetField = JHTML::_('select.genericlist', $streets, 'street', ' class="inputbox" ', 'value', 'text', $street ); $this->assign('street' , $street); $this->assignRef('form', $form); default.php Код (PHP): <div id="temp"><?php echo $this->form->streetField; ?></div> Вроде все файлы включил. З.Ы. ОФ: Что-то смайла с пивом не нашел, не употребляем? )))