Давайте вкратце объясню, как «устроен» аjax в LS, а вы решите, какой вариант лучше для вашей задачи. У вас замечательные шаблоны, и, возможно, вы решите их дополнить интерактивными фишками )
1. Вы делаете ajax запрос на сервер, передавая данные в get или post.
2. Ваш экшин получает эти данные, вы что-то с ними делаете, и формируете ответ клиенту (браузеру).
3. Ответ клиенту в LS имеет стандартный вид (вне зависимости, каким способом вы сделали запрос), это json-объект:
4. Разберем поля, и найдем откуда они берутся: bStateError — признак несистемной ошибки. Т.е., вы просто хотите сказать пользователю, что его запрос ошибочен, но ошибка не критична (т.е., это не системная ошибка сервера, запрос обрабатывается корректно). Можно показать пользователю pop-up с сообщением об ошибке, или использовать в других целях, например, перебросить пользователя на другую страничку.
Что бы сформировать признак ошибки достаточно в Ивенте добавить «формирователь» ошибки, например:
$this->Message_AddErrorSingle('Ошибка! Вы не авторизованы!');
Этот формирователь ошибок сформирует корректный json ответ клиенту.
В поле sMsgTitle будет текст ошибки, а в поле bStateError — признак ошибки. Поле data будет пустым. sMsg — поле тела сообщения об ошибке, формируется вторым параметром метода Message_AddErrorSingle. При желании.
data — поле с вашими json-данными для правильного, «безошибочного» ответа клиенту. Формируется методом Viewer_AssignAjax, например:
$this->Viewer_AssignAjax('data', $data);
Первый параметр метода отвечает за название поля, в котором будет находится json-ответ с данными, второй параметр — значение передаваемой переменной, объекта массива или чего-то, подлежащего преобразованию в json-объект.
Т.е., в data вы помещаете то, с чем хотите работать на клиенте.
5. Обработка данных на сервере.
К примеру, ваш Ивент имеет следующий вид:
/**
* Fetch all public Blogs
*/
protected function EventFetchBlogs(){
// Устанавливаем ответ типа JSON
$this->Viewer_SetResponseAjax('json');
// Берем текущего пользователя и проверяем,
// залогинен ли он, и ялвяется ли администратором
$currentUser = $this->User_GetUserCurrent();
if(!$currentUser or !$currentUser->isAdministrator()) {
// Если нет, отправляем клиенту ошибку
$this->Message_AddErrorSingle('Ошибка! Вы не залогинены или не являетесь админом!');
return;
}
// Берем из базы все блоги, используя метод модуля SomeModule
// (предполагаем, что ответ — ассоциативный массив списка блогов)
if(!$data = $this->PluginSomeplugin_SomeModule_getBlogs()) {
// Если нет блогов, возвращаем пользователю ошибку
$this->Message_AddErrorSingle('Ошибка! Блоги не найдены!');
return;
}
// Вормируем сообщение о успешной находке блогов
$this->Message_AddNoticeSingle('Блоги найдены!');
// Помещаем в поле ajax ответа "data" наши найденные блоги (ассоциативный массив)
$this->Viewer_AssignAjax('data', $data);
}
6. Обработка данных на клиенте
Формируем «наш ajax».
// Параметры запроса. Будут преобразованы либо в строку для GET либо в тело для POST
var params = {
//Какие-то пары ключ-значение для обработки на сервере
width:1680,
height:1050,
//Обязательный параметр для корректной обработки запроса в LS.
security_ls_key: _ВАШ_SEQURITY_LS_KEY_ОБЯЗАТЕЛЬНЫЙ_ПАРАМЕТР_
};
$.ajax({
// Устанавливаем тип запроса
type : 'GET',
// Путь для Ивента
url: 'http://site.tld/someplugin/someevent',
// Данные запроса. Автоматически преобразуются либо в строку, либо в тело
data: $.param(params),
// При успешном запросе
success : function(xhr){
// Проверяем, есть ли от сервера какие-либо сообщения
if(!!xhr.sMsg) {
// Если установлен флаг ошибки, обрабатываем, как сообщение об ошибке
// Если флага нет — значит это сообщение об успехе
if(xhr.bStateError){
// Выводим сообщение об ошибке xhr.sMsg;
console.debug('Сообщение об ошибке', xhr.sMsg);
} else {
// Выводим сообщение об успешном запросе xhr.sMsg;
console.debug('Сообщение об успехе', xhr.sMsg);
}
}
// Если есть какие-либо данные в поле дата
if(xhr.data) {
// Выводим содержимое поля data
console.debug('Принятые данные', xhr.data);
}
},
// При неуспешном запросе. LS умеет обрабатывать только ошибки 404
error : function () {
if(xhr.status === 404){
//Что-то делаем при системной ошибке 404
console.debug('Системная ошибка!', xhr.status);
}
}
});
Если я правильно понял, вы хотите, чтобы под картинкой выводилось её описание, которое было задано при её добавлении и которое по дефолту является её тайтлом?
Если так, то берем файл /engine/modules/image/Image.class.php
Находим строчку
В templates/skin/synio/blocks/block.stream.tpl: — поменять местами пункты списка «Комментарии» и «Публикации»:
1. Вы делаете ajax запрос на сервер, передавая данные в get или post.
2. Ваш экшин получает эти данные, вы что-то с ними делаете, и формируете ответ клиенту (браузеру).
3. Ответ клиенту в LS имеет стандартный вид (вне зависимости, каким способом вы сделали запрос), это json-объект:
4. Разберем поля, и найдем откуда они берутся:
bStateError — признак несистемной ошибки. Т.е., вы просто хотите сказать пользователю, что его запрос ошибочен, но ошибка не критична (т.е., это не системная ошибка сервера, запрос обрабатывается корректно). Можно показать пользователю pop-up с сообщением об ошибке, или использовать в других целях, например, перебросить пользователя на другую страничку.
Что бы сформировать признак ошибки достаточно в Ивенте добавить «формирователь» ошибки, например:
Этот формирователь ошибок сформирует корректный json ответ клиенту.
В поле sMsgTitle будет текст ошибки, а в поле bStateError — признак ошибки. Поле data будет пустым.
sMsg — поле тела сообщения об ошибке, формируется вторым параметром метода Message_AddErrorSingle. При желании.
data — поле с вашими json-данными для правильного, «безошибочного» ответа клиенту. Формируется методом Viewer_AssignAjax, например:
Первый параметр метода отвечает за название поля, в котором будет находится json-ответ с данными, второй параметр — значение передаваемой переменной, объекта массива или чего-то, подлежащего преобразованию в json-объект.
Т.е., в data вы помещаете то, с чем хотите работать на клиенте.
5. Обработка данных на сервере.
К примеру, ваш Ивент имеет следующий вид:
6. Обработка данных на клиенте
Формируем «наш ajax».
Надо было писать /blog/ в адресе
Собственно к любой другой ссылке вешаем.
Например
124: protected $sHtmlTitleSeparation=' / ';
Если так, то берем файл /engine/modules/image/Image.class.php
Находим строчку и меняем на