MVC компонент

MVC и Ajax

Вы можете использовать стандартные элементы ajax без каких-либо ограничений. Для удобства добавления всех логических проверок - отправляйте аякс на текущую страницу (location.href). Чтобы исключить все вышестоящие слои - направляйте обращение на отдельный логический файл. Потому что в остальных случаях будет использоваться

Режим ajax

Получив заголовок отправки ajax запроса - приложение начинает работать в режиме ajax - это значит, что все полученные сообщения об ошибках будут записаны в действие передачи ошибки. Редиректы - будут переданы через сообщения о редиректах. Сообщения отдалки будут переданы через сообщения об выводе отладочной информации.

Расширенный ajax

Для расширенной работы сайта по технологии приложения существует надстройка над ajax. Отличительная особенность работы с ajax заключается в том, что вы делаете запрос, который возвращает события (events), которые должен отработать сайт в соответствии со своей логикой. Это могут быть не связаные с действием пользователя. Таким образом вы получаете больше контроля, т.к. сервер отвечает за все, что должно происходить на странице пользователя.

Для работы с расширенным ajax - вам нужно заинклудить файл core_ajax.js

В файле содержаться функции, необходимые для связки. Чтобы отправить запрос с определенным действием - существует Javascript функция

core_ajax(act,array=[],param,loading);

При вызове - на эту же страницу отправляется POST запрос, содержащий действие и массив с данными.

Для обработки запроса - в том же каталоге вы можете создать файл ajax.php, который автоматически будет обработан в случае ajax запроса

Для работы с ajax существует класс AJAX. Файл необходимо наполнять примерно следующим содержанием

<?php

switch(c\ajax::getAct()){
	// таким образом php ловит переданные со стороны Javascript данные
	case 'my_custom_action':

	// таким образом php посылает команду с данными на сторону Javascript
	c\ajax::addAction('JSaction',array(data));
...
break;
}

Параметр param содержит переменную, которая будет передана дальше в функцию core_feedbacks, что расширяет возможности по вызову функции из конкретного элемента.

Параметр loading добавляет класс loading к элементу param и автоматически выключается при получении ответа

Соответственно при совпадении действия - будет выполнен нужный участок кода.

Чтобы дать скрипту обратную связь - используются

Функции обратной связи

Как было сказано ранее - в режиме ajax все основные действия переходят в действия ajax. В файле core_ajax.php предусмотрены действия redirect, message, var и отладочные сообщения consoleLog, consoleCount, consoleDir, consoleTable, consoleGroup, consoleGroupEnd

Для добавления произвольного действия - используется функция

c\ajax::addAction($action,$data=array());

Переданные с помощью данной функуии команды будут отработаны через специальные обработчики на стороне Javascript

core_feedbacks['JSaction']=function(data,param){
...
}

В завершении обработки в файле ajax.php - следует насильно завершать обработку вызова Ajax, чтобы завершить скрипт и не выполнять обычные команды при помощи операции

c\ajax::render();

Частичная загрузка контента

Реализация загружаемой части контента висит на пользователе.

Для подгрузки части контента аяксом и встройки этой части внутрь элемента - используется функция

core_load(selector,act,array=[],param,loading);

Данная команда посылает аякс запрос с передачей дополнительного параметра загрузки данных. Это заставляет все отладочные и javascript встройки отрабатывать как для обычного html вывода. В остальном функция работает аналогично Jquery.load и core_ajax()

Если же будет получен ответ, формата JSON - он успешно обработается как скрипт

Возможны два случая загрузки содержания при помощи ajax:

  • Загрузка части контента не привязаная у URL
  • Загрузка части контента, с привязкой к URL

В первом случае - в главном файле нужно вставить директиву

if (isset($_POST['_partition_content']))c\mvc::$partical_content_folder=true;

следует расположить файл ajax, в котором указать возврат шаблона относительно c\ajax::getAct()

во втором

if (isset($_POST['_partition_content']))c\mvc::$partical_content_folder=$_POST['_act'];

При вызове - в параметре act стоит передать ссылку на базовую страницу относительно корня проекта, начиная с /{folder}

Все остальные видимые действия программа будет устанавливать автоматически. Следует учесть, что в зону контента также будут загружены скрипты и стили из побочной страницы. Если на части страниц присутсвуют скрипты, которые должны загружаться лишь раз - следует их располагать в зоне базовой страницы

Переключение методов ещё сырое и будет дорабатываться для достижения комбинаций в одном проекте

CSRF ajax

Для добавления во все вызываемые методы дополнительных параметров - используйте переменную

var core_ajax_var={key:'val'}

которая будет примешана к каждому запросу через core_ajax или core_load

c\mvc::addJsVar('core_ajax_var', ['_csrf'=>session_id()]);

Создано при помощи сервиса Core CMS