Лучший способ реализации навигационной системы Web 2.0

StackOverflow https://stackoverflow.com/questions/3251263

Вопрос

Теперь вот моя ситуация: я делаю CMS.Когда ссылки нажаты, я хотел бы, чтобы страницы динамически загружались с помощью AJAX.Проблема в ссылках!

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

Я полагаю, что JavaScript может проверить адрес, сохранить якорную тег в файл cookie и перезагрузить страницу, но я бы предпочел не придеться до такой длины.

Кто-нибудь знает решение этой проблемы?

Это было полезно?

Решение

Был подобный вопрос не так давно, и я придумал следующее решение.

Ваши URL-адреса должны указывать на реальные страницы, чтобы получить его работать для пользователей Invabled js.Обработчики щелчков должны обрабатывать запросы AJAX.Хэш должен содержать URL, а часть, такую как генеракодицетагкод, чтобы указать тип запроса.

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

URL-адреса

должны работать с ссылкой на ajax сгенерированные хэши и используя их как ссылки.Вся идея в основном имитирует такое поведение, которое вы можете увидеть на Facebook.

<Сильный> JavaScript

// click handler for ajax links
function goToWithAjax(hash) {
  hash = hash.href ? hash.getAttribute("href", 2) : hash;
  ajax( hash, function( response ) {
    document.getElementById("content").innerHTML = response;
  });
  hash = ("#!/" + hash).replace("//","/");
  window.location.hash = hash;
  return false;
}
.

.htaccess

auto_prepend_file = "prepend.php"  
auto_append_file  = "append.php"  
.

Prepend

$url   = $_SERVER['REQUEST_URI'];
$parts = explode('#!', $url);
$hash  = isset($parts[1]) ? $parts[1] : false;

// redirect if there is a hash part
if ($hash) {
  header("Location: $hash");
}

// find out if it's an ajax request
$ajax = strstr($url, "&ajax");

// we need header if it's not ajax
if (!$ajax) {
  get_header();
}
.

<Сильные> Приложение

// we need footer if it's not ajax
if (!$ajax) {
  get_footer();
}
.

Get_Header ()

function get_header() {

echo <<< END
<html>
<head></head>
<body>
<div id="page">
  <div id="header">
    <div id="logo"></div>
    <ul id="nav">menu...</ul>
  </div>
  <div id="content">
END;

}
.

get_footer ()

function get_footer() {

echo <<< END
  </div> <!-- end of #content --->
  <div id="footer">(c) me</footer>
</div> <!-- end of #page --->
</body>
</html>
END;

}
.

Другие советы

I can see why you might want to load parts of the page with ajax. A whole page is rather pointless though.

A jQuery solution might be something like:

$(a.ajax_link).click(function(){
  var url = $(this).attr('href');
  $.ajax({
    url:url,
    success:function(data) {
      $('body').html(data);
      return false;
    }
  });
});

I have in no way tested that, but it should still work without javascript enabled.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top