JS в ls 1.0

Что то не могу разобраться. Хотел сделать смену стилей для кнопки «читать блог» в активном и неактивном состоянии. Стили сменяются. То есть при вступлении кнопке добавляется класс Active, чем я и пользуюсь. но при перегазгрузке active удаляется. И кнопка теряет свое оформление. Вообщем, не подскажете, как реализовать нормальную смену стилей, чтобы она сохранялась?

Вот js код 1.0
/**
	* Вступить или покинуть блог
	*/
	this.toggleJoin = function(obj, idBlog){
		var url = aRouter['blog']+'ajaxblogjoin/';
		var params = {idBlog: idBlog};
		
		ls.hook.marker('toggleJoinBefore');
		ls.ajax(url,params,function(result) {
			if (result.bStateError) {
				ls.msg.error(null, result.sMsg);
			} else {
				obj = $(obj);
				ls.msg.notice(null, result.sMsg);
				
				var text = result.bState
					? ls.lang.get('blog_leave')
					: ls.lang.get('blog_join')
				;
				
				obj.empty().text(text);
				obj.toggleClass('active');
				
				$('#blog_user_count_'+idBlog).text(result.iCountUser);
				ls.hook.run('ls_blog_toggle_join_after',[idBlog,result],obj);
			}
		});
	};


А вот из 0.5.1
/**
	* Вступить или покинуть блог
	*/
	this.toggleJoin = function(obj, idBlog){
		ls.ajax(aRouter['blog']+'ajaxblogjoin/',{idBlog: idBlog},function(result) {
			if (result.bStateError) {
				ls.msg.error(null, result.sMsg);
			} else {
				obj = $(obj);
				ls.msg.notice(null, result.sMsg);
				obj.removeClass("active");
				if (result.bState) {
					obj.addClass("active");
				}
				$('#blog_user_count_'+idBlog).text(result.iCountUser);
			}
		});
	};


И еще: js зачем то вынесли в ядро, теперь в шаблоне, рассчитанном на паблик, не получится сделать своих правок в js.

8 комментариев

avatar
вместо этого теперь есть хуки в ЖС.
avatar
это круто. Наверное. А что скажете по основной проблеме?
avatar
Я просто не пойму вопроса. если после обновлении страницы нету того класса, то значит оно реально неактивно (не вошли в блог) или в шаблоне ошибка.
avatar
вообщем, задача такая:
есть ссылка
{if $oUserCurrent and $oUserCurrent->getId()!=$oBlog->getOwnerId()}
<div class="join-div">
	<a href="#" onclick="ls.blog.toggleJoin(this,{$oBlog->getId()}); return false;" class="join-blog">{if $oBlog->getUserIsJoin()}{$aLang.blog_leave}{else}{$aLang.blog_join}{/if}</a>
</div>
{/if}


Нужен такой js, чтобы при нажатии на ссылку к ней добавлялся класс active. Сейчас он добавляется, потом исчезает, потом я захожу на страницу блога, там написано «покинуть блог», а стили у кнопки не active, а join-blog, в итоге ссылка «покинуть блог» имеет стиль ссылки «вступить в блог».
avatar
ну правильно. там нету проверки активности.

такой код нужен:

{if $oUserCurrent and $oUserCurrent->getId()!=$oBlog->getOwnerId()}
<div class="join-div">
        <a href="#" onclick="ls.blog.toggleJoin(this,{$oBlog->getId()}); return false;" class="join-blog {if $oBlog->getUserIsJoin()}active{/if}">{if $oBlog->getUserIsJoin()}{$aLang.blog_leave}{else}{$aLang.blog_join}{/if}</a>
</div>
{/if}

avatar
спасибо! что то подобное я сегодня пробовал уже, но видно неправильно.
avatar
точно, сейчас события такие:
ссылка «вступить в блог» имеет класс join-blog. Нажимаю на нее, присоединяюсь к блогу, ссылка меняется на join-blog.active, текстовка на «покинуть блог». Вроде все нормально. Перезагружаю страницу — текстовка ссылки остается «покинуть блог», но стиль join-blog, то есть такой, какой должен быть у «вступить в блог».
avatar
А такой вопрос, если несложно
в blog_list.tpl есть у нас ссылка на блог
<a href="{$oBlog->getUrlFull()}">{$oBlog->getTitle()|escape:'html'}</a>


Добавил я ей класс
<a href="{$oBlog->getUrlFull()}" class="{if $oBlog->getUserIsJoin()}active{/if}">{$oBlog->getTitle()|escape:'html'}</a>


Задумка такая: при подключении к блогу, ссылке присваивается класс active, при отключении — он убирается. Получилось, но правда срабатывает только после рефреша. А хотелось бы, чтобы тут же. Очевидно, надо править что то в js?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.