Я пытаюсь понять, как Twig может загрузить шаблон через AJAX. С их сайта ясно, как загрузить шаблон (http://twig.sensiolabs.org/doc/api.html)
echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));
Но как это работает для вызова AJAX? Как бы вы сказали Twig, что хотите «визуализировать» что-то, что является лишь частью index.html … и не перезагружать всю страницу? Я посмотрел на единственный пример Ajax Twig (http://twig.sensiolabs.org/doc/recipes.html), но это не объясняет, как Twig знает, какую часть страницы вы хотите изменить. Предполагая, что ваш вызов Ajax приводит к обновлению содержимого страницы. Мне просто нужен простой пример этого, что-то большее, чем на странице рецептов Twig.
Существует несколько способов сделать это:
1) Отделите свой index.html в нескольких файлах, таких как index.html и content.html. Затем используйте функцию include в index.html, чтобы включить 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'));
Изменить: если вы выполняете свой запрос ajax с помощью jQuery, например:
$.get('yoururl', function(data) { $('#divtoremplace').html(data); });
2) Используйте request.ajax
boolean в вашем index.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 %}
Не уверен во втором, но это должно делать трюк в соответствии с документацией. Лучший способ – это первое решение, отделите свой код.
Непосредственно в шаблоне:
{% if app.request.isXmlHttpRequest() %} // code if ajax request {% else %} // code if not ajax request {% endif %}