postavkin

Рейтинг
601
Регистрация
06.01.2009

Ребят, я готов если надо 3000 заплатить, просто нужно грамотное решение.

дани мапов:
AJAX: делаем anchor-навигацию - http://habrahabr.ru/post/108611/ . Там в комментах про кнопки назад-вперед говорится.

Да, уж про кнопки это жестко. Я не программист и самостоятельно не в силах разобраться.

Тем более хотелось бы урл оставлять неизменным при подборе товаров и пагинации.

Если сможет кто помочь /ru/forum/764094 буду рад. Спасибо

Кто то может помочь? Никак не сделать с помощью js history так чтобы в историю попадал нужный урл (он при подборе товара не меняется). И при нажатии кнопки назад нужно чтобы он просто не менялся, как я понимаю.

Вот код функции которая выводит нужный контент (контент формируется в load_data.php)


$(document).ready(function(){
function loading_show(){
$('#loading').html("<img src='images/loading.gif'/>").fadeIn('fast');
}
function loading_hide(){
$('#loading').fadeOut('fast');
}
function loadData(page){
loading_show();
var str = $("#myform").serialize();
$.ajax
({
type: "POST",
url: "load_data.php",
data: {page : page, str: str},
success: function(msg)
{
$("#container").ajaxComplete(function(event, request, settings)
{
loading_hide();
$("#container").html(msg);
});
}
});
}
loadData(1); // For first time page load default results
$('#container .pagination li.active').live('click',function(){
var page = $(this).attr('p');
loadData(page);

});
$('#container .pagination2 .active2').live('click',function(){
loadData(1);
});
$('#container .pagination2 .sbros').live('click',function(){
alert('Я кнопка. Меня нажали!');
$('option').val('1'); // сброс значений полей option
// $('textarea').val(''); // сброс значений полей textarea
loadData(1);
});

$('#go_btn').live('click',function(){
var page = parseInt($('.goto').val());
var no_of_pages = parseInt($('.total').attr('a'));
if(page != 0 && page <= no_of_pages){
loadData(page);
}else{
alert('Enter a PAGE between 1 and '+no_of_pages);
$('.goto').val("").focus();
return false;
}

});
});

и нашел код функции которая в принципе делает историю, такой как надо, но мне не соеденить эти 2 кода никак


window.onload = function() {

// просто функция добавляет DIV с нужным нам текстом
function appendText( text ) {
var div = document.createElement( "div" );
div.innerHTML = text;
document.body.appendChild( div );
}

// функция для ссылок обрабатывается при клике на ссылку
function handlerAnchors() {

// заполним хранилище чем нибудь
var state = {
title: this.getAttribute( "title" ),
url: this.getAttribute( "href", 2 ) // двоечка нужна для ИЕ6-7
}

// заносим ссылку в историю
history.pushState( state, state.title, state.url );
// тут можете вызвать подгруздку данных и т.п.

// ...

appendText( '<b>Вы перешли по ссылке:</b> ' +
'<span style="color: green;">' + state.url + '</span>' );

// не даем выполнить действие по умолчанию
return false;
}

// ищем все ссылки
var anchors = document.getElementsByTagName( 'a' );

// вешаем события на все ссылки в нашем документе
for( var i = 0; i < anchors.length; i++ ) {
anchors[ i ].onclick = handlerAnchors;
}

// вешаем событие на popstate которое срабатывает
// при нажатии back/forward в браузере
window.onpopstate = function( e ) {

// просто сообщение
appendText( '<b>Вы вернулись на страницу:</b> ' +
'<span style="color: green;">' + history.location + '</span>' +
'<br/><b>state:</b> <span style="color: green;">' +
JSON.stringify( history.state ) + '</span><br/><br/>' );

// тут можете вызвать подгруздку данных и т.п.
// ...
}
}

ps мне в историю надо записать как я понял - url, номер страницы (из пагинации = page) и переменную str (эта переменная образуется из полей формы).

При нажатии назад как я понимаю - надо вернуть урл страницы, и остальные данные.

Ребят, я конечно нуб в этом деле, пытаюсь разобраться.

Вот на примере викимарта - у них anchor-навигация как я понял, все что после # - это информация которая позволяет понять какие именно данные нужно выводить в контент.

Вот что вижу, что у них в индексе урлы есть http://yandex.ru/yandsearch?p=1&text=url%3Ahttp%3A%2F%2Felectronics.wikimart.ru%2Fcommunication%2Fcell%2F%3F*&clid=1823013&lr=2

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

У меня ситуация другая - я хочу сделать страницу подбора материала с формой отбора по критериям - но так чтобы урл не перезагружался, выводился нужный контент в зависимости от выбранных характеристик, была пагинация тоже без смены урла и при этом работали кнопки назад вперед. Сейчас сделано на jQuerry но кнопки вперед назад не работают.

У меня один вариант - js history ? Спасибо

Почитал немного про hash и js history. Выбрать сложно.

Вообще я всю эту затею решил выполнить только из-за ПФ.

Т.е. хочется, чтобы юзер придя в страницу "каталог ламината" - не уходил из неё, а подбирал материал по параметрам. Так бы сделал обычный подбор материала с GET строкой, да позакрывал в роботсе урлы с номерами страниц. Может я зря заморачиваюсь? Извините, за тупой вопрос.

дани мапов:
AJAX: делаем anchor-навигацию - http://habrahabr.ru/post/108611/ . Там в комментах про кнопки назад-вперед говорится.

Вы про таймер, который проверяет изменился ли hash страницы?

И вопрос - то что вы показали и js history (о котором советует почитать Chukcha) это одно и тоже?

---------- Добавлено 25.12.2012 в 22:57 ----------

trahtor:
Говорят, что с якорями - это совсем другие урлы, что для пс намного лучше в плане продвижения.

Так, а вроде ссылка (урл) с якорем не индексируется...Или я ошибаюсь

DiAksID:
ещё раз: гарантировано нормально history броузера будет работать только при html-интерактивности. при аяксовских прибамбасах всё зависит от прямоты рук создателей движка - где то они записали нужные параметры в сессию, где то забыли, где то ещё что то вылезло, мало ли. да и сами понятия "вперёд/назад" при аяксе становятся слегка неоднозначными...

Спасибо. Т.е. ни одного сайта в рунете нет, который бы контент показывал на Аяксе (например подбор товаров или раздел новостей с аннонсами новостей" и при этом переход в новость по ссылке, а обратно кнопками "назад/вперед" (браузера) осуществлялся гарантированно правильно?

DiAksID:
если контент страницы обновляется аяксом, то перемещение по history броузера мало когда будет (но иногда и будет) соответствовать реальным телодвижениям юзверя. при "назад" по history он вполне естественно попадёт на то состояние страницы, которое было до всей его"интерактивности".

итог: вы сами себя запутали...

Здесь, например, http://unmedia.nichost.ru/novosti.html работает.

Перейдя например на страницу "3" в пагинации - выберем новость, клинем, прочитаем, нажмем "назад" - браузер открывает нам то что нужно. Т.е. последнюю открытую страницу в пагинации.

Но вот не пойму, реально ли сделать чтобы кликая по пагинации, потом нажав "назад" - работала такая же фишка...

---------- Добавлено 21.12.2012 в 18:13 ----------

DiAksID:
"назад" по history

Вот не могу найти, как сделать так чтобы скрипт сайта понимал, что нажата именно "назад" и нужно взять данные например от туда то...url, page и uslovie которые я пропишу.

DiAksID:
параметры отбора через сеcсию передаются или как? если через сессию - попробуте для эксперимента передавать сессию не через куки, а через get. и кстати, авторизация юзверя то же сбрасывается?

Авторизации юзверя нет в принципе.

С сессиями я уже всю голову сломал, ничего не получается 😕

Так как форма отбора, превью товаров и пагинация выводится Аяксом (если правильно понял jQuerry).

Уже убрал Я.Метрику и пробую сделать возможность при нажатии кнопки "назад" загрузки предыдущих данных - т.е. условия отбора, номер страницы.

Но, проблема, не сделать даже если в пагинации юзер выбрал страницу "7" например, потом нажал "назад" - так вообще перекидывает на предыдущий урл (это логично, но не справиться с проблемой).😒

ps я так понимаю задача идентифицировать нажал ли он кнопку "назад" или просто выбрал другую страницу в пагинации..а вот идентифицировать нажатие не знаю как.

ps2 Файл load.php в нем форма подбора товаров, вывод превью товаров и пагинация. Файл load подгружается функцией, которая в него передает данные о номере страницы и выбранных условиях отбора (jQuerry считывает инфо что выбрал юзер в форме). Я нубски говорю, но первый раз столкнулся с аяксом. Так вот при нажатии кнопки назад - страница перезагружается, а значит ни page ни uslovie не заданы.

ps3 понимаю что нужно засунуть куда то урл страницы, её page и uslovie чтобы при нажатии "назад" эти данные передавались в load.php

Вообще реально это сделать?

Страница не перезагружается, а только меняется контент внутри неё. При нажатии кнопки "назад" - соответственно не страница перезагружается, а только контент возвращается в предыдущий вариант. А то может это не реально, а?

[umka], DiAksID- спасибо большое.

Оказывается:

без установки Я.Метрики - нормально кнопка "назад" браузера работает только в Opera и Mozilla. В Maxton, Chrome, IE - данные отбора сбрасываются (как будто юзер пришел на страницу впервый раз).

с установкой Я.Метрики - при нажатии кнопки "назад" в любом браузере сбрасываются данные отбора.

Это что то меняет? Подскажите, пожалуйста.

Всего: 5509