views:

223

answers:

1

I'm looking for a way to force drupal to use 1.4 on specific pages.

This is the same as this old question: http://stackoverflow.com/questions/2842792/drupal-jquery-1-4-on-specific-pages

It look me a while to try the answer which I marked correct. But because I'm new to module dev overall I couldn't figure it out based on the answer.

The code from that answer looked like this:

/**
 * Implementation of hook_theme_registry_alter().
 * Based on the jquery_update module.
 *
 * Make this page preprocess function runs *last*,
 * so that a theme can't call drupal_get_js().
 */
function MYMODULE_theme_registry_alter(&$theme_registry) {
  if (isset($theme_registry['page'])) {
    // See if our preprocess function is loaded, if so remove it.
    if ($key = array_search('MYMODULE_preprocess_page', 
      $theme_registry['page']['preprocess functions'])) {
      unset($theme_registry['page']['preprocess functions'][$key]);
    }
    // Now add it on at the end of the array so that it runs last.
    $theme_registry['page']['preprocess functions'][] = 'MYMODULE_preprocess_page';
  } 
}

/**
 * Implementation of moduleName_preprocess_hook().
 * Based on the jquery_update module functions.  *
 * Strips out JS and CSS for a path.
 */
function MYMODULE_preprocess_page(&$variables, $arg = 'my_page', $delta=0) {

  // I needed a one hit wonder. Can be altered to use function arguments
  // to increase it's flexibility.
  if(arg($delta) == $arg) {
    $scripts = drupal_add_js();
    $css = drupal_add_css();
    // Only do this for pages that have JavaScript on them.
    if (!empty($variables['scripts'])) {
      $path = drupal_get_path('module', 'admin_menu');
      unset($scripts['module'][$path . '/admin_menu.js']);
      $variables['scripts'] = drupal_get_js('header', $scripts);
    }
    // Similar process for CSS but there are 2 Css realted variables.
    //  $variables['css'] and $variables['styles'] are both used.
    if (!empty($variables['css'])) {
      $path = drupal_get_path('module', 'admin_menu');
      unset($css['all']['module'][$path . '/admin_menu.css']);
      unset($css['all']['module'][$path . '/admin_menu.color.css']);
      $variables['styles'] = drupal_get_css($css);
    }
  }
}

I need the jquery_update 1.3.2 to be unset on the node-types of 'blog' and 'video'. Can someone help me out?

Thank you.

+2  A: 

In the MYMODULE_preprocess_page function, the $scripts variable contains an array with the information about all JavaScript that will be added to the page.

If you want to remove a JS file from the page, you should remove its entry from the $scripts array (and then update $variables['scripts']). That's what the unset function is doing .

If the jQuery you're trying to remove is the one that's shipped with Drupal, you can remove it with:

unset($scripts['core']['misc/jquery.js']);

Otherwise, you'll have to print_r the $scripts var in order to find the entry you need to remove.

Vinicius Pinto
How do you check for content type so you know where to unset?Right now it works via arg.Thanks.
Mark
Not sure if it's the right way, but I'd do it by querying the 'node' table for the 'type' field, based on the nid (from $_GET['q']).
Vinicius Pinto