私はFacebookの壁のようなホームページでDrupalにオンラインコミュニティを構築しました。最新の25件の投稿が表示されます。最新の2件のコメントはそれらの投稿の下に表示されます。これらのコメントのすぐ下にテキストエリアがあり、特定の投稿に新しいコメントをすばやく投稿することができます。私の特別なケースでPHPからJavaScriptへデータを渡す最も良い方法
Facebookスタイルの投稿には、JavaScriptを使用して多くの機能が組み込まれています。ポストの直下にある「すべてのコメントを見る」リンクをクリックすると、そのポストのすべてのコメントを取得し、そのポストのすぐ下に表示するAJAXコールが作成されます。また、あなたの質問への解決策としてコメントを投稿したり、コメントをインラインで編集したりすることもできます。これらのアクションにはAJAXリクエストが必要です。つまり、リクエストを行うJavaScriptはノードID(ユニークコメントID(コメントの一意の識別子)など。
私の最初の実装では、これらの重要なデータが投稿全体に散在していたため、検索する必要があるJSを書くのがより複雑になりましたそれ。だから私の2番目の実装は、このデータをすべて各ポストのメインラッピング要素のJSON互換文字列に出力するだけです。これにより、JSが必要なデータを見つけるのがはるかに容易になりましたが、JSONを文字列として書くことは苦痛です(エスケープする引用符で、改行はありません)。
私は3番目のアイデアを持っています。実装に先立ってフィードバックを探しています。そのアイデアは、各ポストのデータを保持するオブジェクトをその中に含むこれらすべてのポスト用の単一のグローバルなJS配列を作成することです。その配列の各要素は、AJAX呼び出しに必要なデータを保持します。だから、次のようになります。
Facebookのスタイルのポストテンプレート
<div class="post" data-postindex="<?php echo $post->index; ?>">
<!-- lots of other HTML for the post -->
</div>
<script type="text/javascript">
globalPostArray.push({
nid: <?php echo $post->nid; ?>,
authorID: <?php $post->authorID; ?>,
//etc. etc. etc.
});
</script>
は、上記のコードの結果は、リンクをクリックますときには、AJAX要求を必要とすることで、JSは、単純にDOMをトラバースうメインの.post
要素が見つかるまでそのリンクから上に移動します。 globalPostArray
のどの要素が必要なデータを保持しているかを知るために、data-postindex
の値を取得します。
思考?私はこのような何かを達成するための標準的で受け入れられた方法がなければならないように感じる。
なぜ文字列としてのJSONが痛みですか?あなたは 'json_encode'関数を使いませんか? –
いいえ、私はそれを使用しませんでした。それが痛みだったのです。明らかに私はばかだよ:) – maxedison