2010-07-14 3 views
0

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

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

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

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

ответ

3

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

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

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

Урлы должны работать со ссылкой на созданные хэши 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" 

перед именем

$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(); 
} 

Append

// 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

Я второй это решение, это довольно распространенная реализация, которую вы видите в Facebook и т. Д.Примечание. Если вы хотите разоблачить контент для пауков, убедитесь, что у вас есть доступная карта сайта. – funwhilelost

+0

ссылки - все ссылки на полные страницы. Пауки получают контент так же, как и на странице WEB 1.0. Но да, файлы Sitemap нужны в любом случае. :) – galambalazs

+0

Подход/добавление не очень мощный. С этим сложно построить сложные объекты. Лучше иметь полную версию страницы и несколько вызываемых частей из разных ее частей, используя подход MVC. –

0

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

Решение JQuery может быть что-то вроде:

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

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

+0

Это не имело ничего общего с моей проблемой, что так было. сожалею – Hubro

Смежные вопросы