Лучший способ реализовать навигационную систему Web 2.0 - PullRequest
0 голосов
/ 15 июля 2010

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 15 июля 2010

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

Ваши URL должны указывать на реальные страницы, чтобы заставить его работать для пользователей с ограниченными возможностями. Обработчики кликов должны обрабатывать запросы ajax. Хеш должен содержать URL-адрес и часть типа &ajax для указания типа запроса.

Если запрос от 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"  

* 1021 перед именем *

$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;

}
0 голосов
/ 15 июля 2010

Я понимаю, почему вы можете загрузить части страницы с помощью ajax. Хотя вся страница довольно бессмысленна.

Решение jQuery может выглядеть примерно так:

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

Я никоим образом не проверял это, но он все еще должен работать без включенного JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...