Требуется консультация

Добрый день.
Мне требуется консультация по работе с LS и плагином API github.com/livestreet/lsplugin-api, либо помощь в поиске документации
Не могу разобраться с принципом программирования.
Как дописать функцию регистрации в плагин API и как использовать AJAX в LS?
например как происходит авторизация и регистрация через AJAX?

Снова ajax, нужна помощь с кодом.

Всем привет, снова нужна помощь.
Решил попробовать перевести на аякс поиск топиков по тегам.
Столкнулся с какой то странной ошибкой.
Если я передаю переменную $aTopics ($oViewer->Assign('aTopics',$aTopics);) в шаблон то ничего не работает. Если не передаю, то все отрабатывается но естественно я не вижу топики которые должны быть.
При этом если убрать ajax и сделать как обычный эвент по клику, то все прекрасно работает и топики выводятся.

Может быть кто то натолкнет на решение или хотя бы подскажет в какую сторону смотреть.

topic.js
ls.topic = (function ($) {

    this.searchByTag = function(idTag, idTab) { 

		var url = aRouter['filter']+idTab+'/'+'ajax-search-by-tag/';
		var params = {idTag: idTag};
		ls.ajax(url, params, function(result){
			if (result.bStateError) {
				$('#topic-list-search').hide();
				$('#topic-list-original').show();
			} else {
				$('#topic-list-original').hide();
				$('#topic-list-search').html(result.sText).show();
			}
		});
	};


Экшн
/**
	 * Отображение топиков по тегам
	 *
	 */
	protected function EventAjaxSearchByTag() {

		 // Получаем тег из УРЛа
		$this->Viewer_SetResponseAjax('json');
                $sTagId = getRequestStr('idTag', null, 'post');  // Тег по которому ищем.

		 // Получаем список топиков
                 //1 и 100 количество страниц и топиков на страницу
		$aResult = $this->Topic_GetTopicsByTag($sTagId, 1,100)); 
		$aTopics = $aResult['collection']; 

		/**
		 * Вызов хуков
		 */
		//$this->Hook_Run('topics_list_show',array('aTopics'=>$aTopics));
		/**
		 * Загружаем переменные в шаблон
		 */
                $oViewer=$this->Viewer_GetLocalViewer();
		$oViewer->Assign('aTopics',$aTopics);
		$this->Viewer_AssignAjax('sText',$oViewer->Fetch("topic_list.tpl"));

Мультизагрузка изображений

Простой (самый простой) способ реализовать мультизагрузку картинок.

В шаблоне правим window_load_img.tpl, делаем массив img_file[] и дописываем multiple
<input type="file" name="img_file[]" id="img_file" value="" class="input-text input-width-full" multiple />


И ActionAjax.class.php, вот функция EventUploadImage() целиком
	/**
	 * Загрузка изображения
	 *
	 */
	protected function EventUploadImage() {
		/**
		 * Т.к. используется обработка отправки формы, то устанавливаем тип ответа 'jsonIframe' (тот же JSON только обернутый в textarea)
		 * Это позволяет избежать ошибок в некоторых браузерах, например, Opera
		 */
		$this->Viewer_SetResponseAjax('jsonIframe',false);
		/**
		 * Пользователь авторизован?
		 */
		if (!$this->oUserCurrent) {
			$this->Message_AddErrorSingle($this->Lang_Get('need_authorization'),$this->Lang_Get('error'));
			return;
		}
		$sFile=null;
                
                
                if (isPost('img_url') && $_REQUEST['img_url']!='' && $_REQUEST['img_url']!='http://') {
                        /**
                         * Загрузка файла по URl
                         */
                        $sFile=$this->Topic_UploadTopicImageUrl($_REQUEST['img_url'],$this->oUserCurrent);
                        switch (true) {
                                case is_string($sFile):

                                        break;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_READ):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_read'),$this->Lang_Get('error'));
                                        return;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_SIZE):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_size'),$this->Lang_Get('error'));
                                        return;

                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR_TYPE):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error_type'),$this->Lang_Get('error'));
                                        return;

                                default:
                                case ($sFile==ModuleImage::UPLOAD_IMAGE_ERROR):
                                        $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_url_error'),$this->Lang_Get('error'));
                                        return;
                        }

                        if ($sFile) {                        
                                $sText=$this->Image_BuildHTML($sFile, $_REQUEST);
                        }

                } else {

                        foreach ($_FILES['img_file'] as $k=>$v){
                           if(is_array($v)){
                               foreach ($v as $sk=>$sv){ 
                                        $arr[$sk][$k]=$sv;
                                }
                               }
                            }

                        $sText = "";

                        foreach ($arr as $_FILES['img_file']) {

                                /**
                                 * Был выбран файл с компьютера и он успешно зугрузился?
                                 */
                                if (is_uploaded_file($_FILES['img_file']['tmp_name'])) {

                                        if(!$sFile=$this->Topic_UploadTopicImageFile($_FILES['img_file'],$this->oUserCurrent)) {
                                                $this->Message_AddErrorSingle($this->Lang_Get('uploadimg_file_error'),$this->Lang_Get('error'));
                                                return;
                                        }
                                        /**
                                         * Если файл успешно загружен, формируем HTML вставки и возвращаем в ajax ответе
                                         */
                                        if ($sFile) {
                                                $sText.=$this->Image_BuildHTML($sFile, $_REQUEST);
                                        }

                                }	

                        } //foreach

                }

		$this->Viewer_AssignAjax('sText',$sText);		
		
	}


такие дела

При переезде на другой хостинг отвалилась регистрация/логин.

При валидации полей на регистрации и попытке логина вываливается ошибка.

/registration/ajax-validate-fields/ 404 Not Found.

На локальном сервере всё работает. Подскажите куда копать пожалуйста.

Быстрый поиск по блогам

Здравствуйте уважаемые хабровчане лайвстритовцы.
Представляю Вашему вниманию небольшой плагинчик идею (иконку и дизайн) которого предложил многоуважаемый O3OH .

Читать дальше →

Дублирование ajax-запроса

Недавно заметил у себя, что при регистрации, авторизации и прочих действий из модальных окон на сервер следует два запроса подряд с одинаковыми параметрами (см. скриншот). На livestreet.ru ровно точно также.



Расстановка брекпойнтов в скриптах с целью выяснить, почему же второй раз идет запрос, ничего не прояснила.
Функция, которая биндится на submit формы (в которой, например, вызывается ls.user.login()) вызывается один (первый) раз. А сам ls.user.login() два раза. При чем, даже если очистить код функции ls.user.login(), то она все равно вызовется два раза. Следовательно, дело не в ней.
Будем копать дальше.

Ajax-вызов для обновления блока, который генерирует плагин

Доброго дня!
Возникла следущая проблема.
Есть плагин, который, помимо всего прочего, показывает блок в сайдбаре. По определенным событиям этот блок надо было бы обновлять. И тут я застрял. Не понимаю, как сделать соответствующий вызов используя ajax (ls.ajax). Если обращаюсь исходя из логики (по роутеру), получаю 404.
Например пробовал регистрировать event так: $this->AddEventPreg('/^ajax$/i', '/^reload-box$/i', 'ReGenerateBox'); и обращаться примерно к /my+plugin/ajax/reload-box/. в ответ хотел получить просто html, так же как при генерации блока на загрузке.
Не вышло.
Очень прошу натолкнуть на полезные мысли или просто подсказать решение. Заранее спасибо!

tinyMCE не сохраняет текст при ajaxSubmit

Здравствуйте, столкнулся с этим на «Стене» в шаблоне Inside. Возможно в других шаблонан така-же проблема
при ajaxSubmit вылазит ошибка что длинна текста 0 символов.
Решается так: stackoverflow.com/a/4874915 т.е. надо перед отправкой запроса принудительно сохранить в tinyMCE данные

Индексация Ajax ссылок

Здравствуйте уважаемые знатоки СЕО.
Сегодня пересматривал гугл и наткнулся на то. что он индексирует и показывает ошибку 404 на ссылках которые ведут на плагины.
Проанализировал топики с которых были переходы гугла по тем ссылкам и единственное что было между ними общего это: aRouter в javascript-е страницы:

aRouter['error'] = 'http://goloskarpat.info/error/';
aRouter['registration'] = 'http://goloskarpat.info/registration/';
aRouter['profile'] = 'http://goloskarpat.info/profile/';
aRouter['my'] = 'http://goloskarpat.info/my/';
aRouter['blog'] = 'http://goloskarpat.info/blog/';
aRouter['personal_blog'] = 'http://goloskarpat.info/personal_blog/';
aRouter['index'] = 'http://goloskarpat.info/index/';
aRouter['topic'] = 'http://goloskarpat.info/topic/';
aRouter['login'] = 'http://goloskarpat.info/login/';
aRouter['people'] = 'http://goloskarpat.info/people/';
aRouter['settings'] = 'http://goloskarpat.info/settings/';
aRouter['tag'] = 'http://goloskarpat.info/tag/';
aRouter['talk'] = 'http://goloskarpat.info/talk/';
aRouter['comments'] = 'http://goloskarpat.info/comments/';
aRouter['rss'] = 'http://goloskarpat.info/rss/';
aRouter['link'] = 'http://goloskarpat.info/link/';
aRouter['question'] = 'http://goloskarpat.info/question/';
aRouter['blogs'] = 'http://goloskarpat.info/blogs/';
aRouter['search'] = 'http://goloskarpat.info/search/';
aRouter['admin'] = 'http://goloskarpat.info/admin/';
aRouter['ajax'] = 'http://goloskarpat.info/ajax/';
aRouter['feed'] = 'http://goloskarpat.info/feed/';
aRouter['stream'] = 'http://goloskarpat.info/stream/';
aRouter['photoset'] = 'http://goloskarpat.info/photoset/';
aRouter['subscribe'] = 'http://goloskarpat.info/subscribe/';
aRouter['language'] = 'http://goloskarpat.info/language/';
aRouter['less'] = 'http://goloskarpat.info/less/';
aRouter['k2import'] = 'http://goloskarpat.info/k2import/';
aRouter['mainpreview'] = 'http://goloskarpat.info/mainpreview/';


Немого погуглив тут и там узнал что гугол действительно индексирует ссылки в скриптах несмотря на то ajax-овые они или нет, внутренние или внешние, закрытые или открытые.
Также нашел что для прекращения такого самовольтва Гугла рекомендуют делать rel=«nofollow» в ссылки. Но, простите, в javascript некуда их включать.

У кого есть какие соображения по этому поводу? Покачто обрамил этот javasript в noindex в надежде что гугол поймет это правильно