2011-12-30 15 views
1

国/都道府県/都市のブラウジングインターフェイスを含むajaxベースのウェブサイトを作成しています。 SEOの目的のために、URLに国名/都道府県名を含める必要があります。例えば、URLは次のように追加の変数を含むことができ、そして次のようになります。MVCで国/都道府県をブラウズする方法

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

私はAJAXによるMVCフレームワーク(特にCodeIgniterの)に、この機能に合うようにする必要があります。私は、主要なコンポーネント、具体的にはコントローラ、AJAXハンドラ、および可能なライブラリクラスをどのように編成するかについてはわかりません。標準またはベストプラクティスのアプローチはありますか?

答えて

1

はい、Googleは特にフラグメント識別子でAJAXアプリケーションの状態を維持し、このテーマにいくつかの良いものを書いた:

// 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); 
http://code.google.com/web/ajaxcrawling/docs/specification.html

をここに私はこれを処理するために私のindex.phpファイルに入れていくつかのコードがあります

アプローチはこれです:

1)それはAjaxのリクエストとIS_FRAGMENT == 1だ場合、あなたは、nだけの部分的な結果を表示フロントエンドの変更を埋め込むためにeedしてください

2)それ以外の場合は、検索エンジンまたは直接ページの読み込みであると想定してください。完全に構築されたページを表示します。

必ずしもajax要求のためだけに別々のエンドポイントを作成する必要はありません。 Outputクラスを拡張して、要求された形式の応答を提供するほうがよいでしょう。そういう意味でもっとRESTfulです。

HTML5履歴APIを処理できるブラウザに活用し、他のもののonhashchangeイベントにフォールバックすることをお勧めします。

さらにいくつかのポインタ:

使用 "#!"単に "#"ではなく、AJAXでトリガされるコンテンツの変更を示します。ある時点で、フラグメントが提供するデフォルトのアンカー機能を使用したいかもしれません(しかし、感嘆符は、その特定の文字で始まる要素IDを持たないため、 "安全"です)。

また、絶対URI(#!/ USA/NY/Albany)を使用することをお勧めします。これは、ajaxの部分読み込みメカニズムで一貫性を維持する方が簡単なためです。

さらに、誰かがajaxed-fragmentをURLに再ロードすると、新しいページを読み込むためにwindow.location.href = '...'を実行するだけでなく、かなり面倒になることがあります。その時点でバック/フォワードを使ってあらゆる種類の問題にぶつかります。

関連する問題