2009-09-11 9 views
7

Necesito usar drupal_add_css para llamar hojas de estilo a páginas únicas de Drupal 6. No quiero editar la hoja de estilo del tema principal, ya que habrá un conjunto de páginas individuales que necesitan estilos completamente nuevos: la hoja principal sería enorme si la incluyese allí.drupal_add_css no funciona

Mi solución fue editar la página en modo editor de PHP y hacer esto:

<?php 
drupal_add_css("/styles/file1.css", "theme"); 
?> 

<div id="newPageContent">stuff here in html</div> 

Pero cuando veo fuente, no hay nada allí! Ni siquiera un enlace CSS roto o algo así, simplemente se niega a agregar la hoja de CSS al paquete de CSS puesto en el encabezado de la página. no parecen

Variaciones para trabajar ya sea:

drupal_add_css($path = '/styles/file1.css', $type = 'module', $media = 'all', $preprocess = TRUE) 

Mi cabecera plantilla se parece a esto, yo no he cambiado nada de la otra que la adición de un JavaScript personalizado predeterminado.

<head> 
    <?php print $head ?> 
    <title><?php print $head_title ?></title> 
    <?php print $styles ?> 
    <?php print $scripts ?> 
    <script type="text/javascript" src="<?php print base_path() ?>misc/askme.js"></script>  
    <!--[if lt IE 7]> 
     <?php print phptemplate_get_ie_styles(); ?> 
    <![endif]--> 
</head> 

¿Por qué esta función no funciona?

+1

Si lo tiene funcionando, ¿ha cambiado la configuración de almacenamiento en caché? –

Respuesta

2

La respuesta fue mucho para usar el módulo CSS Injector - ¡gran pequeño complemento!

Aquí es un extracto de la página del proyecto:

Permite a los administradores inyectan CSS en el resultado de la página basado en reglas configurables. Es útil para agregar ajustes de CSS simples sin modificar el tema oficial de un sitio. El CSS se agrega usando la función drupal_add_css() estándar de Drupal y respeta el almacenamiento en caché de páginas, etc. El brach 2.x aprovecha CTools para que CSS se pueda incluir con cambios de características (es decir, el CSS que mejora el aspecto de una Vista se puede empaquetar con la Vista)

4

Esta función no funciona en plantillas. La razón es que la variable $ styles que contendrá todo el html de la hoja de estilos ya se habrá generado en este punto, por lo que drupal_add_css no funcionará ya que se agrega a eso. si quieres hacer esto en su tema, es probable que tenga que añadir el archivo CSS manualmente

<link rel="stylesheet" ... /> 

La otra forma sería utilizar drupal_add_css en un módulo, pero puede que tenga dificultades para añadir el css correcta archivos en las páginas que desea.

+0

realmente? Lo hice hace una semana en otro sitio: o - Edité drupal_add_css en una página en modo PHP. – MrFidge

+0

Creo que tiene razón en cuanto a por qué la función no funcionará, pero está mal que no se puede hacer en la capa de tematización. Ver mi respuesta –

+0

@Jeremy Estaba un poco indeciso si podías o no lograr que funcionara de esa manera, es por eso que dije probablemente. Pero usar preprocess_page no ayudará mucho si quieres hacerlo por página. También podrías hacerlo en un módulo. – googletorp

7

No está muy claro dónde está seleccionando la plantilla que tiene en su ejemplo. Si lo está seleccionando de un módulo, puede usar drupal_add_css en el módulo en lugar de la plantilla.

Si tiene su propio tema, puede usar template_preprocess_page y poner la lógica allí para agregar el CSS relevante (también puede usarlo para seleccionar la plantilla que va a usar).

+0

Hola, lo siento mucho, pero tengo absolutamente esto trabajando directamente desde una página la otra semana. Pensé "oh genial, eso es fácil" y construí el resto de mi sitio. Ahora vuelvo a implementarlo y no está funcionando. Típico: P – MrFidge

+8

Otra nota para esto, si usa template_preprocess_page con drupal_add_css() asegúrese de agregar forzarlo en la matriz de estilos de la siguiente manera: 'drupal_add_css (path_to_theme()." /css/page.css "," theme "); \t $ vars ['styles'] = drupal_get_css(); ' – joelpittet

3

Es posible usar drupal_add_css() dentro de su archivo template.php; this page tiene un buen ejemplo de cómo hacer precisamente eso.

0

Gracias por el enlace, wyrmmage. Eso es muy útil. Creo que el resto del código en la página es innecesario. Probablemente solo los necesite ya que drupal 6 ya verifica automáticamente la existencia del archivo:

drupal_add_css(path_to_theme() . '/css/yourcss.css', 'theme'); 
// Add the following to regenerate $styles. 
// This is needed for template_preprocess_page() since css is already generated at this point. 
$variables['styles'] = drupal_get_css(); 
1

Este código dentro de la plantilla.php funciona para mí:

function alagna_preprocess_page(&$vars) { 
     drupal_add_css(path_to_theme() . '/header_1.css', 'theme'); 
     $vars['css'] = drupal_add_css(); 
     $vars['styles'] = drupal_get_css(); 
} 

explicó:

  1. alagna es el nombre del tema
  2. header_1.css es el archivo css necesario.
6

he notado algo raro y podría arreglar el problema:

drupal_add_css(drupal_get_path('theme','themname') . '/working.css','module' ,'all' , false); 

drupal_add_css(drupal_get_path('theme','themname') . '/path/to/folder/notworking.css','module' ,'all' , false); 

La primera se trabajará ebcause el estilo que en su mayor parte a la carpeta La segunda línea no funcionará porque el estilo es en una sub carpeta!

Editar:

creo que no funcionó porque no he escrito la ruta del archivo de estilo correctamente: es tan haga caso omiso de mi respuesta

drupal_add_css(drupal_get_path('theme','test') . '/pages/subpage/style.css','theme'); 

está trabajando

1

drupal_add_css es esperando una ruta relativa a la ruta base, mientras que drupal_get_path no devuelve la ruta relativa a la ruta base.

global $base_path;
drupal_add_css($base_path . drupal_get_path('module/theme','name') . "/styles/file1.css", "module/theme");

se puede elegir entre el módulo y el tema en consecuencia.

+1

No necesita $ base_path, ¿no? – jlstrecker

0

probar este common.inc drupal_get_css($css = NULL)

Parámetros

$ css: (opcional) Una serie de archivos CSS. Si no se proporciona una matriz, en su lugar se usa la matriz de hojas de estilo predeterminada.

$css = $vars['css']; 
// unset the system css files 
$unset_css = array 
    'modules/system/system.css', 
    'modules/system/system-menus.css', 
); 

foreach($unset_css as $css_f) { 
    if(isset($css['all']['module'][$css_f])) { 
     unset($css['all']['module'][$css_f]); 
    } 
} 

// add css 
$css['all']['theme'][drupal_get_path('theme', 'openpublish_theme') . '/css/style.css'] = true; 
$vars['styles'] = drupal_get_css($css);