2013-01-04 27 views
10

ile nasıl çalışır? Twig'in AJAX aracılığıyla bir şablonu nasıl yükleyeceğini anlamaya çalışıyorum. Kendi Web sitesinden , bir şablon yüklemek nasıl açıktır (http://twig.sensiolabs.org/doc/api.html)AJAX çağrıları TWIG

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

Fakat AJAX için bu iş nasıl çağırır? Twig'e, sadece index.html'nin bir parçası olan ve tüm sayfayı yeniden yüklemeyen bir şey 'render etmek istediğinizi nasıl söylersiniz? Twig'in tek Ajax örneğine baktım (http://twig.sensiolabs.org/doc/recipes.html), ancak Twig, sayfanın hangi bölümünü değiştirmek istediğinizi nasıl anladığını açıklamıyor. Ajax aramanızın sayfa içerik güncellemelerinde sonuçlandığını varsayarak. Bunun basit bir örneğine ihtiyacım var, Twig'in tarif sayfasında olandan daha fazlası.

1) index.html ve content.html gibi çeşitli dosyalarda index.html ayırın:

+0

O bilmiyor. Sayfanın bir bölümünü güncellemek istiyorsanız, yalnızca güncellenmesi gereken parçaları oluşturun. Bu bazen "kısmi" olarak adlandırılır. – Charles

+0

Beni işaret edebileceğin bir örnek var mı? – user1082428

+0

Kod, no. Prosedür, evet. Ana şablonunuzu [dahil edilebilecek] öğelere ayırın (http://twig.sensiolabs.org/doc/tags/include.html). Bunları ajax istekleri için bağımsız olarak oluşturabilir ve ana sayfaya satır içi ekleyebilirsiniz. Teoride. En son Twig ile çalıştığımdan beri bir süre geçti, bu yüzden bunu bir cevap olarak göndermiyorum. – Charles

cevap

8

bunu başarmak için çeşitli yolları vardır. Daha sonra, content.html dosyasını eklemek için index.html dosyasında include işlevini kullanın. Örneğin jQuery ile ajax isteği yaparsanız :

Örnek:

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

Düzenleme

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

2) sizin index.html içinde request.ajax boole'sini kullanın

{% 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 %} 

Emin değilim İkincisi hakkında, ancak bu belgelere göre hile yapmalıdır. En iyi yol ilk çözümdür, kodunuzu ayırın. Doğrudan şablonda

+0

ile düzenlerim ve Twig var olmayan bir hata attı, bu yüzden sunucu tarafında üretmek zorundayım, doğru mu? Küresel bir değişken değil. – user1082428

+1

Sonunda anladım ve şimdi kendi örneğim çalışıyor. Hepinize teşekkürler! – user1082428

+1

isAjaxRequest() veya bir değişkeni Twig şablonuna nasıl geçirirdiniz? –

9

:

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