Jump to content

Навигация по сайту


Recommended Posts

Всем доброго времени суток, вот хочу разобраться как работает данная навигация, код взять с kabuljan.af:

var nav = {
	getStaticFiles: function(h){
		if(h){
			if(h.substr(0, 1) == '/') h = h.substr(1);
			var h = h.split('/');
			h = h[0];
			for(var i in navTree) {
				var m = h.match(new RegExp('^' + i, 'i'));
				if(m) return {files: navTree[i].files, i: i, loaded: navTree[i].loaded};
			}
		}
		return {files: []};
	},
	go: function(h, params){
		if(!h) return;

		if(!kj.logged && (h == 'http://kabuljan.af/' || h == '/')) return location.href = '/';

		h = h.replace('http://kabuljan.af', '');
		nav.new_url = h;

		if(!params) params = {};

		if(nav.destroy){
			nav.last_url = {h: h, p: params};
			var ret = nav.destroy(1);
			if(ret == 1) return;
			nav.destroy = null;
		}

		nav.clear();

		if(!params.no_change_link) history.pushState({link:h}, null, h);

		h += (h.indexOf('?') != -1 ? '&' : '?')+'al=-1';

		nav.clean = false;
		nav.static_start = false;
		nav.cont_queue = {};
		nav.init_js = null;
		nav.end = false;

		h += '&rnd_='+(new Date().getTime());

		nav.cur_load_link = h;

		var h_data = nav.getStaticFiles(h);
		if(h_data.files.length > 0){
			nav.static_start = true;
			if(!h_data.loaded){
				stManager.add(h_data.files, function(){
					navTree[h_data.i].loaded = true;
					if(nav.cur_load_link != h) return;
					nav.loaded_st = true;
					for(var i in nav.cont_queue){
						KJ('#'+i).html(nav.cont_queue[i]);
						delete nav.cont_queue[i];
					}
					if(nav.frame_loaded) nav.page_loaded();
				});
			}else nav.loaded_st = true;
		}else nav.loaded_st = true;

		KJ('body').append('<iframe id="navigation_frame"></iframe>');
		KJ('#navigation_frame').attr('src', h);
	},
	clear: function(h){
		if(kj.uid){
			if(cur.attach_all) cur.attach_all.obj = {};
			wallReply.opened_form = 0;
		}
		if(KJ('.photoViewBox').length) Photos.opened = Photos.marking = null;

		//chrome bug fix, destroy ajax request
		if(KJ('#im_frame').length) KJ('#im_frame')[0].contentWindow.stop();

		KJ('#im_frame, .photo_view, .box_pos, .box_info, .vii_box, .zoomWall, .photoViewBox, .titleHtml, #addStyleClass, .like_users_bl, .js_titleRemove, .tag_user_bl, #navigation_frame').remove();
		KJ('body').attr('ondrop', '');
		KJ([window, document]).unbind();
		KJ('.kj_top_button').attr('onClick', '').hide();
		if(KJ('#wiki_wall').length != 0) wiki_wall.close();
		cur.langs = {};
		if(kj.uid && KJ('#query').val().length > 0){
			KJ('.fast_search_bg').hide();
			KJ('#fs_scroll_cont').html('');
			KJ('#query').val('');
		}
		if(window.user_id) user_id = 0;
		cur.Media = {};
		if(cur.wikiOpened) WikiView.destroy();
		if(cur.notifyPad) NotifyPad.hide();
		if(window.MediaObjs) MediaObjs = {};
		cur.EmojiInited = [];

		nav.start_load_st = false;
		nav.loaded_st = false;
		nav.frame_loaded = false;

		voicesPlayer.curVoice = null;
		if(voicesPlayer.playing){
			voicesPlayer.endVoice();
			KJ('#voice_song')[0].pause();
		}
		destroyCur(h);
	},
	frame_data: function(type, data){
		switch(type){
			case 'nav_js':
				eval('(function(){' + data + ';})()');
			break;
			case 'cont':
				data.cont = String(data.cont.replace('</AjaxScript>', '</script>'));
				if(nav.static_start) nav.cont_queue[data.id] = data.cont;
				else KJ('#'+data.id).html(data.cont);
			break;
			case 'static':
				var files = data.split(',');
				nav.static_start = true;
				if(nav.start_load_st) return;
				stManager.add(files, function(){
					nav.static_start = false;
					for(var i in nav.cont_queue){
						KJ('#'+i).html(nav.cont_queue[i]);
						delete nav.cont_queue[i];
					}
					if(nav.init_js){
						eval(nav.init_js);
						nav.init_js = null;
					}
					if(nav.end){
						KJ('#navigation_frame').remove();
						if(nav.loaded_st) nav.page_loaded();
					}
				});
			break;
			case 'init_js':
				//if(nav.static_start) nav.init_js = data;
				//else eval(data);
				nav.init_js = data;
			break;
			case 'end':
				nav.end = true;
				nav.frame_loaded = true;
				if(nav.static_start) return;
				KJ('#navigation_frame').remove();
				if(nav.loaded_st) nav.page_loaded();
			break;
			case 'counts':
				eval(data);
			break;
			case 'runtime':
				if(kj.uid != 11 && kj.uid != 1) return;
				KJ('#runtime').remove();
				KJ('body').append(data);
			break;
		}
	},
	page_loaded: function(){
		KJ.each($('#page script'), function(){
			var src = KJ(this).attr('src');
			if(src){
				src = src.replace('/js/', '');
				stManager._add([src]);
			}else{
				window.eval.apply(window, [KJ(this).html()]);
			}
		});

		if(nav.init_js){
			eval(nav.init_js);
			nav.init_js = null;
		}

		KJ('#navigation_frame').remove();

		topButton();
		KJ('body').css('overflow-y', 'auto').scrollTop(0);
		findInputs();
		initClick();
		if(window.audio_player && !audio_player.pause) audio_player.command('play', {style_only: true});
		cur.lazy.searchImages(1);
		if(nav.resize_win){
			onBodyResize();
			nav.resize_win = null;
		}

		window.scrollTo(0,0);
	}
};

Думаю нужны дополнительные параметры в файле .htaccess и дополнительный код в index.php

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 years later...
В 20.08.2016 в 13:58, Mario сказал:

Для себя делаешь или на продажу? Если для себя могу помочь.

Можешь мне подсказать как сделать а то дизайн и функционал сделал а навигацию оставил стандартную vii и статику сделал

  • Downvote 1
Link to comment
Share on other sites

5 минут назад, PHPSocial сказал:

Можешь мне подсказать как сделать а то дизайн и функционал сделал а навигацию оставил стандартную vii и статику сделал

Что конкретно нужно? 

Link to comment
Share on other sites

18 минут назад, PHPSocial сказал:

Такая ситуация как у PaZiTiF

 

Ну он мне ситуацию писал в лс, так что я сомневаюсь, что тебе она известна. Там же как и в вк (прежней версии, за эту не знаю), но упрощенно, идут разные варианты ответа в зависимости от переменной al, вот тут при нажатии на кнопку перехода оно создает фрейм в котором получает ответ в js формате и который обрабатывается, по сути это всё тоже самое, что в вии идет после ответа от сервера с параметром ajax = yes (скрин 1), но вместе с скриптом который будет обрабатываться, а не чисто данными для скрипта (новый заголовок, контент и подобное), который уже записан. 

Безымянный.png

Edited by Mario
Link to comment
Share on other sites

4 минуты назад, Mario сказал:

Ну он мне ситуацию писал в лс, так что я сомневаюсь, что тебе она известна. Там же как и в вк (прежней версии, за эту не знаю), но упрощенно, идут разные варианты ответа в зависимости от переменной al, вот тут при нажатии на кнопку перехода оно создает фрейм в котором получает ответ в js формате и который обрабатывается, по сути это всё тоже самое, что в вии идет после ответа от сервера с параметром ajax = yes (скрин 1), но вместе с скриптом который будет обрабатываться, а не чисто данными для скрипта (новый заголовок, контент и подобное), который уже записан. 

Безымянный.png

 

Я использую сборку андрея там по другому ...

как мне навигацию прикрутить к сборке а общем мобильную версию я скопировал полностью с навигацией и всем функционалом а вот полную не могу 

 

image.png.3a475b28643f1b63333d6c968599b7c0.png

  • Downvote 1
Link to comment
Share on other sites

9 минут назад, Mario сказал:

Ну он мне ситуацию писал в лс, так что я сомневаюсь, что тебе она известна. Там же как и в вк (прежней версии, за эту не знаю), но упрощенно, идут разные варианты ответа в зависимости от переменной al, вот тут при нажатии на кнопку перехода оно создает фрейм в котором получает ответ в js формате и который обрабатывается, по сути это всё тоже самое, что в вии идет после ответа от сервера с параметром ajax = yes (скрин 1), но вместе с скриптом который будет обрабатываться, а не чисто данными для скрипта (новый заголовок, контент и подобное), который уже записан. 

Безымянный.png

Вот php  я уже все перепробовал но аякс и так не работает с джава кабулджана 

 

image.png.3ba67da16a1eaea38467f99ac8698271.png

  • Downvote 1
Link to comment
Share on other sites

3 минуты назад, PHPSocial сказал:

 

Я использую сборку андрея там по другому ...

как мне навигацию прикрутить к сборке а общем мобильную версию я скопировал полностью с навигацией и всем функционалом а вот полную не могу 

 

image.png.3a475b28643f1b63333d6c968599b7c0.png

Откуда я знаю что куда прикручивается, он спрашивал за принцип работы, я ему в вк и расписывал, а ставил он так же или нет мне не известно, да и два года прошло 

Link to comment
Share on other sites

1 минуту назад, PHPSocial сказал:

Вот php  я уже все перепробовал но аякс и так не работает с джава кабулджана 

 

image.png.3ba67da16a1eaea38467f99ac8698271.png

Он так и не будет работать, и я написал почему, это же обычная подгрузка вии.

Link to comment
Share on other sites

  • 6 months later...
В 02.10.2018 в 14:50, Mario сказал:

Он так и не будет работать, и я написал почему, это же обычная подгрузка вии.

да, тогда давно ваши советы мне помогли разобраться, данный код у меня мб еще где-то остался на пк

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...