Estoy limpiando mis grandes hojas de estilo locas (posiblemente pertinentes para una pregunta futura) y me pregunto la mejor manera de agregar CSS personalizado a un nodo o página específicos.
En particular, la página de inicio de mi sitio de trabajo es una Página de Panel y tiene muchos estilos diferentes. En este momento, el CSS solo se incluye con la hoja de estilo del tema principal.
¿Hay alguna manera de decir, "si este es el nodo Foo, entonces agregue foo.css"? ¿ CSS Injector es lo que estoy buscando?
Yo podría estar interesado en generalizar esto a otros nodos / secciones / etc, pero por el momento sólo quiero manejar esto un artículo.
Lo que terminé haciendo.
Estoy usando un subtema Zen, y descubrí en realidad leyendo a través de template.php que hay algún código comentado para incluir hojas de estilo condicionales. El siguiente código hizo exactamente lo que necesitaba:
if (drupal_is_front_page()) {
drupal_add_css(path_to_theme() . "/foo.css", 'theme','all');
}
(Línea 80 en un archivo Zen template.php, FWIW).
page--front.tpl.php
ypage.tpl.php
Respuestas:
Este es el tipo de cosas que haría por código, pero eso es porque esa es la forma en que ruedo.
En template.php querrás algo como:
Reemplace foo con valores relacionados con su propio código.
fuente
if(drupal_is_front_page()) {
lugar deif(drupal_get_path_alias [etc]
?$vars['#node']->nid == $nid
verificación si lo desea.$vars['elements']['#node']->nid
en la búsqueda de alias. No hay#node
raíz envars
el último Drupal 7 por lo que parece.Puede echar un vistazo al módulo Código por nodo . También aparece en esta publicación de blog .
fuente
Cree un contexto para su página / sección y luego use el módulo de Context Assets para cargar CSS y / o JavaScript para ese contexto dado.
Contexto:
Contexto Agregar activos:
fuente
Si se trata de una pequeña cantidad de CSS, ¿tal vez considere hacer sus selectores de CSS basados en el nodo e incluir el CSS en el CSS de su tema? Drupal 7 proporciona el selector body.page-node-NODEID, y Zen para Drupal 6 proporciona clases CSS de cuerpo similares.
fuente
Puede crear un módulo personalizado y usar hook_preprocess_node () para cargar hojas de estilo selectivamente en función de la identificación del nodo.
Aquí hay un ejemplo:
Reemplace MYMODULE con el nombre de su módulo y reemplace MYTHEME con el nombre del tema que contiene el archivo css.
fuente
Si el criterio para el cual agregar un estilo CSS depende de algunas propiedades de un nodo, entonces lo implementaría
MYTHEME_preprocess_node(&$variables)
; uno de los valores pasados a la función es$variables['node']
(para notar que no lo es$variables['#node']
).Si los criterios no dependen de ninguna propiedad de nodo, entonces lo implementaría
MYTHEME_preprocess_page(&$variables)
;$variables['node']
contiene un objeto de nodo, si la página que se muestra es una página de nodo. En Drupal 6, la función de proceso también se obtiene$variables['is_front']
, pero en Drupal 7 no se pasa la misma variable; si necesita saber si la página es la portada, debe usarladrupal_is_front_page()
.fuente
Para una forma de hacerlo basada en el administrador, miraría el módulo CSS . Agrega un campo donde puede agregar CSS a las páginas
node/add
ynode/edit
.CSS:
fuente
CodePerNode es excelente, pero CSS Injector es más sencillo de instalar (no se necesitan bibliotecas). El módulo permite al administrador de contenido agregar dinámicamente CSS a páginas específicas, sin tocar el código PHP o los archivos INFO. Las instalaciones de 15777 no pueden estar equivocadas: esta es una prueba social de que este módulo funciona. El CSS también se almacena en caché con el sistema de almacenamiento en caché normal.
fuente
Como ya está utilizando paneles, puede ser más fácil agregar su CSS como estilo de panel para cada región de su panel de página de inicio. Puede definir marcas personalizadas allí y reutilizarlas en su sitio.
También puede ir a la sección General de la regla de variantes del administrador de página para su página de inicio. Aquí hay una sección para agregar ID de CSS y reglas solo para el panel actual.
Nota: todo esto está en D7, por lo que podría ser que este enfoque sea mejor soportado por los paneles que en versiones anteriores.
fuente
/ * Un ejemplo que usa el tema bartik para agregar CSS basado en el tipo de contenido * /
fuente
Intente agregar esto en su archivo 'template.php':
Reemplace 'mytheme' con el nombre de su directorio de temas y '/css/front.css' con la ruta donde está su archivo CSS.
Para desarmar el archivo 'front.css' de otras páginas, intente agregarlo a 'template.php':
Nuevamente, reemplace 'mytheme' con el nombre de su directorio de temas.
Si necesita desarmar 'styles.css' de la página principal, simplemente combine estos dos códigos.
Supongamos que necesita 'front.css' sin 'styles.css' en la página principal y 'style.css' sin 'front.css' en todas las demás páginas. El código se verá así:
Además, reemplace 'mytheme'.
Espero que esto sea útil.
fuente
Hubiera omitido tocar template.php por completo y simplemente agregar otro elemento en el archivo .info de su tema
Digamos que su hoja de estilo está adentro
css/foo.css
.Así es como se vería su archivo theme_name.info:
Entonces se beneficiará de tenerlo en caché con las principales hojas de estilo, y dado que supongo que esto es para su página de inicio, tendría sentido.
fuente
Aparte del enfoque de Drupal, cuando solo necesita un pequeño fragmento de CSS dentro de su cuerpo HTML5, tiene el atributo de alcance CSS. Ver https://stackoverflow.com/a/4607092/195812
Esta solución le ahorrará editar código e instalar más módulos.
fuente
Puede imprimir el nodo de la página en la etiqueta del cuerpo
Entonces puedes restringir
Esto es útil para cambios rápidos menores
fuente