13

Twig が AJAX を介してテンプレートをロードする方法を理解しようとしています。彼らのウェブサイトから、テンプレートをロードする方法は明らかです (http://twig.sensiolabs.org/doc/api.html)

echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

しかし、これは AJAX 呼び出しではどのように機能するのでしょうか? index.html の一部にすぎないものを「レンダリング」して、ページ全体をリロードしないことを Twig にどのように伝えますか? 私は Twig の唯一の Ajax の例 (http://twig.sensiolabs.org/doc/recipes.html) を見ましたが、これは Twig がページのどの部分を変更したいかをどのように認識するかを説明していません。Ajax 呼び出しの結果、ページ コンテンツが更新されると仮定します。これの簡単な例が必要なだけで、Twig のレシピ ページにあるもの以上のものが必要です。

4

2 に答える 2

12

テンプレートで直接:

{% if app.request.isXmlHttpRequest() %}
  // code if ajax request
{% else %}
  // code if not ajax request
{% endif %}
于 2014-04-22T02:12:06.593 に答える
11

それを達成するにはいくつかの方法があります:

1) index.html を index.html や content.html などのいくつかのファイルに分割します。次に、index.html のinclude関数を使用して、content.html をインクルードします。

例 :

if(isAjaxRequest()) //try to find the right function here
   echo $twig->render('content.html', array('the' => 'variables', 'go' => 'here'))
else
   echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

編集: たとえば、jQueryでajaxリクエストを行う場合:

$.get('yoururl', function(data) {
  $('#divtoremplace').html(data);
});

2)request.ajaxindex.htmlでブール値を使用します

{% if request.ajax == false %}
<p>My header,  not reloaded with ajax</p>
{% endif %}

<p>My content, reloaded with ajax</p>

{% if request.ajax == false %}
<p>Other content,  not reloaded with ajax</p>
{% endif %}

2番目のものについてはわかりませんが、これはドキュメントに一致するトリックを行うはずです。最善の方法は最初の解決策であり、コードを分離します。

于 2013-01-04T10:08:47.773 に答える