views:

188

answers:

2

I've got a JS file that I want to add to Admin>Add Content>Certain Content type
After looking at template.php and checking out the function theme_preprocess_node
I tried to add the JS through drupal_add_js(...) but no go.
Now, I know that there's a similar question however my case is about adding
a JS file to a certain page and nothing else (better seperation of JS files).

Thanks.
(Drupal 6)

+1  A: 

After adding the drupal_add_js, did you clear the theme/site cache? That should work.

Kevin
+4  A: 

Check out drupal_add_js() in page template not working.

The gist of it is that calling drupal_add_js() (or drupal_add_css()) during preprocess functions is basically to late, as the markup for the js/css inclusion has already been rendered into a variable. To work around this, you need to overwrite the variable again by calling drupal_get_js() after your addition:

function yourThemeName_preprocess_page(&$variables) {
  // Is this a node addition page for the specific content type?
  // TODO: Adjust the content type to your needs
  // NOTE: Will only work for the node add form - if you want your js to be
  // included for edit forms as well, you need to enhance the check accordingly
  if ('node' == arg(0) && 'add' == arg(1) && 'yourContentType' == arg(2)) {
    // Add your js file as usual
    drupal_add_js('path/to/your/file.js', 'theme');
    // Ensure that the addition has any effect by repopulating the scripts variable
    $variables['scripts'] = drupal_get_js();
  }
}

NOTE: Use preprocess_page, not preprocess_node for this, as javascript inclusion should happen in the page template. Also, Kevins hint on the need to rebuild the theme registry still applies (+1).

Henrik Opel
This is correct! I explain how to add in custom js at theme level here also: http://stackoverflow.com/questions/3051765/drupal-customizing-modules-question/3053291#3053291
cam8001
alright however it seems like this JS file would be loaded on every page, whereas I want it to be loaded on a certain page (waste of load time otherwise)
Asaf
@ASAF: You seem to have missed the 'TODO' comment in the example ;)
Henrik Opel
@ASAF: OK, I just added the page checking logic.
Henrik Opel
http://gist.github.com/443992 --> that's the best way :)
Asaf