0 Пользователей и 1 Гость просматривают эту тему.
  • 32 Ответов
  • 2332 Просмотров
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Всем доброго времени суток.
Разрабатываю свой компонент на Joomla!3, нужно сделать небольшой AJAX-фильтр. Немного запутался в этой теме.
Получается у меня есть вид - filter - и из лэйаута default я хочу вызывать AJAX функцию с последующей обработкой. Как я понял, в GET запросе нужно передавать параметр raw, а дальше сплошной туман. Не понимаю как отловить этот AJAX запрос, как вернуть его обратно в вид.
Исчерпывающего материала по этой теме пока не нашел, наиболее приближенное к тому что мне нужно было здесь - http://joomla-code.ru/great-component/ajax-for-joomla, но тоже весьма поверхностно. Может кто встречался с внедрением AJAX в свои компоненты, буду благодарен вашим советам, или мануалам по этой теме
*

robert

  • Профи
  • 4075
  • 376
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #1 : 28.02.2016, 21:39:15 »
Я тоже не стал разбираться в этом новшестве Joomla. В конце концов это JavaScript, так что когда мне нужен AJAX, я просто пишу несколько строк на jQuery.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #2 : 28.02.2016, 22:02:57 »
Я тоже не стал разбираться в этом новшестве Joomla. В конце концов это JavaScript, так что когда мне нужен AJAX, я просто пишу несколько строк на jQuery.
хороший вариант, но хотелось бы сделать все в соответствии с задумкой разработчиков cms :)
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #3 : 29.02.2016, 00:52:15 »
Все намного проще:
index.php?option=com_ваш_компонент&task=controller_name.task_name
Все никаких RAW ненужно!

в вашем компоненте в папке controllers в файле controller_name.php создаете метод
public function task_name(){
тут ваш код какой угодно, возвращаете все что угодно
exit; -самое главное в самом конце метода сделать exit; что бы не пошла дальнейшая обработка и не загрузился шаблон со всеми фигнями...
}

Пример!
Компонент com_test в нем есть контроллер form в папке controllers
пишем в jQuery

Код: javascript
<script>jQuery(document).ready(function ($) {
$.getJSON('index.php?option=com_test&task=form.test', function (responce) {
alert(responce.message);
});
});
</script>

В components/com_test/controllers/form.php  в классе
Код: php
class TestControllerForm extends JControllerLegacy
{

public function test()
{
$message = 'Test 111';
echo json_encode( array( 'message' => $message ) );
exit;
}
}
« Последнее редактирование: 29.02.2016, 00:56:57 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #4 : 29.02.2016, 06:22:38 »
Istaan,
спасибо вам большое, буду разбираться, как это работает

З.Ы.: прочел почти все статьи на вашем сайте, было очень полезно. Думаю статья о применении аякса в плагинах и модулях очень пригодится мне в ближайшем времени.
*

Филипп Сорокин

  • Практически профи
  • 1816
  • 138
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #5 : 29.02.2016, 08:11:32 »
Документация говорит, что в своём компоненте не следует применять com_ajax
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #6 : 29.02.2016, 08:43:56 »
Филипп Сорокин,
насколько я понял, com_ajax следует применять в модулях и плагинах, соответствующая статья имеется на сайте товарища Istaan.
Если вы поделитесь опытом как вы работаете с аяксом в Joomla,  буду вам очень признателен
*

Филипп Сорокин

  • Практически профи
  • 1816
  • 138
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #7 : 29.02.2016, 08:59:34 »
В клиентской части, когда запросы частые и регулярные, я не использую com_ajax, стараюсь не использовать вывод из контроллера также, те это медленно и затратно. Аякс запрос должен быть стремительным, и если есть возможность, то я считаю, что не нужно загружать ядро и накидывать к времени ожидания лишние 150 мсек. Но если ядро нужно, то тут без вариантов, конечно. Хотя мне оно не нужно в AJAX запросах в 90 процентов случаев.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #8 : 29.02.2016, 10:17:51 »
Может мой вопрос покажется вам глупым, но сейчас для меня самый непонятный момент, это - как вернуть данные в шаблон. Если применить это к моей ситуации: я применяю фильтр, делаю запрос к БД, возвращая JSON и там его разбираю как мне нужно. Вот в этой ситуации я должен использовать модель для выборки данных? Если да, то каким образом мне вернуть данные для вывода в шаблон?
*

buyanov

  • Осваиваюсь на форуме
  • 178
  • 26
  • Сайты 74
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #9 : 29.02.2016, 10:34:35 »
Привет. Возврат нужно уже видимо в JS писать... пока не понятно что именно и куда ты хочешь вернуть. По части работы контроллера и корректного возврата JSON. В примерах выше забыли про заголовки ответа сервера ну и про фремворк Joomla ))))


Код
$data = ['json']; // 
$document =& JFactory::getDocument();
$document->setMimeEncoding('application/json');
JResponse::setHeader('Content-Disposition','attachment;filename="'.$view->getName().'.json"');
echo json_encode($data);

Еще наверно желательно использовать не просто exit(), а корректно завершить работу приложения, хотя наверно это не настолько критично =)

Код
JFactory::getApplication()->close();
« Последнее редактирование: 29.02.2016, 10:40:05 от buyanov »
Создание сайтов, интернет-магазинов, оптимизация, продвижение, хостинг, безопасность, лечение от вирусов - мой сайт, телега, Хостинг
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #10 : 29.02.2016, 11:03:26 »
Используйте класс JResponseJson, тогда очень удобно ответ обрабатывать в JS. Вот дока. При этом сохраняйте контроллер в controller.json.php и вызывайте его через format=json в URL. Тогда и приложение закрывать не надо, и заголовки ответа будут корректные. Всё это описано в доке.
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #11 : 29.02.2016, 11:22:06 »
buyanov, спасибо за ваш совет, обязательно опробую на практике
b2z, большущее спасибо за отличный, подробный мануал, на первый взгляд это именно то, что мне нужно

тему пока не закрываю, буду пробовать наработки форумчан. возможно еще будут вопросы
*

Филипп Сорокин

  • Практически профи
  • 1816
  • 138
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #12 : 29.02.2016, 11:31:01 »
Жаль не отцепят интерфейс AJAX от ядра Joomla. Почему нельзя загрузить просто Фреймворк и не грузить все остальное? А то что сейчас, получается, нет никакой разницы между AJAX запросом и обычным get запросом страницы.
Ставь лайк, если согласен, и делай репост!

  => мои публикации
    => мои работы
      => спектр моих услуг
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #13 : 29.02.2016, 12:10:21 »
del
« Последнее редактирование: 29.02.2016, 12:45:39 от Istaan »
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #14 : 29.02.2016, 12:16:32 »
Жаль не отцепят интерфейс AJAX от ядра Joomla. Почему нельзя загрузить просто Фреймворк и не грузить все остальное? А то что сейчас, получается, нет никакой разницы между AJAX запросом и обычным get запросом страницы.
А если я модель хочу вызвать? Или токен формы проверить? В общем и целом, это стоит обсуждать в отдельной теме - а том зафлудим тут...
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #15 : 29.02.2016, 12:20:38 »
Еще наверно желательно использовать не просто exit(), а корректно завершить работу приложения, хотя наверно это не настолько критично =)
Код
JFactory::getApplication()->close();
познакомтесь с кодом метода close ;D
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

Aleks.Denezh

  • Практически профи
  • 2806
  • 377
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #16 : 29.02.2016, 12:24:42 »
Может мой вопрос покажется вам глупым, но сейчас для меня самый непонятный момент, это - как вернуть данные в шаблон. Если применить это к моей ситуации: я применяю фильтр, делаю запрос к БД, возвращая JSON и там его разбираю как мне нужно. Вот в этой ситуации я должен использовать модель для выборки данных? Если да, то каким образом мне вернуть данные для вывода в шаблон?
Я вам уже написал полный пример как делать все с контроллером! И он наиболее верный!
Стучитесь в контроллер, в контроллере вызываете нужную модель! В модели делаете выборку данных, возвращаете в контроллер,  формируете данные в JSON, делаете echo этих данных и exit!
в JS эти данные разбираете и выводите куда вам надо и как вам надо!
Мой  блог по разработке на Joomla CMS!
Хотите отблагодарить материально? Мой WMR: R861060179016
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #17 : 29.02.2016, 12:37:03 »
Я вам уже написал полный пример как делать все с контроллером! И он наиболее верный!
Стучитесь в контроллер, в контроллере вызываете нужную модель! В модели делаете выборку данных, возвращаете в контроллер,  формируете данные в JSON, делаете echo этих данных и exit!
в JS эти данные разбираете и выводите куда вам надо и как вам надо!

Вы правильно поняли мой вопрос, спасибо за подробный ответ, он объясняет недопонятый мной момент взаимодействия частей компонента. Полагаю что так происходит потому что я плаваю в некоторых моментах MVC
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #18 : 29.02.2016, 19:20:19 »
Еще раз всех приветствую. Вот что у меня получилось:

Подключаемый JS:
Код
function testRequest( options ){
    jQuery.ajax({
        type: "POST",
        url: "index.php?option=com_test&task=filter.returnJson",
        cache: false,
        data: { filterOpts: options },
        success: function( response ){
            jQuery('#result').html( makeTemplate( response ) );
            //console.log( response );
        }
    });
}
Передаю параметры фильтра в контроллер.

Контроллер:
Код
class TestControllerFilter extends JControllerLegacy {
    public function returnJson() {
    $input = JFactory::getApplication()->input;
    $filters = $input->post->get('filterOpts', '', 'RAW');
  $model = $this->getModel('Filter');
  $result = $model->getFilteringData( $filters );
echo $result;
exit;
    }
}

В модели (TestModelFilter), которую я вызывал в моем контроллере, я разбираю фильтр, делаю запрос в БД, загружаю ассоциативный массив, пропускаю его через функцию json_encode и, наконец, возвращаю обратно в контроллер.
Все работает как надо, всем спасибо за советы.

Надеюсь что все выполнил правильно, буду раз замечаниям.
Еще хочу ради интереса опробовать класс JResponseJson, результаты выложу.
*

robert

  • Профи
  • 4075
  • 376
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #19 : 29.02.2016, 21:35:07 »
Вот что у меня получилось
Так это то же, что я и делаю. Где тут плюшки от Joomla?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #20 : 01.03.2016, 06:13:33 »
Так это то же, что я и делаю.
А я и не претендовал на роль первопроходца :)

Где тут плюшки от Joomla?
В первую очередь я хотел правильно настроить взаимодействие AJAX и MVC Joomla.
Товарищ b2z рекомендовал JResponseJson, чем вам не Joomla плюшка?
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #21 : 01.03.2016, 10:27:12 »
Код выше безусловно работает.

Но по моему простое echo отдаст неверный заголовок ответа.
Второй момент - если модель вернула ошибку, то как вы её обработаете/покажете пользователю?
И третий момент - я бы не стал привязывать модель к конкретному запросу. Она должна тупо отдать ассоциативный массив и её не должно волновать, что с ним будет дальше.

Это решает JResponseJson в связке с format=json.
*

AlekVolsk

  • Профи
  • 6312
  • 336
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #22 : 01.03.2016, 10:29:41 »
если модель вернула ошибку, то как вы её обработаете/покажете пользователю?

Это решает JResponseJson в связке с format=json.
тоже оч. интересен этот момент, а то я как-то все ручками да ручками...
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
*

robert

  • Профи
  • 4075
  • 376
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #24 : 01.03.2016, 11:28:41 »
Товарищ b2z рекомендовал JResponseJson, чем вам не Joomla плюшка?
Да, именно это и было интересно и из-за лени :) хотелось бы видеть на конкретном примере. А ваш пример можно написать и без этой темы, и MVC Joomla, IMHO, плевать на то, с каким запросом клиент обращается к ним.

P.S. Посмотрел
дока
IMHO, это довольно удобно. Надо будет использовать.
« Последнее редактирование: 01.03.2016, 11:47:39 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #25 : 01.03.2016, 12:50:54 »
Спасибо всем за замечания, учту. Обработчики ошибок обязательно сделаю и для входящих данных и на случай пустого врата модели.

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

Как сейчас модель завязана на запрос? У меня ведь получается что функция модели отрабатывает и возвращает JSON обратно в контроллер. Или я что-то напутал?
*

b2z

  • Support Team
  • 7466
  • 742
  • Разраблю понемногу
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #26 : 01.03.2016, 13:09:24 »
Немного не понял вот это пояснение:
Как сейчас модель завязана на запрос? У меня ведь получается что функция модели отрабатывает и возвращает JSON обратно в контроллер. Или я что-то напутал?
А так, что Вы json_encode делаете в модели. Я бы это делал в контроллере. Таким образом модель у Вас отвязывается от конкретного запроса и метод можно использовать повторно для других целей.
*

balancer

  • Осваиваюсь на форуме
  • 34
  • 0
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #27 : 01.03.2016, 14:30:36 »
А, понял вас, спасибо, так и сделаю
*

newvideo

  • Осваиваюсь на форуме
  • 192
  • 2
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #28 : 15.01.2017, 14:58:21 »
Подскажите пожалуйста как добавить параметр в XML файл, который формируется модулем в режиме AJAX http://joomlaforum.ru/index.php/topic,334424.0.html
кто не работает, тот ест
*

fsv

  • Практически профи
  • 2524
  • 367
Re: Обработка AJAX в компоненте Joomla!3
« Ответ #29 : 07.02.2017, 15:36:47 »
Используйте класс JResponseJson, тогда очень удобно ответ обрабатывать в JS. Вот дока. При этом сохраняйте контроллер в controller.json.php и вызывайте его через format=json в URL. Тогда и приложение закрывать не надо, и заголовки ответа будут корректные. Всё это описано в доке.
Смотрю класс JResponseJson. Простой, как палка. Заголовков и закрытия нет. Попытался поискать по коду, не нашел.
Ткните, пожалуйста, интересно посмотреть.

Зато нашел несколько файлов, в которых при использовании JResponseJson устанавливаются заголовки и закрывается приложение:
Спойлер
[свернуть]

Также у меня заголовки неправильные отдавало, пока в методе json-контроллера не добавил:
Код: php
$app    = JFactory::getApplication();
// Send json mime type.
$app->mimeType = 'application/json';
$app->setHeader('Content-Type', $app->mimeType . '; charset=' . $app->charSet);
$app->sendHeaders();
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Изменения id для отображения названия в компоненте Joomla

Автор ice77

Ответов: 63
Просмотров: 1162
Последний ответ 19.08.2017, 23:39:37
от ice77
Создание модуля для своего компонента подгрузкой данных по AJAX

Автор john.deff

Ответов: 35
Просмотров: 751
Последний ответ 18.08.2017, 14:17:17
от Aleks.Denezh
Использование поля tag для кастомных тегов в компоненте

Автор Inoken

Ответов: 4
Просмотров: 175
Последний ответ 15.08.2017, 23:12:50
от fsv
Получить данные AJAX в контроллере и направить их в модель для записи в бд

Автор donpekc

Ответов: 6
Просмотров: 299
Последний ответ 24.04.2017, 12:04:52
от donpekc
Групповая обработка (реализация)

Автор platonische

Ответов: 6
Просмотров: 215
Последний ответ 19.04.2017, 13:28:43
от platonische