Не работает jQuery меню на Drupal 7

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

Аватар пользователя Spravedlivyi Spravedlivyi 3 мая 2012 в 11:26

Здравствуйте!
Отказывается работать меню в D7. Точнее оно-то работает, но сам javascript (оформление) никак не хочет функционировать. Остальные jQuery плагины работают. Я так понимаю, что нужно сделать определенные замены в самом javascript, но, к сожалению, в этом я слаб. Огромная просьба помочь.

page.tpl:

<?php<div class="lavalamp" >
        <?php if ($main_menu): ?>
            <?php print theme('links__system_main_menu', array('links' => $main_menu'attributes' => array('id' => 'main-menu''class' => array('links''inline''clearfix')))); ?>
        <?php endif; ?>

mainMenu.js:

(function ($) {

$(document).ready(function () {
//найти текущую позицию активного элемента
var dleft = $('$main_menu').offset().left - $('$main_menu').offset().left;
var dwidth = $('$main_menu').width() + "px";
//присвоить эту позицию элеметку с подсветкой
$('.floatr').css({
"left": dleft+"px",
"width": dwidth
});
$('.lavalamp li').hover(function(){
var left = $(this).offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
},
function(){
var left = $(this).siblings('li.active').offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).siblings('li.active').width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
}).click(function(){
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
return false;
});
});
})(jQuery);

Заранее благодарю!

Комментарии

Аватар пользователя Spravedlivyi Spravedlivyi 3 мая 2012 в 15:03

В том-то и дело, что скрипты работают. Другие плагины нормально работают. Я так понимаю, что дело в том, что скрипт этот привязан к системному главному меню и в самом этом скрипте нужно что-то изменить...

Аватар пользователя Spravedlivyi Spravedlivyi 4 мая 2012 в 11:42

brutal wrote:
Тогда сами или начните с более простого .

Надеюсь вы стили не забываете подключать ?

С какого простого? У меня в верстке все прекрасно работает. Меню в том числе. Тут в javascript нужно изменить некоторые параметры, которые ссылаются на системное меню друпал. Вы знаете javascript?

Аватар пользователя brutal brutal 4 мая 2012 в 14:28

Та бодяга которая по вашей ссылке , работать в большинстве браузеров не будет .
Проделайте все что указано по ссылке , которую размещал выше .

Аватар пользователя Spravedlivyi Spravedlivyi 4 мая 2012 в 17:16

brutal wrote:
Та бодяга которая по вашей ссылке , работать в большинстве браузеров не будет .
Проделайте все что указано по ссылке , которую размещал выше .

То есть, Вы хотите сказать, что верстка работает на всех браузерах, а после темизации на друпал может работать не во всех браузерах???
Я же просил помощи по существу.

Аватар пользователя Spravedlivyi Spravedlivyi 4 мая 2012 в 17:14

drupby wrote:
а в вашем меню вообще есть классы lavalamp и floatr ?

Мне кажется, в них-то и дело. Потому как в верстке эти классы были, а при адаптиции к друпалу я их заменил на пхп

Аватар пользователя brutal brutal 5 мая 2012 в 0:56
var dleft = $('$main_menu').offset().left - $('$main_menu').offset().left;
var dwidth = $('$main_menu').width() + "px";

$main_menu - это вы сами додумались туда переменную из шаблона засунуть ?

Аватар пользователя drupby drupby 5 мая 2012 в 1:12

"brutal" wrote:
$main_menu - это вы сами додумались туда переменную из шаблона засунуть ?

это такой новый селектор , который вибирает все меню полностью .
а вообще там по идее должно быть $('.active'),
хотя переменная var dleft = $('$main_menu').offset().left - $('$main_menu').offset().left;
в любом случае равна нулю .

Аватар пользователя drupby drupby 5 мая 2012 в 1:18

в шаблон надо вставить

<div class="lavalamp" >

<?php if ($main_menu): ?>
            <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')))); ?>
        <?php endif; ?>

<div class="floatr"></div>
</div>

а в скрипт

(function ($) {
 
$(document).ready(function () {
//найти текущую позицию активного элемента
var dleft = $('.lavalamp li.active').offset().left - $('.lavalamp').offset().left;
var dwidth = $('.lavalamp li.active').width() + "px";
//присвоить эту позицию элеметку с подсветкой
$('.floatr').css({
"left": dleft+"px",
"width": dwidth
});
$('.lavalamp li').hover(function(){
var left = $(this).offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
},
function(){
var left = $(this).siblings('li.active').offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).siblings('li.active').width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
}).click(function(){
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
return false;
});
});
})(jQuery);

и не забыть про css

Аватар пользователя Spravedlivyi Spravedlivyi 10 ноября 2015 в 11:48

drupby wrote:
в шаблон надо вставить

<div class="lavalamp" >

<?php if ($main_menu): ?>
            <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')))); ?>
        <?php endif; ?>

<div class="floatr"></div>
</div>

а в скрипт

(function ($) {
 
$(document).ready(function () {
//найти текущую позицию активного элемента
var dleft = $('.lavalamp li.active').offset().left - $('.lavalamp').offset().left;
var dwidth = $('.lavalamp li.active').width() + "px";
//присвоить эту позицию элеметку с подсветкой
$('.floatr').css({
"left": dleft+"px",
"width": dwidth
});
$('.lavalamp li').hover(function(){
var left = $(this).offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
},
function(){
var left = $(this).siblings('li.active').offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).siblings('li.active').width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
}).click(function(){
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
return false;
});
});
})(jQuery);

и не забыть про css

Сделал. Не работает. В меню не работают ссылки, а скриптовый ползунок на активном пункте меню не двигается. Скриншот прикрепил.

Аватар пользователя drupby drupby 6 мая 2012 в 15:11

а шаблон случайно не в артистире сделан?
Если да ,то и врядли будет работать , попробуйте на каком-нибудь стандартном шаблоне .

Аватар пользователя Spravedlivyi Spravedlivyi 6 мая 2012 в 15:23

drupby wrote:
а шаблон случайно не в артистире сделан?
Если да ,то и врядли будет работать , попробуйте на каком-нибудь стандартном шаблоне .

Нет. Шаблон делал лично. С нуля. В блокноте))

Аватар пользователя Spravedlivyi Spravedlivyi 6 мая 2012 в 15:30

drupby wrote:
а код можете показать , который в

<div class="lavalamp" >
 
.......
 
<div class="floatr"></div>
</div>

у вас выводится ?

        <div class="lavalamp" >
                <ul>
                        <li class="active"><a href="">Главная</a></li>
                        <li><a href="">О нас</a></li>
                        <li><a href="">Ближайшие события</a></li>
                        <li><a href="">Фото</a></li>
                        <li><a href="">Полезные материалы</a></li>
                        <li><a href="">Контакты</a></li>
                </ul>
                <div class="floatr"></div>
        </div>
Аватар пользователя Spravedlivyi Spravedlivyi 7 мая 2012 в 0:35

drupby wrote:
должно работать ,может неправильно подключаете .js файл ?

Подключаю правильно. Все остальные скрипты работают.

Аватар пользователя drupby drupby 8 мая 2012 в 18:03

"Spravedlivyi" wrote:
так ссылки же не нажимаются....

так в вашем же примере на ruseller.com/lessons/les539/example/index.html
в демо ссылки то тоже не нажимаются- что же вы хотели .все точно так как и там .

Аватар пользователя Spravedlivyi Spravedlivyi 8 мая 2012 в 18:19

drupby wrote:
"Spravedlivyi" wrote:
так ссылки же не нажимаются....

так в вашем же примере на ruseller.com/lessons/les539/example/index.html
в демо ссылки то тоже не нажимаются- что же вы хотели .все точно так как и там .

Я уже запутался совсем. Смотрите, в примере меню, понятное дело, что нажиматься пункты не будут. Но когда я это меню интегрировал в свою верстку все нажималось и работало! А вот в друпале почему-то не работает...

Аватар пользователя drupby drupby 8 мая 2012 в 18:42

возможно конфликт версий jquery . попробуйте установить модуль jquery update - может заработает , если будет другая версия библиотеки jquery .

Аватар пользователя Spravedlivyi Spravedlivyi 8 мая 2012 в 18:57

drupby wrote:
возможно конфликт версий jquery . попробуйте установить модуль jquery update - может заработает , если будет другая версия библиотеки jquery .

Не работает. Я думаю, тут дело в том, что меню друпала как-то не состыковывается с jQuery.

Аватар пользователя Cyber Cyber 8 мая 2012 в 19:09
(function ($) {
 
$(document).ready(function () {
//найти текущую позицию активного элемента
var dleft = $('.lavalamp li.active').offset().left - $('.lavalamp').offset().left;
var dwidth = $('.lavalamp li.active').width() + "px";
//присвоить эту позицию элеметку с подсветкой
$('.floatr').css({
"left": dleft+"px",
"width": dwidth
});
$('.lavalamp li').hover(function(){
var left = $(this).offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
},
function(){
var left = $(this).siblings('li.active').offset().left - ($(this).parents('.lavalamp').offset().left + 15);
var width = $(this).siblings('li.active').width() + "px";
var sictranslate = "translate("+left+"px, 0px)";
$(this).parent('ul').next('div.floatr').css({
"width": width,
"-webkit-transform": sictranslate,
"-moz-transform": sictranslate
});
}).click(function(){
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
return false;
});
});
})(jQuery);

чето лишнее Smile

(function ($) {
 
$(document).ready(function ()

(function ($) {

Аватар пользователя drupby drupby 8 мая 2012 в 19:16

"Spravedlivyi" wrote:
Не работает. Я думаю, тут дело в том, что меню друпала как-то не состыковывается с jQuery.

а с какой нибудь стандартной темой друпала пробывали ?

Аватар пользователя Vdomah Vdomah 24 января 2013 в 14:37

Стара тема, но тоже с этой проблемой столкнулся. Надо в конце javascript'a заменить false на true:

.click(function(){
$(this).siblings('li').removeClass('active');
$(this).addClass('active');
return true;
});

Теперь кнопочки нажимаются, но после перехода по ссылке нет результата этой части кода

$(this).siblings('li').removeClass('active');
$(this).addClass('active');

и, соответственно, класс active опять у первого элемента меню. Теряется присваивание класса active. Как этого избежать?