-0.83
Рейтинг
1.18
Сила
  • avatar k1r
  • 3
В templates/skin/synio/blocks/block.stream.tpl — добавить js-код:

{literal}
<script>
	jQuery(document).ready(function($) {
		$('.js-block-stream-nav .js-block-stream-item[data-type="topic"]').trigger('click');
	});
</script>
{/literal}

В templates/skin/synio/blocks/block.stream.tpl: — поменять местами пункты списка «Комментарии» и «Публикации»:

<li class="js-block-stream-item" data-type="topic"><a href="#">{$aLang.block_stream_topics}</a></li>
<li class="active js-block-stream-item" data-type="comment"><a href="#">{$aLang.block_stream_comments}</a></li>
  • avatar lifecom
  • 0
вот здесь об этом доступно подробно написано (by Chiliec )
  • avatar oduvan
  • 4
Давайте вкратце объясню, как «устроен» аjax в LS, а вы решите, какой вариант лучше для вашей задачи. У вас замечательные шаблоны, и, возможно, вы решите их дополнить интерактивными фишками )
1. Вы делаете ajax запрос на сервер, передавая данные в get или post.
2. Ваш экшин получает эти данные, вы что-то с ними делаете, и формируете ответ клиенту (браузеру).
3. Ответ клиенту в LS имеет стандартный вид (вне зависимости, каким способом вы сделали запрос), это json-объект:
{
bStateError: false
data: true
sMsg: ""
sMsgTitle: ""
}


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);
        }
    }
});
Вот так получилось:
$this->AddEventPreg('/^aff$/i','/^\d+$/i','/^(\d+)\.html$/i',array('EventShowTopic','topic'));
//http://mylivestreet.ru/blog/aff/1/1.html 

Надо было писать /blog/ в адресе
  • avatar PSNet
  • 1
В html 5 есть крутой атрибут скачать фото.

<a href="test.jpg" download="photo">
    <img src="test.jpg" alt="images alt" />
</a>


Собственно к любой другой ссылке вешаем.

Например

<img src="test.jpg" alt="images alt" />
<a href="test.jpg" download="photo"></a>
\engine\modules\viewer\Viewer.class.php
124: protected $sHtmlTitleSeparation=' / ';
  • avatar Gmugra
  • 0
Спасибо, к стати за тему. Подтолкнуло покопаться в во всяком разном. :)
Если я правильно понял, вы хотите, чтобы под картинкой выводилось её описание, которое было задано при её добавлении и которое по дефолту является её тайтлом?
Если так, то берем файл /engine/modules/image/Image.class.php
Находим строчку
$sText.=$sAlt.' />';
и меняем на
$sText.=$sAlt.' />
('.htmlspecialchars($aParams['alt']).')';
  • avatar ort
  • 3
Если использовать в плагине ORM, то кеширование будет отрабатываться автоматически — кешируются запросы возвращающие списки объектов
  • avatar ort
  • 4
в модуле rating(Rating.class.php)