2013-02-27 16 views
6

Tôi đang cố gắng tìm ra chính xác những gì css được bao gồm bởi các cuộc gọi tiêu chuẩn để currentDesign.writeCssIncludes(pagecontext); tìm thấy trong headlibs.jsp. Các tài liệu chỉ đơn giản nói rằng nó làChính xác những gì currentDesign.writeCssincludes bao gồm?

Convenience method that writes the CSS include strings to the response. 

Nhìn vào những gì nó dường như để làm, nó sẽ bao gồm /etc/designs/currentdesign.css được xây dựng ngoài khơi thiết kế các thành phần css, và /etc/designs/currentdesign/static.css, mà chỉ là một tập tin tĩnh. Nhưng tất cả điều đó sẽ bao gồm?

Cụ thể, điều tôi muốn làm là bao gồm tệp css được xử lý bởi clientLib như một phần thiết kế của tôi. Một cách để làm điều này là để tự xây dựng ra các css bao gồm:

<link rel="stylesheet" href="<%= currentDesign.getPath() %>/myclientlib.css" /> 

Nhưng tôi muốn để điều đó được tạo tự động, do đó các nhà thiết kế của tôi có sự linh hoạt để cấu trúc các tập tin css khác nhau cho các thiết kế khác nhau (ví dụ: , đối với thiết kế "cơ bản", chúng tốt với chỉ một tệp static.css, nhưng đối với thiết kế "ưa thích", chúng muốn sử dụng css LESS và chia nhỏ các tệp một cách chi tiết hơn). Và sẽ rất hữu ích khi đặt thông tin css thiết kế cụ thể với các thành phần mà chúng ảnh hưởng, thay vì sau đó cần phải tách riêng chúng.

Trả lời

2

Bạn có thể sử dụng <cq:includeClientLib> tag, được kết hợp với chủ đề và/hoặc danh mục để trộn và ghép các bit của CSS.

Nhưng bạn có thể thấy nó hơi hạn chế; ví dụ, bạn không thể chỉ định một thuộc tính media. Nếu bạn cần làm điều này, hoặc nhà thiết kế của bạn không cấu trúc CSS theo cách phù hợp với mô hình chủ đề/danh mục, dự phòng của bạn là kỹ thuật bạn đã xác định trong câu hỏi của mình, sử dụng trực tiếp <link>.

Cập nhật

Một câu hỏi xuất sắc về chủ đề! Tôi chỉ nhìn thấy chúng được sử dụng trong đi qua.

Bạn có thể xác định chủ đề bằng cách chỉ thêm thư mục/nút mới dưới /etc/designs/yourproject/clientlibs/themes, dưới dạng anh chị em vào default.

Bạn có thể kéo các clientlib cho một chủ đề với thẻ <cq:includeClientLibs>, có lẽ dưới sự kiểm soát của một số logic có điều kiện. Ví dụ, trong một dự án của tôi, tôi có một chủ đề gọi là authoring mà tôi chỉ muốn áp dụng cho cá thể tác giả; Tôi kéo nó với mã này trong headlibs.jsp:

<c:if test="${ (global['wcmmode'] eq 'EDIT') || (global['wcmmode'] eq 'PREVIEW') }"> 
    <cq:includeClientLib theme="apps.myproject.authoring" /> 
</c:if> 

Tôi chưa thấy bất kỳ tài liệu đó sẽ được áp dụng chủ đề tự động với một cây con đặc biệt của cây nội dung, hoặc dựa trên sự hiện diện của một thẻ.

Có tuyên bố khó hiểu "Tên chủ đề được trích xuất từ ​​yêu cầu". trong tài liệu Adobe, được sao lưu bằng tuyên bố này trong Sling docs, "ThemeResolverFilter Cung cấp Chủ đề cho yêu cầu. Chủ đề được cung cấp dưới dạng thuộc tính yêu cầu". Vì vậy, có lẽ tacking &theme=apps.yourproject.foo vào một chuỗi truy vấn sẽ áp dụng chủ đề đó.

+1

Các danh mục khá đơn giản. Nhưng tôi không thể tìm thấy gì hữu ích về chủ đề - tài liệu chỉ nói "chỉ định thư viện theo chủ đề hoặc không theo chủ đề", nhưng không có gì về cách xác định chủ đề hoặc cách chọn chủ đề cho trang hoặc trang web. –

0

Danh sách tệp CSS dựa trên thuộc tính 'cq: designPath' của trang.

+0

Nó dựa trên 'cq: designPath', nhưng nó bao gồm những gì và nó được xác định như thế nào? – Trevor