2013-01-04 28 views
10

Sto cercando di capire come Twig può caricare un modello tramite AJAX. Dal loro sito, è evidente come caricare un modello (http://twig.sensiolabs.org/doc/api.html)Come funzionano le chiamate AJAX con TWIG

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

Ma come sarebbe questo lavoro per un AJAX chiamare? Come diresti a Twig che vuoi "renderizzare" qualcosa che è solo una parte di index.html ... e non ricaricare l'intera pagina? Ho esaminato l'unico esempio Ajax di Twig (http://twig.sensiolabs.org/doc/recipes.html), ma questo non spiega come Twig sappia quale parte della pagina si desidera modificare. Supponendo che la tua chiamata Ajax risulti in aggiornamenti del contenuto della pagina. Ho solo bisogno di un semplice esempio di questo, qualcosa di più di quello che è sulla pagina della ricetta di Twig.

+0

non sa. Se si desidera aggiornare un blocco della pagina, eseguire solo il rendering del blocco che deve essere aggiornato. Questo è talvolta chiamato "parziale". – Charles

+0

Hai un esempio a cui potresti indirizzarmi? – user1082428

+0

Codice, no. Procedura, sì. Segmenta il tuo modello principale in cose che possono essere [incluse] (http://twig.sensiolabs.org/doc/tags/include.html). Puoi renderli in modo indipendente per richieste Ajax e includerli semplicemente in linea nella pagina principale. In teoria. È passato un po 'di tempo dall'ultima volta che ho lavorato con Twig, motivo per cui non sto postando questa risposta come risposta. – Charles

risposta

8

Ci sono diversi modi per ottenere che:

1) separare la vostra index.html in diversi file come index.html e content.html. Quindi utilizzare la funzione include in index.html per includere content.html.

Esempio:

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: Se fate la vostra richiesta Ajax con jQuery per esempio:

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

2) Utilizzare la request.ajax booleana nel vostro 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 %} 

Non sicuro riguardo il secondo, ma questo dovrebbe fare il trucco in base alla documentazione. Il modo migliore è la prima soluzione, separare il codice.

+0

Ho provato a utilizzare request.ajax e Twig ha generato un errore che non esiste, quindi devo generarlo dal lato server, corretto? Non è una variabile globale ramoscello. – user1082428

+1

Ho finalmente capito, e il mio esempio ora funziona. Ringrazia tutti! – user1082428

+1

Come si passa isAjaxRequest() o una variabile al modello Twig? –

9

direttamente nel modello:

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