Использование ajax в виджете

Подскажите, как использовать ajax в виджете

#1 6 июля 2016 в 11:05
Недавно занялся изучением icms2 и пока не разобрался во всех тонкостях новой системы. Есть одна задачка — желательно решить.
Создаю виджет не привязанный к контролам. В system\widjets создал папку виджета. В этой папке создал widjet.php. Подскажите, пожалуйста, где в каких файлах записать обработчик ajax-запросов и как вызвать из тела виджета?
#2 6 июля 2016 в 13:20
Виктор, для того, чтобы в виджете выполнить ajax запрос, необходим контроллер. Только обращаясь к нему, вы сможете выполнить запрос.
Виджеты не могут обрабатывать запросы. Т.е. в вашем случае:
— дополнить экшеном существующий контроллер
— написать свой, например с одним экшеном.
#3 31 июля 2016 в 20:39
Вынужден вернуться к вопросу.
Fuze, подскажите, пожалуйста схему использования ajax в instantcms-2.
Как я понимаю, во frontend контроллера нужно завести функцию actionWidget (так как вызов будет из виджета или темплейта виджета)
С помощью isAjax проверять тип запроса.
Каким образом осуществляется ajax-вызов из виджета?
Что-то типа
  1. ...
  2. $.ajax({
  3. type: "POST",
  4. url: "http://site.ru/controller",
  5. data: {mode:"mode", tag:"tag"}
  6. }).done(function( result )
  7. {
  8. $("#msg").html( result );
  9. });
  10. ...
#4 31 июля 2016 в 20:58

Как я понимаю, во frontend контроллера нужно завести функцию actionWidget (так как вызов будет из виджета или темплейта виджета)

Виктор
Нет. Экшен может иметь абсолютно любое название, главное чтобы оно было вам понятно. Например, из виджета вы хотите получать по кнопке подгрузку записей. Делаете в своем контроллере экшен с названием, например show_more, и в js к нему обращаетесь.
  1. ...
  2. $.ajax({
  3. type: "POST",
  4. url: "/controllername/show_more",
  5. data: {param:"bar", param2:"bar2"}
  6. }).done(function( result )
  7. {
  8. $("#msg").html( result );
  9. });
  10. ...
С помощью isAjax да, вы проверяете тип запроса, главное в конце экшена работа должны завершаться через die; или т.п. А например с помощью isAjax вы немного защищаетесь от прямого вызова. Или же с помощью isAjax вы можете разделить логику: если аякс запрос, то "умираете" в конце экшена, если нет, то рендерится страница целиком вместе с шаблоном. Кроме того, в движке методы шаблонизации автоматически проверяют тип запроса и сами "умирают" при аякс запросах.
#5 31 июля 2016 в 21:28
Ясно, спасибо большое!!!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.