Подскажите как правильно переопределить код js модуля.
К примеру мне нужно отключить скрипт модуля Ubercart который в блоке корзины сворачивает и разворачивает ее в зависимости от того есть ли в ней товары.
Можно вырубить код в файле модуля, но как это сделать в соответствии с правилами?
Комментарии
?
Пример "отключения" js и css файлов..
Можно вставить в template.php, соответственно заменив MYMODULE на имя темы:
<?php
// I needed a one hit wonder. Can be altered to use function arguments
/**
* 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) {
// 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);
}
}
}
?>
Чтото не получается.
Я попытался исключить лишнее, возможно в этом дело? Или в путях?
<?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);
}
}
?>
Еще один нерабочий вариант:
<?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;
};
?>
* 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']);
}
Вариант mytheme_js_alter работает!
Как раз нашел (http://stackoverflow.com/questions/4902456/drupal-unset-javascript-from-...) и тестировал, когда получил коммент от drupby. Спасибо!
в $scripts['module'] есть элемент с индексом 'sites/all/modules/ubercart/uc_cart/uc_cart_block.js' ?
если нет.. попробуйте хук mytheme_preprocess_block
А что если не выводит инфу 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) - пусто.
модуль devel не установлен-не включен
Установлен и включен.
Так работает:
<?php
function mytheme_js_alter(&$scripts) {
dsm($scripts);
unset($scripts['sites/all/modules/ubercart/uc_cart/uc_cart_block.js']);
}
?>
возможно js подключается при темизации блока Корзины... поэтому в mytheme_preprocess_page его может еще не быть..
попробуйте mytheme_preprocess_block