1

国/州/都市のブラウジング インターフェイスを含む ajax ベースの Web サイトを作成しています。SEO の目的で、国/州/都市の名前を URL に含めたいと考えています。たとえば、url には追加の変数が含まれる場合があり、次のようになります。

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

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

4

1 に答える 1

1

はい、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です。

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

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

使用する "#!" 単なる「#」ではなく、ajax によってトリガーされたコンテンツの変更を示します。ある時点で、フラグメントが提供するデフォルトのアンカー機能を使用したい場合があります (ただし、その特定の文字で始まる要素 ID はおそらくないため、感嘆符は「安全」です)。

また、Ajax 部分読み込みメカニズムで一貫性を保つことが容易になるため、絶対 URI (つまり、#!/USA/NY/Albany) を使用することをお勧めします。

さらに、誰かが URL に ajaxed-fragment を含むページをリロードした場合、window.location.href = '...' を実行してページを新しくロードしないと、かなり面倒になる可能性があります。その時点で、戻る/進むに関するあらゆる種類の問題に遭遇します。

于 2011-12-30T20:46:25.227 に答える