[Обсуждается] Переопределить js

Главные вкладки

Аватар пользователя molp molp 4 сентября 2012 в 23:31

Подскажите как правильно переопределить код js модуля.
К примеру мне нужно отключить скрипт модуля Ubercart который в блоке корзины сворачивает и разворачивает ее в зависимости от того есть ли в ней товары.
Можно вырубить код в файле модуля, но как это сделать в соответствии с правилами?

Комментарии

Аватар пользователя Orion76 Orion76 4 сентября 2012 в 23:50

Пример "отключения" js и css файлов..
Можно вставить в template.php, соответственно заменив MYMODULE на имя темы:

<?php
/**
 * 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);
    }
  }
}
?>
Аватар пользователя molp molp 5 сентября 2012 в 19:46

Чтото не получается.
Я попытался исключить лишнее, возможно в этом дело? Или в путях?

<?php
    
function mytheme_preprocess_page(&$variables) {
        
$scripts drupal_add_js();
        if (!empty(
$variables['scripts'])) {
          
$path drupal_get_path('module''uc_cart');
          unset(
$scripts['module'][$path '/uc_cart_block.js']);
          
$variables['scripts'] = drupal_get_js('header'$scripts);
        }
    }
?>
Аватар пользователя molp molp 5 сентября 2012 в 19:56

Еще один нерабочий вариант:

<?php
    
function mytheme_preprocess_page(&$vars) {
      
$scripts drupal_add_js();
      unset(
$scripts['module']['sites/all/modules/ubercart/uc_cart/uc_cart_block.js']);
      
$vars['scripts'] = drupal_get_js('header'$scripts); 
      return 
$vars;
    };
?>
Аватар пользователя drupby drupby 5 сентября 2012 в 20:05
/**
 * Implements hook_js_alter().
 */

function mytheme_js_alter(&$scripts) {
  // print_r($scripts) или dsm($scripts) чтобы проверить ключи массива $scripts
  unset($scripts['module']['sites/all/modules/ubercart/uc_cart/uc_cart_block.js']);
 
}
Аватар пользователя Orion76 Orion76 5 сентября 2012 в 20:20

в $scripts['module'] есть элемент с индексом 'sites/all/modules/ubercart/uc_cart/uc_cart_block.js' ?
если нет.. попробуйте хук mytheme_preprocess_block

Аватар пользователя molp molp 5 сентября 2012 в 21:44

А что если не выводит инфу dsm($variables)?
Код:

<?php
    
function mymodule_preprocess_page(&$variables) {
        
$scripts drupal_add_js();
        if (!empty(
$variables['scripts'])) {
          
$path drupal_get_path('module''uc_cart');
          unset(
$scripts['module'][$path '/uc_cart_block.js']);
          
$variables['scripts'] = drupal_get_js('header'$scripts);
        }
        
dsm($variables);
    };
?>

Пробую и function mymodule_preprocess_page(&$variables) и mytheme_mymodule_preprocess_page(&$variables) и mytheme_preprocess_page(&$variables) - пусто.

Аватар пользователя molp molp 5 сентября 2012 в 22:00

Установлен и включен.
Так работает:

<?php
    
function mytheme_js_alter(&$scripts) {
        
dsm($scripts);
        unset(
$scripts['sites/all/modules/ubercart/uc_cart/uc_cart_block.js']);
    }
?>
Аватар пользователя Orion76 Orion76 5 сентября 2012 в 22:01

возможно js подключается при темизации блока Корзины... поэтому в mytheme_preprocess_page его может еще не быть..

попробуйте mytheme_preprocess_block