[support] Different stylesheet based on path

Jody Cleveland cleveland at winnefox.org
Mon Jun 30 16:15:49 UTC 2008


I just can't seem to get this to work... I've tried this:

function salamander_preprocess_page(&$variables) {
  $front_style = path_to_theme() .'/front-page.css';
  $path_style = path_to_theme() .'/path-'. arg(0) .'.css';

  if (file_exists($front_style) && $variables['is_front']) {
    $include_style = $front_style;
  }
  elseif (file_exists($path_style)) {
    $include_style = $path_style;
  }

  if (isset($include_style)) {
    drupal_add_css($include_style, 'theme', 'all', FALSE);
    $variables['styles'] = drupal_get_css();
  }
}

Cleared the site cache, refreshed pages, and I don't see anything added to
the header. I'm guessing there should be something like:
<link type="text/css" rel="stylesheet" media="all"
href="/sites/beta.menashalibrary.org/themes/salamander/path-xxx.css" />

I also tried this:

  //explode() will split the given string with another string and put the
pieces into an array
  $path_pieces = explode('/', drupal_get_path_alias($_GET['q']));

  //so if your path is /abc/def, $path_pieces is now like Array ( [0] => abc
[1] => def )

  //Therefore, $path_pieces[0] prints 'abc' that you wanted
  print $path_pieces[0];

And, when I view the source, I don't see anything containing node/xxx

So, I'm really stumped. I am supposed to be adding these to template.php of
the theme I'm using, right? Basically, I want all page urls that are teens/*
to use the teens.css file I have in my theme.

- jody


On 6/29/08 5:33 PM, "Cog Rusty" <cog.rusty at gmail.com> wrote:

> For Drupal 6, see also this for how to add stylesheets to a theme's .info file
> 
> http://drupal.org/node/171209
> 
> and this for a more versatile method for adding path-based stylesheets:
> 
> http://drupal.org/node/225868
> 
> Note that arg() always returns the original drupal path (such as
> node/nn) and not the alias, so in some cased you may need to use
> drupal_get_path_alias($_GET['q']) and then split it.
> 
> 
> 
> 
> On Sun, Jun 29, 2008 at 9:15 PM, KOBA | Hans Rossel <info at koba.be> wrote:
>> I think you will always get "node" for arg(0) when the pages under /teens
>> are nodes.
>> So
>> switch (arg(0)) {
>>  case 'teens':
>> will never happen.
>> It works for admin because those pages are no nodes.
>> 
>> To get teens when the path alias is /teens you should use
>> <?php
>>   //explode() will split the given string with another string and put the
>> pieces into an array
>>   $path_pieces = explode('/', drupal_get_path_alias($_GET['q']));
>> 
>>   //so if your path is /abc/def, $path_pieces is now like Array ( [0] => abc
>> [1] => def )
>> 
>>   //Therefore, $path_pieces[0] prints 'abc' that you wanted
>>   print $path_pieces[0];
>> ?>
>> See http://drupal.org/node/227849.
>> 
>> Good luck!
>> 
>> Hans
>> www.koba.be
>> 
>>> 
>>> 
>>> Still not working for me. I placed this at the top of my theme's
>>> template.php:
>>> 
>>> switch (arg(0)) {
>>>  case 'admin':
>>>    drupal_add_css(path_to_theme() .'/admin.css', 'theme', 'all');
>>>    break;
>>>  case 'teens':
>>>    drupal_add_css(path_to_theme() .'/teens.css', 'theme', 'all');
>>>    break;
>>> }
>>> 
>>> The url path I'm trying to change the css for is /teens and the css file
>>> I'm
>>> trying to use is teens.css. I've tried clearing the cache, but when I view
>>> the source of the teens page, there's no reference to teens.css.  Is there
>>> something else I missed? Can I also use this with wildcards? (case
>>> 'teens/*'
>>> so that all pages within that area get that theme)
>>> 
>>> Thank you so much for your time in helping me with this.
>>> 
>>> - jody
>>> 
>>> --
>>> [ Drupal support list | http://lists.drupal.org/ ]
>> 
>> 
>> 
>> 
>> --
>> [ Drupal support list | http://lists.drupal.org/ ]
>> 


-- 
Jody Cleveland

"It's because I take you so seriously that I can't bring myself to believe
in you."
- Julia Sweeney ~ Letting Go of God



More information about the support mailing list