2013-01-04 28 views
10

Tôi đang cố gắng hiểu cách Twig có thể tải mẫu thông qua AJAX. Từ trang web của họ, rõ ràng làm thế nào để tải một mẫu (http://twig.sensiolabs.org/doc/api.html)Cách gọi AJAX hoạt động với TWIG

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

Nhưng làm thế nào sẽ làm việc này cho một AJAX gọi? Làm thế nào bạn sẽ nói với Twig rằng bạn muốn 'render' một thứ gì đó chỉ là một phần của index.html ... và không tải lại toàn bộ trang? Tôi đã xem ví dụ Ajax duy nhất của Twig (http://twig.sensiolabs.org/doc/recipes.html), nhưng điều này không giải thích cách Twig biết phần nào của trang bạn muốn thay đổi. Giả sử kết quả cuộc gọi Ajax của bạn trong các cập nhật nội dung trang. Tôi chỉ cần một ví dụ đơn giản về điều này, một cái gì đó nhiều hơn những gì trên trang công thức của Twig.

+0

Nó không biết. Nếu bạn muốn cập nhật một đoạn của trang, thì chỉ hiển thị đoạn cần được cập nhật. Điều này đôi khi được gọi là "một phần". – Charles

+0

Bạn có một ví dụ bạn có thể chỉ cho tôi? – user1082428

+0

Mã, không. Thủ tục, vâng. Phân đoạn mẫu chính của bạn thành những thứ có thể được bao gồm (http://twig.sensiolabs.org/doc/tags/include.html). Bạn có thể độc lập hiển thị chúng cho các yêu cầu ajax và chỉ đưa chúng vào nội tuyến trên trang chính. Về lý thuyết. Đã một thời gian kể từ khi tôi làm việc với Twig cuối cùng, đó là lý do tại sao tôi không đăng câu trả lời này. – Charles

Trả lời

8

Có một số cách để thực hiện điều đó:

1) Tách index.html của bạn trong một số tệp như index.html và content.html. Sau đó, sử dụng hàm include trong index.html để bao gồm content.html.

Ví dụ:

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: Nếu bạn làm theo yêu cầu ajax với jQuery ví dụ:

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

2) Sử dụng các request.ajax boolean trong index.html của bạ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 %} 

Không chắc chắn về điều thứ hai, nhưng điều này nên làm các thủ đoạn phù hợp với tài liệu. Cách tốt nhất là giải pháp đầu tiên, tách mã của bạn.

+0

Tôi đã thử sử dụng request.ajax và Twig đã ném một lỗi mà nó không tồn tại, vì vậy tôi phải tạo ra điều đó ở phía máy chủ, đúng không? Nó không phải là một biến toàn cầu twig. – user1082428

+1

Cuối cùng tôi đã có được nó, và ví dụ của tôi bây giờ hoạt động. Cảm ơn tất cả! – user1082428

+1

Làm thế nào bạn sẽ vượt qua isAjaxRequest() hoặc một biến để Twig mẫu? –

9

trực tiếp trong mẫu:

{% if app.request.isXmlHttpRequest() %} 
    // code if ajax request 
{% else %} 
    // code if not ajax request 
{% endif %} 
Các vấn đề liên quan