2011-12-24 22 views
8

Tôi đang làm việc trên một plugin DjangoCMS, trong đó bao gồm một tập tin javascript cho chính nó. Javascript của plugin dựa trên cùng một thư viện mà phần còn lại của trang web thực hiện. Vì vậy, đây là một phần khái niệm về những gì tôi có ngay bây giờ:Cách chính xác để sử dụng Sekizai addtoblock trong một plugin DjangoCMS

Basetemplate.html

{% load cms_tags sekizai_tags and_a_bunch_of_other_stuff %} 
<html> 
... 
<head> 
{% render_block "css" %} 
</head> 
<body> 
... 
{% addtoblock "js" %}[jquery]{% endaddtoblock %} 
{% addtoblock "js" %}[google api, data, more cool stuff like jqplot.]{%endaddtoblock%} 
{% addtoblock "js" %}[my site's library js.] {% endaddtoblock %} 

{% render_block "js" %} 
</body> 
</html> 

Bây giờ trong mẫu nạp cho DjangoCMS tôi tùy chỉnh plugin,

great_calendar_plugin_template.html

{% load sekizai_tags and_a_couple_other_things %} 
{% addtoblock "js" %}[plugin javascript file dependency]{%endaddtoblock %} 
{% addtoblock "js" %}[plugin javascript file]{% endaddtoblock %} 
.... 

Vì vậy, bất kể tôi làm plugin javasc tập tin ript được đặt vào HTML cuối cùng trên JQuery và tất cả các phụ thuộc khác, thay vì bên dưới nơi chúng thuộc về. Tôi đang thiếu gì ở đây?

Cảm ơn.

Trả lời

5

Bạn có thể khắc phục sự cố này bằng cách đặt các lệnh "cơ bản" addtoblock (jquery, v.v ...) ở phía trên cùng của mẫu cơ sở càng tốt. Các bit quan trọng là nó là trước khi bạn gọi và {% placeholder %} thẻ, mà trên hầu hết các trang web có nghĩa là trước khi mở thẻ <body> của bạn.

Một ví dụ mẫu giả:

{% load cms_tags sekizai_tags and_a_bunch_of_other_stuff %} 

{% addtoblock "js" %}[jquery]{% endaddtoblock %} 
{% addtoblock "js" %}[google api, data, more cool stuff like jqplot.]{%endaddtoblock%} 
{% addtoblock "js" %}[my site's library js.] {% endaddtoblock %} 

<html> 
    <head> 
     {% render_block "css" %} 
    </head> 
    <body> 
     {% placeholder "mycontent" %} 

     {% render_block "js" %} 
    </body> 
</html> 
+1

vĩ đại. Và cảm ơn bạn ojii cho DjangoCMS! –

+0

Tôi không chắc chắn nếu điều này đảm bảo một bài viết câu hỏi, nhưng khi người dùng quản trị được đăng nhập, các tập tin adminmedia js được thêm vào khối 'js', vì vậy jquery được định nghĩa lại (mà thổi jquery-ui và các plugin jquery của tôi từ libs của tôi). Có cách nào để đảm bảo rằng adminmedia thay vào đó được hiển thị ở đầu khối không? –

+0

Cuối cùng tôi đã xác định rằng điều tốt nhất cho tôi là cài đặt lại django-cms với một chút tinh chỉnh trong [toolbar.html] (https://github.com/divio/django-cms/blob/develop/cms/templates/ cms/toolbar/toolbar.html) tập tin, để có điều kiện ghi trong thẻ JavaScript javascript script tùy thuộc vào việc $ đã được xác định. Tôi đọc rằng thanh công cụ cms đang trong quá trình tái phát triển, tôi hy vọng có một bản nâng cấp trước khi tôi khởi chạy thứ này! –

Các vấn đề liên quan