2013-02-27 31 views
6

Sto cercando di capire esattamente quale css è incluso nella chiamata standard a currentDesign.writeCssIncludes(pagecontext); trovata in headlibs.jsp. La documentazione afferma semplicemente che si tratta diChe cosa include esattamente currentDesign.writeCssincludes?

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

Guardando a quello che sembra da fare, includerà /etc/designs/currentdesign.css che è costruito al largo della progettazione dei componenti css, e /etc/designs/currentdesign/static.css, che è solo un file statico. Ma questo è tutto ciò che è incluso?

In particolare, ciò che mi piacerebbe fare è includere un file css elaborato da clientLib come parte del mio progetto. Un modo per farlo è quello di costruire manualmente il css includono:

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

ma preferisco lasciare che vengono generati automaticamente, in modo che i miei progettisti hanno la flessibilità di strutturare i file CSS in modo diverso per i diversi disegni (vale a dire , per il design "base" vanno bene solo con un file static.css, ma per il design "fantasioso" vogliono usare LESS css e suddividere i file in modo più granulare). E sarebbe utile inserire informazioni specifiche sul design con i componenti che influenzano, piuttosto che doverle separare.

risposta

2

È possibile utilizzare lo <cq:includeClientLib> tag, combinato con temi e/o categorie, per combinare bit di CSS.

Ma potresti trovarlo un po 'limitante; per esempio, non puoi specificare un attributo multimediale. Se hai bisogno di farlo, o se i tuoi progettisti non strutturano i loro CSS in un modo che rientri nel modello di temi/categorie, il tuo fallback è la tecnica che hai identificato nella tua domanda, usando direttamente <link>.

Aggiornamento

Un'eccellente domanda su temi! Li ho visti solo usati di passaggio.

È possibile definire un tema aggiungendo semplicemente una nuova cartella/nodo sotto /etc/designs/yourproject/clientlibs/themes, come un fratello su default.

È possibile inserire i client per un tema con il tag <cq:includeClientLibs>, magari sotto il controllo di alcune regole condizionali. Ad esempio, in uno dei miei progetti ho un tema chiamato authoring che voglio solo applicare all'istanza dell'autore; Io lo tiro con questo codice in headlibs.jsp:

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

non ho visto alcuna documentazione che si applicherebbe automaticamente a tema per una particolare sotto-albero dell'albero contenuti, o in base alla presenza di un tag.

Esiste un'asserzione criptica "Il nome del tema viene estratto dalla richiesta". nei documenti Adobe, che è supportato da questa istruzione in Sling docs, "ThemeResolverFilter Fornisce il tema per la richiesta. Il tema viene fornito come attributo di richiesta." Pertanto, se si applica lo &theme=apps.yourproject.foo a una stringa di query, verrà applicato tale tema.

+1

Le categorie sono abbastanza semplici. Ma non riesco a trovare nulla di utile sui temi: i documenti dicono semplicemente "specifica una libreria tematica o non a tema", ma nulla su come definire un tema o su come selezionare un tema per una pagina o un sito. –

0

L'elenco di file CSS è basato sulla proprietà 'cq: designPath' della pagina.

+0

È basato su 'cq: designPath', ma cosa include e come viene determinato? – Trevor

Problemi correlati