1

ポップアップ ウィンドウ/モーダル内で新しいコンテンツ (ログイン/スレッド作成/スレッド ビュー/クイック検索) を読み込もうとしていますが、pushState を使用して URI も変更します。

これで、一般的な概念は理解できましたが、正確なメカニズムについては少し混乱しています。

サイトを閲覧していて、www.usatoday.com/news に出会いました。私はいくつかの調査を行いましたが、pushState を使用して URI を変更し、モーダル ウィンドウで AJAX を介してコンテンツをロードしているようです。

私の質問は、具体的にはモーダル ウィンドウ内で「新しいページ」をプルして表示する方法に関するものです。正しい URI を表示し、共有可能/クロール可能にするには、新しいコントローラーが必要になることは明らかです。しかし、そのページをモーダルで直接表示することは可能ですか? それとも、まったく新しい ajax 駆動のモデル/ビューで情報をチーズ化する必要がありますか?

4

1 に答える 1

1

どのモーダルを使用していますか?たとえば、fancybox を使用している場合。ページへのアンカー リンクに fancybox の追加クラスを与えるだけで、ページがモーダルで開かれ、すべての ajax が処理されます。次に、fancybox の aftershow コールバック関数に pushstate のコードを追加できます。

閉じた後のコールバックもあります。ここでは、新しい状態を popstate またはプッシュして、URI を元の状態に戻します。

外部から uri を入力する人をどのように処理するかは、あなた次第です。しかし、すでにスタンドアロン リンクとしてページを作成している場合は、問題にはなりません。ファンシーボックスで開きたい場合は、そのページの準備ができているドキュメントでファンシーボックスを初期化する必要があります。

また、これには新しいコントローラーが必要になることは明らかだとおっしゃいました。それはまったく真実ではありません。実際、私は別のコントローラーをまったく持っていません。私があなただったら、constants.php で次のように定数を定義します。

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

次に、次のようなチェックを行うことができます。

if (!IS_AJAX){
    //here is code for non ajax page load, e.g load headers, footers etc that you dont need in ajax requests etc.
}else{
    //often dont need this but if you have code specifically for ajax call put it here
}

}

于 2013-01-14T15:23:11.273 に答える