2013-01-04 14 views
10

Próbuję zrozumieć, w jaki sposób Twig może załadować szablon za pośrednictwem AJAX. Z ich strony internetowej, to jest jasne, w jaki sposób załadować szablon (http://twig.sensiolabs.org/doc/api.html)W jaki sposób połączenia AJAX działają z TWIG

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

Ale jak ta praca dla AJAX nazwałbym? Jak powiedziałbyś Twigowi, że chcesz "renderować" coś, co jest tylko częścią index.html ... i nie przeładować całej strony? Spojrzałem na jedyny przykład Ajaksu Twig (http://twig.sensiolabs.org/doc/recipes.html), ale to nie wyjaśnia, jak Twig wie, jaka część strony chcesz zmienić. Zakładając, że twoje połączenie z Ajaxem powoduje aktualizacje zawartości strony. Po prostu potrzebuję tego prostego przykładu, czegoś więcej niż na stronie przepisu Twig.

+0

Nie wiem. Jeśli chcesz zaktualizować fragment strony, a następnie renderuj porcję, która wymaga aktualizacji. Jest to czasami określane jako "częściowe". – Charles

+0

Czy masz przykład, na który możesz wskazać? – user1082428

+0

Kod, nie. Procedura, tak. Podziel swój główny szablon na rzeczy, które można [uwzględnić] (http://twig.sensiolabs.org/doc/tags/include.html). Możesz niezależnie renderować je dla żądań ajaxowych i po prostu umieszczać je w linii na stronie głównej. W teorii. Minęło trochę czasu odkąd ostatnio pracowałem z Twigiem, dlatego nie zamieszczam tego jako odpowiedzi. – Charles

Odpowiedz

8

Istnieje kilka sposobów, aby to osiągnąć:

1) oddzielić index.html w kilku plików jak index.html i content.html. Następnie użyj funkcji include w pliku index.html, aby dołączyć content.html.

Przykład:

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')); 

Edit: Jeśli wykonać żądania ajax z jQuery na przykład:

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

2) Użyj request.ajax logiczną w 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 %} 

Nie jestem pewien o drugim, ale powinno to załatwić sprawę z dokumentacją. Najlepszym sposobem jest pierwsze rozwiązanie, oddziel swój kod.

+0

Próbowałem używać request.ajax i Twig rzucił błąd, że nie istnieje, więc muszę wygenerować to po stronie serwera, prawda? To nie jest globalna zmienna gałązka. – user1082428

+1

W końcu to rozumiem, a mój własny przykład działa. Dziękuje wszystkim! – user1082428

+1

Jak można przekazać isAjaxRequest() lub zmienną do szablonu Twig? –

9

bezpośrednio w szablonie:

{% if app.request.isXmlHttpRequest() %} 
    // code if ajax request 
{% else %} 
    // code if not ajax request 
{% endif %} 
Powiązane problemy