Pregunta

Necesito usar drupal_add_css para llamar a las hojas de estilo en solo 6 páginas de Drupal. No quiero editar la hoja de estilos del tema principal, ya que habrá un conjunto de páginas individuales que necesitarán estilos completamente nuevos. La hoja principal sería masiva si la coloco allí.

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 la fuente, no hay nada allí! Ni siquiera un enlace CSS roto o algo así, simplemente se niega a agregar la hoja CSS al paquete CSS colocado en el encabezado de la página.

Las variaciones tampoco parecen funcionar:

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

El encabezado de mi plantilla tiene este aspecto, no he cambiado nada del valor predeterminado además de agregar un JavaScript personalizado.

<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?

¿Fue útil?

Solución 5

La respuesta fue muy útil para usar el módulo Inyector de CSS : ¡gran pequeño complemento!

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

  

Permite a los administradores inyectar CSS en la salida de la página según las reglas configurables. Es útil para agregar ajustes simples de CSS 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 la página, etc. El brach 2.x aprovecha CTools para que el CSS pueda incluirse con los cambios de Característica (es decir, el CSS que mejora la apariencia de una Vista se puede empaquetar con la Vista). ).

Otros consejos

No está del todo claro dónde está seleccionando la plantilla que tiene en su ejemplo. Si lo seleccionas de un módulo, puedes 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 en allí para agregar el CSS relevante (también puede usarlo para seleccionar la plantilla a usar).

He notado algo extraño y podría solucionar tu 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 );

El primero funcionará porque el estilo está en la carpeta principal. ¡La segunda línea no funcionará porque el estilo está en una subcarpeta!

Editar:

Creo que no funcionó porque no escribí correctamente la ruta del archivo de estilo: S, por favor, ignora mi respuesta

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

está funcionando

Esta función no funcionará en plantillas. La razón es que la variable $ styles que contendrá todo el html de la hoja de estilo ya se habrá generado en este punto, por lo que drupal_add_css no funcionará, ya que se suma a eso. Si desea hacer esto en su tema, probablemente tendría que agregar el archivo css manualmente

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

La otra forma sería usar drupal_add_css en un módulo, pero podría tener dificultades para agregar los archivos css correctos en las páginas que desee.

Es posible usar drupal_add_css () dentro de tu archivo template.php; esta página tiene un buen ejemplo de cómo hacerlo.

Este código dentro de template.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();
} 

explicado:

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

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

$ base_path global;
drupal_add_css ($ base_path. drupal_get_path ('módulo / tema', 'nombre'). " /styles/file1.css" ;, " módulo / tema ");

Puedes elegir entre el módulo y el tema en consecuencia.

Gracias por el enlace, wyrmmage. Eso es muy útil. Creo que el resto del código en la página es innecesario. Probablemente solo necesite esto 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(); 

prueba esto common.inc drupal_get_css ($ css = NULL)

Parámetros

$ css: (opcional) Una matriz 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top