Как организовать просмотр страны / города / города в MVC

Я создаю веб-сайт, основанный на ajax, который включает интерфейс просмотра страны / штата / города. Для целей SEO я хочу указать название страны / штата / города в URL-адресе. Например, URL может включать дополнительные переменные и будет выглядеть примерно так:

http://www.website.com/browse#!USA/NY/Albany http://www.website.com/browse#!USA/NY/Albany?Category=sports 

Мне нужно установить эту функциональность в среду MVC (в частности, CodeIgniter) через AJAX. Я не уверен, как организовать основные компоненты, в частности Controller, AJAX Handlers и возможный класс библиотеки. Существует ли стандартная или передовая практика?

Да, Google написал несколько полезных материалов по этому вопросу, особенно поддерживая состояние приложения ajax с идентификаторами фрагментов: http://code.google.com/web/ajaxcrawling/docs/specification.html

Вот код, который я поместил в свой файл index.php, чтобы обработать это:

 // Special handler for ajax partials ("AHAH" paradigm) if (isset($_GET['_escaped_fragment'])) { // Grab just the fragment $fragment = $_GET['_escaped_fragment']; // See if we have GET parameters to extract from the fragment if (FALSE !== ($p = strpos($fragment, '?'))) { // Make sure to save additional GET parameters $additional_params = array_diff_key($_GET, array('_escaped_fragment' => 1)); // Parse the querty string parse_str(substr($fragment, $p+1), $_GET); // Add the originals back in $_GET = array_merge($_GET, $additional_params); // The beginning part of the fragment is the base URI $fragment = substr($fragment, 0, $p); } // Otherwise, clear the $_GET array else { $_GET = array(); } $_SERVER['PATH_INFO'] = $fragment; $_SERVER['REQUEST_URI'] = $fragment; // Add a constant for use throughout the app define('IS_FRAGMENT', 1); } defined('IS_FRAGMENT') OR define('IS_FRAGMENT', 0); 

Подход заключается в следующем:

1) Если это запрос ajax и IS_FRAGMENT == 1, тогда отобразите только частичные результаты, необходимые для заполнения ваших интерфейсных изменений

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

Вы не должны создавать отдельные конечные точки только для запросов ajax. Вероятно, лучше расширить класс Output, чтобы обеспечить ответ в запрошенном формате. Это скорее RESTful.

Также хорошей практикой является использование API истории HTML5 для браузеров, которые могут его обрабатывать, и вернуться к событию onhashchange для других.

Еще несколько указателей:

Используйте «#!» для указания изменений, вызванных ajax-событиями, а не просто «#». В какой-то момент вы можете использовать функциональные возможности привязки по умолчанию, которые предоставляет фрагмент (но восклицательный знак «безопасен», поскольку у вас, вероятно, не будет идентификаторов элементов, начиная с этого конкретного символа).

Я бы также рекомендовал использовать абсолютный URI (например, #! / USA / NY / Albany), так как будет легче оставаться последовательным в вашем механизме частичной загрузки ajax.

Кроме того, если кто-то перезагружает страницу с помощью ajaxed-фрагмента в URL-адресе, он может стать довольно грязным, если вы не просто сделаете window.location.href = '…' для загрузки страницы. В этот момент вы столкнетесь со всеми проблемами.