2011-08-05 29 views
25

Chúng tôi đang xây dựng một trang web mới bằng Symfony2 và Assetic trông rất hứa hẹn về quản lý tài nguyên, đặc biệt để kết hợp và xử lý tất cả các tệp js/css với nhau một cách tự động.Kết hợp Tài nguyên Assetic trên các mẫu kế thừa

Chúng tôi có một số tài nguyên được sử dụng rộng rãi trên trang web và một số tài nguyên cụ thể cho các trang cụ thể. Chúng tôi cũng sẽ sử dụng phương pháp tiếp cận ba tầng được kế thừa cho các mẫu.

Có cách nào để kết hợp hai khái niệm, tức là tự động thêm tài nguyên bổ sung trong mẫu được kế thừa sao cho chúng là tất cả đầu ra dưới dạng một tài nguyên?

Trả lời

17

Thật không may, bạn không thể :(

Bạn không có thể ghi đè các thẻ assetic để thêm tài sản hơn tuy nhiên bạn có thể làm như sau:.

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Sau đó, khi bạn mở rộng mẫu :

{% block stylesheets %} 
    {% stylesheets 'your_old_assets_here' 'your_new_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Trong khối ghi đè, bạn có thể sử dụng parent() để bao gồm các khối phụ huynh, nhưng bạn sẽ có 2 liên kết sau đó, bạn không thể kết hợp các thẻ assetic cũ với một cái mới.

Tuy nhiên, bạn có thể tạo macro ghép nối để tạo thẻ hỗ trợ {% stylesheets%} với nội dung cũ của mình và như đầu vào sẽ chứa vị trí nội dung mới.

Thông tin thêm here.

+0

Drat, I nghi ngờ nhiều. Cảm ơn con trỏ tới các macro thập phân. –

+0

Không phải Assetic chạy đầu tiên? –

+0

Tôi nghĩ rằng đây là một hành vi đúng: kết hợp các tài sản phải nằm trên một trang/tuyến đường không thông minh mà tôi nghĩ. Đây chính là hành vi mà tôi mong muốn. Vì vậy, cảm ơn bạn đã giải pháp về cách chèn tệp chỉ cho một tuyến đường duy nhất! :) – Aerendir

23

Bạn thực sự có thể làm như sau:

Trong layout.html.twig (hoặc bất kỳ cách bố trí của bạn là)

{% block stylesheets %} 
    {% stylesheets 'your_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Và trong bất kỳ mẫu nào mà kéo dài mà bố trí:

{% block stylesheets %} 
    {{ parent() }} 
    {% stylesheets 'additional_assets_here' %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
    {% endstylesheets %} 
{% endblock %} 

Sau đó, bạn sẽ không cần phải nhập lại tất cả các tài sản cũ theo đề xuất của Nemanja Niljkovic

+0

Có, nhưng (trích dẫn từ câu trả lời của Nemana Niljkovic): "nhưng bạn sẽ có 2 liên kết khi bạn không thể kết hợp thẻ cũ với thẻ mới" –

+28

Không có nhiều điểm trong việc kết hợp các tệp mới vào tập hợp các tệp định kiểu/tập lệnh từ cha mẹ, vì điều đó sẽ đánh bại mục đích lưu trong bộ nhớ cache vì bạn có thể có nhiều trang như vậy với tập hợp tệp bổ sung của riêng mình ... kết hợp chúng có nghĩa là tập hợp các tệp kết hợp mới cho * mọi trang * ! Nói tạm biệt với bộ nhớ cache của trình duyệt. Do đó, thực sự tốt hơn nên có một tập hợp các tệp kết hợp riêng biệt cho các trang có các tệp bổ sung của riêng tầng, do đó, ít nhất tập hợp kiểu stylesheets/script chung sẽ luôn được lưu trữ – Populus

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