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

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
всем кривет!
задумался тут свой модуль для обратной связи собрать, а то надоело в чужих ковыряться.
хочется сделать минималистично и по красоте, но то, как реализовано у конкурентов - не нра.
а именно - станица с формой связи шлет AJAX запрос на саму себя, а не на отдельный скрипт обработчик.
это как-то оправдано с позиции безопасности? в чем прикол такой организации, кроме очевидного запрета на прямой доступ к файлу?
*

sivers

  • Живу я здесь
  • 2453
  • 333 / 0
Re: Организация обработки ajax-формы
« Ответ #1 : 10.11.2019, 21:51:25 »
Думаю, что при таком подходе вообще не о безопасности заботятся. Когда шлешь данные из модуля на эту же страницу, то выгода (как по мне) только одна - ловить и обрабатывать данные можно этим же модулем. Нет нужды создавать в комплекте с модулем какой-нибудь плагин или компонент.

Сам так делал для простоты. В модуле в самом начале стоит проверка на присутствие отправленных данных (в $_POST). Если они там есть, значит была отправка - обрабатываем и выдаем сообщение (вместо формы) и можно сразу же exit если отправка была аяксом. Если отправки не было - выдаем форму.
« Последнее редактирование: 10.11.2019, 21:55:41 от sivers »
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #2 : 11.11.2019, 07:37:11 »
имелось в виду не плагин делать в качестве обработчика, а просто php файл. типа быстро и сердито.
но таки да, если нужны параметры тягать в обработчик, то уже проще со страницы ловить post, чуть жертвуя производительностью.
собственно, только такие варианты и попадались, отсюда и вопрос возник ).
спасибо за ответ.
*

sivers

  • Живу я здесь
  • 2453
  • 333 / 0
Re: Организация обработки ajax-формы
« Ответ #3 : 11.11.2019, 08:05:18 »
Если делать для себя, то можно и файлик. По части безопасности он не будет проигрывать, если обеспечить проверку входящих данных. Вот только подгрузку xml-формы для джумловой валидации из модуля немного неудобно будет. Особенно, если таких модулей несколько.

Может стоило бы сделать простенький компонент для обработки приходящих данных из форм модулей. В этом же компоненте разместить xml-форм и пусть их же берут модули. Тогда и страница для обработчика отдельная получится, и связка нормальная компонент+модуль. Сейчас использую такой вариант. Обработка тем же модулем мне тоже не понравилась - этот модуль довольно быстро становится каким-то монструозным, если пытаться все в него запихать и еще универсальным сделать. Ну и производительность тоже, да.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #5 : 11.11.2019, 12:49:21 »
Зачем так усложнять.
Есть любая форма (в том же HTML модуле или где еще), JS ссылается при AJAX запросе на файл AJAX.php который лежит в корне сайта (ну или в любом другом месте, путь только изменить)

Код
$.ajax({
            type: 'POST',
                url: "ajax.php",
                target: '',
                data: form_data,
                cache: false,
success: function(response){

}
});

В этом PHP файле мы подцепляем фреймворк движка и дальше работаем с стандартным API в плане запросов к БД, отправки почты, загрузки файлов и тд (только нужно следить за уровнем вложенности файла, от этого зависит подключения defines и framework)
Код
	if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ . '/../../' );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

sivers

  • Живу я здесь
  • 2453
  • 333 / 0
Re: Организация обработки ajax-формы
« Ответ #6 : 11.11.2019, 13:12:24 »
Зачем так усложнять.
Все так. Но если захочется сделать полноценный установочный пакет, то файл в корне - как-то не очень. Чуть лучше - если файл будет лежать в самом модуле, но у кого-то прямое обращение по такому пути может быть закрыто или просто нет желания отсвечивать путь к модулю в коде страницы.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #7 : 11.11.2019, 16:34:02 »
Чуть лучше - если файл будет лежать в самом модуле
Точно такой же код, только пути чуть другие

но у кого-то прямое обращение по такому пути может быть закрыто или просто нет желания отсвечивать путь к модулю в коде страницы.
А это какой смысл имеет? Исходный код PHP обработчика никто не увидит, при правильной обработке входящих данных инъекций не будет.
Файл обработчика можно кинуть в любую папку с произвольным названием, чтобы не светить название модуля, меняем путь в AJAX запросе и подключение фреймворка, все
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #8 : 11.11.2019, 16:46:29 »
А что мешает использовать нативный com_ajax  и отсылать данные на нужный модуль?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #9 : 11.11.2019, 16:52:08 »
А что мешает использовать нативный com_ajax  и отсылать данные на нужный модуль?
А зачем лишняя прослойка между формой и обработчиком? Есть HTML форма в модуле, есть js AJAX запрос в каком то файле и есть конечный обработчик. Всё.
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #10 : 11.11.2019, 16:56:34 »
Упрощение написания всяких проверок
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #11 : 11.11.2019, 16:59:22 »
Упрощение написания всяких проверок
А никто никогда не отменял банальностей в одну строку
Код
$fio = JRequest::getVar( 'name', '', 'post' );
Вот и вся проверка
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #12 : 11.11.2019, 17:29:55 »
А никто никогда не отменял банальностей в одну строку
Код
$fio = JRequest::getVar( 'name', '', 'post' );
Вот и вся проверка
У вас не будет фреймворка при прямом обращении к файлу, это как выше было сказано

А зачем лишняя прослойка между формой и обработчиком?
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #13 : 11.11.2019, 17:35:13 »
У вас не будет фреймворка при прямом обращении к файлу, это как выше было сказано
Будет, я выше привел код подключения defines.php и framework.php
После этого можно пользоваться всем апи движка
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #14 : 11.11.2019, 18:28:06 »
победителем назначается (барабанная дробь) beliyadm  *DRINK*
всем спасибо за содействие.
зы
може, победитель допишет за одно, как данные настоек модуля дернуть из файла-обработчика?
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Re: Организация обработки ajax-формы
« Ответ #15 : 11.11.2019, 18:40:50 »
А хотел "по красоте"... Разочаровал. ;D Да здравствует ***код, с левыми файлами в корне (или еще где) при разработке автономного расширения, с использованием JRequest в 2019, и т.д. Зато "не сложно".
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #16 : 11.11.2019, 18:49:06 »
Будет, я выше привел код подключения defines.php и framework.php
После этого можно пользоваться всем апи движка

Так это противоречит зачем эта прослойка. Точно также писать в методе Аякса обработки и не надо извращаться с подключением фреймворка
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #17 : 11.11.2019, 19:00:51 »
fsv, а никто ничего лучше не предложил.
по твоей ссылке написано, что для моей ситуации com_ajax не нужен.
спрашивается, за что тебе давать приз?  ;D
смысл красоты - не запрашивать всю страницу, ибо она может быть громоздкой.
в чем быдрокодовоть я тоже не понял. подключение фреймворка в свой файл - это вроде как не пример плохого кода.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #18 : 11.11.2019, 19:14:17 »
смысл красоты - не запрашивать всю страницу, ибо она может быть громоздкой
А где в com_ajax запрос всей страницы ?
*

fsv

  • Живу я здесь
  • 2765
  • 402 / 2
Re: Организация обработки ajax-формы
« Ответ #19 : 11.11.2019, 19:14:45 »
fsv, а никто ничего лучше не предложил.
по твоей ссылке написано, что для моей ситуации com_ajax не нужен.
где? "ситуацию" оценивал исходя из старт-поста, если там не все, то сам знаешь, кто виноват

спрашивается, за что тебе давать приз?  ;D
Приз не нужен от слова "совсем", иначе жил бы тут, как ты. За державу обидно.

подключение фреймворка в свой файл - это вроде как не пример плохого кода.
смотря где и зачем. для крона нормально. для модуля в J3.2 (по памяти) сom_ajax добавили. Работать будет и так, и этак. Вопрос то был "по красоте".
Веб-разработка: заказ. Только новая объемная разработка. Качественно, дорого.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #20 : 11.11.2019, 19:25:21 »
эмм.
про приз - это шутка была, если что. и я тут живу не ради призов, а ввиду среды и интересной темы (хотя сейчас, конечно, скорее по привычке уже).
про ком_аякс - там написано, что подходит для обращения к чужим компонентам. а если у вас свое - то на фиг не надо.
во всяком случае, beliyadm дал конкретную реализацию своего подхода с разъяснением, а не ссылку (никакой красоты я там не нашел, если что  ;D)
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #21 : 11.11.2019, 19:29:09 »
А где в com_ajax запрос всей страницы ?
ну камон!
а где пояснение, как оно работает?
если бы я был программером, то не спрашивал бы здесь ничего.
если там - красота, показали бы пример в реализации, что ли.
в чем его прелесть-то?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Организация обработки ajax-формы
« Ответ #22 : 11.11.2019, 21:53:39 »
@effrit Нафиг com_ajax со всеми этими "канонами" - Joomla, слава нам, не религия. Тебе пришлось бы helper создать, если его нет, в нем - метод getAjax и заморачиваться с форматами...
Но отдельный файл обработчика AJAX с подгрузкой framework - тоже не айс: прописывай url: location.href и обрабатывай прямо в модуле.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
*

Viclingvolive

  • Осваиваюсь на форуме
  • 31
  • 2 / 1
Re: Организация обработки ajax-формы
« Ответ #24 : 11.11.2019, 22:49:24 »
Цитировать
В этом PHP файле мы подцепляем фреймворк движка
забыл добавить define('_JEXEC', 1);
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #25 : 13.11.2019, 12:26:27 »
Конкретная реализация в одном расширении
Имеем обычный модуль с хелпером и шаблоном, в шаблоне находится код формы
В корне модуля лежит AJAX.php с таким кодом (пути соответствуют уровню вложенностифайла из папки модуля)

Код
	define( '_JEXEC', 1 );

header('Content-Type: text/html; charset=utf-8');

if ( file_exists( __DIR__ . '/defines.php' ) ) {
    include_once __DIR__ . '/defines.php';
}
if ( !defined( '_JDEFINES' ) ) {
    define( 'JPATH_BASE', __DIR__ . '/../../' );
    require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';

    $fio = JRequest::getVar( 'name', '', 'post' );
    // бла бла остальной код обработчика
    echo 'Заявка принята, ожидайте пожалуйста';
И дальше бла бла получение данных, обработка, письма, запросы в базу и ответ на страницу
Так же в папке модуля есть файлик js.js (который подключается на уровне шаблона модуля или хелпера $doc->addScript(JURI::base().'modules/mymod/assets/js.js');) и в этом файлике обращение к обработчику
Код
$.ajax({
            type: 'POST',
                url: "/modules/mymod/ajax.php",
                target: '',
                data: form_data,
                cache: false,
success: function(response){
$('.feed2call_loader').hide();
$.fancybox.open('<div class="feedcall_result">response</div>');
}
});

Все, мы имеем автономное расширение, которые использует нативное API движка и не привязано ни к кому и ни к чему
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

beliyadm

  • Легенда
  • 9758
  • 1664 / 66
  • Севастополь, Россия
Re: Организация обработки ajax-формы
« Ответ #26 : 13.11.2019, 12:41:41 »
може, победитель допишет за одно, как данные настоек модуля дернуть из файла-обработчика?

Как-то так

Код
$module = JModuleHelper::getModule('mod_breadcrumbs');
$moduleParams = new JRegistry($module->params);
echo '<pre>';
var_dump($moduleParams);
echo '</pre>';

Ну и дальше из массива достаешь нужные параметры (имя модуля только смени).
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #27 : 13.11.2019, 19:14:08 »
хы. я как раз думал под фансибокс или бутстрап4 затачивать это дело.
ну суть понятна и разница между реализациями тоже прояснилась.
по сути, каждый метод по-своему красив  ;D. одностраничным проще управлять и получать параметры (модулей может быть несколько на странице, например)
а раздельным можно грузить только то, что нужно, а не всю страницу, так что в случае с большой и сложносочиненной страницей этот способ по-интересней будет, имхо.
всем спасибо за консультацию, особенно за детельный ответ beliyadm'у  *DRINK*
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: Организация обработки ajax-формы
« Ответ #28 : 13.11.2019, 21:46:12 »
одностраничным проще управлять и получать параметры
Как модель может быть одностраничным ?
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: Организация обработки ajax-формы
« Ответ #29 : 13.11.2019, 21:53:45 »
речь не про модель, а про метод реализации.
под одностраничным имеется в виду, когда нет отдельного принимающего файла, а данные ловятся всей страницей, в которую вставлен модуль.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

ajax загрузка компонента на странице материала К2

Автор Divn

Ответов: 0
Просмотров: 520
Последний ответ 13.01.2023, 15:05:52
от Divn
При срабатывании ajax появляетсся div id="system-message-container"

Автор androv77

Ответов: 1
Просмотров: 453
Последний ответ 17.11.2022, 11:50:42
от androv77
Тип поля формы Select sql, как заполнить его через функцию php?

Автор GuDeVic

Ответов: 13
Просмотров: 977
Последний ответ 07.10.2022, 12:25:45
от fsv
Передача id поля ajax-запросом в модальное окно bootstrap 4 Joomla 3

Автор coolplaymaster

Ответов: 17
Просмотров: 1341
Последний ответ 21.12.2021, 17:42:45
от coolplaymaster
jQuery. Передать значение в поле формы Битрикс24

Автор fbr

Ответов: 40
Просмотров: 1545
Последний ответ 21.11.2021, 12:05:18
от gartes