Форум русской поддержки Joomla!® CMS
26.06.2017, 07:48:28 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Какая польза от com_ajax?

 (Прочитано 238 раз)
0 Пользователей и 1 Гость смотрят эту тему.
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« : 12.06.2017, 00:45:45 »

Никогда не использовал com_ajax. Сегодня, в связи с вопросом от одного форумчанина о нем, решил посмотреть код компонента.
ОК, при указании модуля он вызывает метод getAjax (или какой-нибудь другой) в helper.php этого модуля, а при указании плагина - метод onAjaxПлагин.
И все.
Кто-нибудь объясните мне, какая польза от этого компонента?
Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #1 : 12.06.2017, 01:35:17 »

для реализации AJAX запросов без использования своего компонента, но автоматически в контексте api Joomla. т.е. чтобы не приходилось самому подключать апи Joomla в своем отдельно стоящем php. как например в модулях часто делают, либо что еще хуже вообще не используют апи Joomla, а напрямую работают с POST, и т.п.
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1788


Skype: septdir


« Ответ #2 : 12.06.2017, 02:30:31 »

Не нужно полностью писать свой обработчик. Для плагинов и модулей самое оно.
Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7724


Разраблю понемногу


« Ответ #3 : 12.06.2017, 10:38:21 »

Полезность налицо.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +373/-4
Offline Offline

Пол: Мужской
Сообщений: 2806



« Ответ #4 : 12.06.2017, 13:35:14 »

Не нужно полностью писать свой обработчик. Для плагинов и модулей самое оно.
Для модулей возможно, хотя не очень удобно, мне проще стукнуться в компонент ибо там можно MVC юзануть.. для плагинов спорно, ибо можно банально перехватить какой то $_REQUEST выполнить код и exit;

Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7724


Разраблю понемногу


« Ответ #5 : 12.06.2017, 13:49:09 »

Для модулей возможно, хотя не очень удобно, мне проще стукнуться в компонент ибо там можно MVC юзануть.. для плагинов спорно, ибо можно банально перехватить какой то $_REQUEST выполнить код и exit;
То есть ты для плагинов пишешь свой компонент, чтобы выполнить AJAX? Или имеешь ввиду ситацию, когда у тебя уже есть свой и там ты API для таких запросов создаёшь?
Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #6 : 12.06.2017, 13:56:26 »

То есть ты для плагинов пишешь свой компонент, чтобы выполнить AJAX?
зачем компонент? плагином же можно перехватить просто первое (ну или одно из первых) событие в Joomla, обработать, и die. по сути в модуле можно тоже самое сделать, обратится к этой странице, на которой модуль, в хелпере модуля перехватить запрос. но просто с com_ajax это удобнее мне кажется. меньше действий от сервера итого надо.
Записан
b2z
Support Team
*****

Репутация: +734/-0
Offline Offline

Пол: Мужской
Сообщений: 7724


Разраблю понемногу


« Ответ #7 : 12.06.2017, 14:09:28 »

зачем компонент? плагином же можно перехватить просто первое (ну или одно из первых) событие в Joomla, обработать, и die. по сути в модуле можно тоже самое сделать, обратится к этой странице, на которой модуль, в хелпере модуля перехватить запрос.
Извращенцы =)
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #8 : 12.06.2017, 14:14:06 »

Извращенцы =)
И я - один из них, поскольку полезность сего компонента для меня пока весьма спорная.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +373/-4
Offline Offline

Пол: Мужской
Сообщений: 2806



« Ответ #9 : 12.06.2017, 14:17:53 »

То есть ты для плагинов пишешь свой компонент, чтобы выполнить AJAX?
Дима зачем писать свой компонент для плагинов, я же написал что можно в плагине $_REQUEST перехватить и выполнить что угодно! до com_ajax я так и делал системный плагин, и в нем делал например так:
Код
public function onAfterInitialise(){
 if($_REQUEST['action'] === 'blablabla'){
   echo '123';
   exit;
 }
}


Или имеешь ввиду ситацию, когда у тебя уже есть свой и там ты API для таких запросов создаёшь?
Да ещё и такая ситуация постоянно )
Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #10 : 12.06.2017, 14:55:47 »

И я - один из них, поскольку полезность сего компонента для меня пока весьма спорная.
ну просто зачем грузить все, что есть на странице (компонент, плагины, другие модули), и перехватывать в модуле, если можно это сделать в com_ajax, и много ненужного не будет выполнятся в принципе? когда его не было так и приходилось в модулях делать, потому что цеплять к модулю компонент только ради аякса в модуле имхо мягко говоря избыточно Azn но сейчас с нативным решением com_ajax все проще, не вижу особо причин почему им не пользоваться. он не нужен только если заведомо есть свой компонент, тогда конечно он не нужен абсолютно, мы просто обращаемся к своему. но когда есть только модуль, который предполагает AJAX - имхо очень удобно придумано.
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #11 : 12.06.2017, 17:14:58 »

ну просто зачем грузить все, что есть на странице (компонент, плагины, другие модули), и перехватывать в модуле, если можно это сделать в com_ajax, и много ненужного не будет выполнятся в принципе?
Согласен, в этом есть смысль.
Записан
Septdir
Практически профи
*******

Репутация: +76/-3
Offline Offline

Пол: Мужской
Сообщений: 1788


Skype: septdir


« Ответ #12 : 12.06.2017, 19:20:05 »

Для модулей возможно, хотя не очень удобно, мне проще стукнуться в компонент ибо там можно MVC юзануть.. для плагинов спорно, ибо можно банально перехватить какой то $_REQUEST выполнить код и exit;
С этим ни кто не спорит с тем что в компоненте больше возможностей там и модель и вьюхи под рукой, но. ты же не будешь к каждому модулю\ сайту писать компонент.
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +45/-4
Offline Offline

Сообщений: 732



« Ответ #13 : 12.06.2017, 19:25:27 »

И я - один из них, поскольку полезность сего компонента для меня пока весьма спорная.
Когда я начинал писать свой первый модуль (форма с отправкой данных, обработкой их и возвращением какого-то результата), то столкнулся с одной проблемой, которой до сих пор кроме как использовать AJAX не вижу варианта: это форма должна обратиться к какому-то файлу для дальнейшей обработки данных. Можно конечно разрешить прямой доступ к PHP файлу, но меня этот вариант не устраивает по многим причинам. Поэтому я считаю использование com_ajax достаточно удобным в написании модулей.
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #14 : 12.06.2017, 20:59:20 »

форма должна обратиться к какому-то файлу для дальнейшей обработки данных. Можно конечно разрешить прямой доступ к PHP файлу, но меня этот вариант не устраивает по многим причинам
Речь шла немного о другом. В вашем случае, если "какой-то файл" - это отдельно стоящий, вне контекста Joomla API, PHP-скрипт, то не понимаю, каким образом com_ajax может вам помочь?
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +45/-4
Offline Offline

Сообщений: 732



« Ответ #15 : 12.06.2017, 21:25:27 »

Речь шла немного о другом. В вашем случае, если "какой-то файл" - это отдельно стоящий, вне контекста Joomla API, PHP-скрипт, то не понимаю, каким образом com_ajax может вам помочь?
Это файл модуля, а не сторонний файл. И чтобы отправить форму именно средствами модуля и апи Joomla, я вижу только решение через AJAX.
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #16 : 12.06.2017, 21:41:30 »

Мы тут говорим не о необходимости AJAX-запросов, а о пользе от компонента com_ajax. Пока вижу только возможность не
грузить все, что есть на странице (компонент, плагины, другие модули)
А в вашем случае
Это файл модуля, а не сторонний файл
При чем тут тогда
разрешить прямой доступ к PHP файлу, но меня этот вариант не устраивает
?
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +45/-4
Offline Offline

Сообщений: 732



« Ответ #17 : 12.06.2017, 21:54:42 »

Любая форма имеет action
<form action="">
Где указывается путь к исполняемому файлу. У Joomla php файлы имеют запрет на прямой доступ, а значит форма (наш модуль) не сможет отработать напрямую. А вот если использовать com_Ajax в модуле, то не придётся юзать всякие хаки, да и не будет перезагрузки страницы. Именно об этом преимуществе я пытаюсь донести.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +373/-4
Offline Offline

Пол: Мужской
Сообщений: 2806



« Ответ #18 : 12.06.2017, 21:57:34 »

У Joomla php файлы имеют запрет на прямой доступ, а значит форма (наш модуль) не сможет отработать напрямую.
что честно?) а если удалить строку типа: defined( '_JEXEC' ) or die( 'Restricted access' );
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #19 : 12.06.2017, 21:58:46 »

Любая форма имеет action
<form action="">
Где указывается путь к исполняемому файлу. У Joomla php файлы имеют запрет на прямой доступ, а значит форма (наш модуль) не сможет отработать напрямую.
Ну почему же? Очень даже может.
А вот если использовать com_Ajax в модуле, то не придётся юзать всякие хаки, да и не будет перезагрузки страницы. Именно об этом преимуществе я пытаюсь донести.
Скорее, вы хотели так сказать:
"А вот если использовать AJAX-запрос в модуле, то не придётся юзать всякие хаки, да и не будет перезагрузки страницы. Именно об этом преимуществе AJAX-запросов я пытаюсь донести."
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #20 : 12.06.2017, 22:00:40 »

Ну почему же? Очень даже может.
Даже без
удалить строку типа: defined( '_JEXEC' ) or die( 'Restricted access' );
Записан
ProtectYourSite
Завсегдатай
*****

Репутация: +45/-4
Offline Offline

Сообщений: 732



« Ответ #21 : 12.06.2017, 22:10:19 »

Поделитесь как?
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #22 : 12.06.2017, 22:37:25 »

Чем тут можно делиться?
- В action напишите
Код
echo JUri::getInstance();
- В mod_modulename.php добавьте
Код
if (JFactory::getApplication->input->get('submit')) {
  ModModulenameHelper::doAjax();
}
 
- Ну и в helper.php должен быть метод
Код
static function doAjax() {
  ...
  echo 'Это ответ сервера';
  exit();
}
 
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet