Главная » Статьи » Статьи о/про uCoz » JS и JQ скрипты для uCoz

Как изменить пункт (ы) в стандартном меню (скрипты для юКоз, uCoz)

Как изменить один пункт в стандартном меню

Этот вопрос прозвучал на форуме юКоз (uCoz forum.ucoz.ru) и, ответа на него, полного, приемлемого и с примерами, не нашлось.
Исправляю эту ситуацию так, как считаю возможным.

Сам вопрос, если интересно, звучал вот так:

Quote (VanoONLINE)
Здравствуйте.
Подскажите, как в стандартном 956ом дизайне изменить цвет одной строчки в меню.
Как менять цвет всего меню понятно (в css)

...

Итак.
Как же изменить строчку в стандартном, генерируемом системой, меню, который вставляется в шаблон оператором $SMЕNU_1$, а само меню формируется и изменяется/корректируется в «Конструкторе меню»?



Выходов, как минимум несколько.

Задать свой класс в Конструкторе меню ...



И прописать соответствующие стили к установленным классам в CSS

Но, только для ссылок - элементов «a», иногда это не совсем то ...


Либо с помощью JavaScript - любому элементу меню.
А если уж быть конкретным, то с совмещением чистого JavaScript и библиотеки (фреймворка) jQuery, для удобства.


Информация:

Если у вас сайт на хостинге юКоз, и вы не совершали никаких действий по отключению скриптаjQuery у вас есть, так как подключена «по умолчанию».
Это, тот самый, скрипт «u.js» - который включает в себя эту библиотеку (фреймворк) (v1.3.2 на момент написания).


Для примера, приведу фрагмент исходного кода меню.
Вот он:

Code (HTML)
<!-- <bc> -->
<div id="uMenuDiv1" class="uMenuV" style="position:relative;">
<ul class="uMenuRoot">
<li style="position:relative;"><div class="umn-tl"><div class="umn-tr"><div class="umn-tc"></div></div></div><div class="umn-ml"><div class="umn-mr"><div class="umn-mc"><div class="uMenuItem"><div class="uMenuArrow"></div><a href="/"><span>Главная страница</span></a></div></div></div></div><div class="umn-bl"><div class="umn-br"><div class="umn-bc"><div class="umn-footer"></div></div></div></div><ul style="display:none;">
<li><div class="uMenuItem"><a href="/index/rssit_2/0-12"><span>RSSIT_2</span></a></div></li>
<li><div class="uMenuItem"><a href="/index/rssit_1/0-13"><span>RSSIT_1</span></a></div></li>
<li><div class="uMenuItem"><a href="/index/rssit_3/0-14"><span>RSSIT_3</span></a></div></li>
<li><div class="uMenuItem"><a href="/index/rssit_4/0-15"><span>RSSIT_4</span></a></div></li>
<li><div class="uMenuItem"><a href="/index/test_12_07_2010/0-9"><span>Test 12.07.2010</span></a></div></li>
<li><div class="uMenuItem"><a href="/index/0-11"><span>$WIDGET$</span></a></div></li></ul></li>
<li><div class="umn-tl"><div class="umn-tr"><div class="umn-tc"></div></div></div><div class="umn-ml"><div class="umn-mr"><div class="umn-mc"><div class="uMenuItem"><a href="http://dvornik.ucoz.ru/index/moi_fotki/0-4"><span>Мои фотки</span></a></div></div></div></div><div class="umn-bl"><div class="umn-br"><div class="umn-bc"><div class="umn-footer"></div></div></div></div></li>
<li><div class="umn-tl"><div class="umn-tr"><div class="umn-tc"></div></div></div><div class="umn-ml"><div class="umn-mr"><div class="umn-mc"><div class="uMenuItem"><a href="/forum"><span>Форум</span></a></div></div></div></div><div class="umn-bl"><div class="umn-br"><div class="umn-bc"><div class="umn-footer"></div></div></div></div></li>
<li><div class="umn-tl"><div class="umn-tr"><div class="umn-tc"></div></div></div><div class="umn-ml"><div class="umn-mr"><div class="umn-mc"><div class="uMenuItem"><a href="/news/test_kategorij/1-0-1"><span>Test categories</span></a></div></div></div></div><div class="umn-bl"><div class="umn-br"><div class="umn-bc"><div class="umn-footer"></div></div></div></div></li>
<!-- И так далее -->
</ul></div>
<script type="text/javascript">$(function(){_uBuildMenu('#uMenuDiv1',0, document.location.href+'/','uMenuItemA', 'uMenuArrow', 2500);})</script>
<!-- </bc> -->


Как четко видно по исходнику, меню имеет свой ID по которому его проще всего «вычислить» на странице. Так и поступим.
Причём, каждое меню, если их несколько, имеет свой, уникальный в пределах страницы, ID.

Изменять пункты меню, можно как прописывая дополнительные стили к ним, так и через CSS, добавляя свой класс к необходимому (нужному) элементу.

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


Назначаем класс одному элементу списка (меню)


Допустим, вам нужно прописать другой цвет фона к 3-му пункту и всё.
Сделать это можно/лучше найдя элемент по его индексу.

Например:

Добавляем класс «myClass»

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
$('#uMenuDiv1 li:eq(2)').addClass('myClass');
});
</script>

Или прописав непосредственно: (контекстно)

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
$('#uMenuDiv1 li:eq(2)').css({backgroundColor:'#F00'});
});
</script>

Где:
$(document).ready(function() - Ожидаем когда объектная модель документа (DOM) будет готова к использованию.

$('#uMenuDiv1 li:eq(2)') - ищем третий пункт li:eq(2) - отсчёт идет с нуля - в блоке с ID = «uMenuDiv1». Пункты в стандартном меню - это элементы неупорядоченного списка, то есть элементы «li». Что, кстати, видно по коду.

.addClass('myClass'); - добавляем (если есть, если нет - назначаем) найденному элементу класс «myClass».

или как во втором случае:

.css({backgroundColor:'#F00'}); - прописываем ему стиль «background-color:#F00;» - то есть фоновый цвет - красный.


Примеры:

 Пример с назначением класса (откроются в новом окне)

 Пример с контекстными стилями (откроются в новом окне)

Назначаем класс всем элементам списка (меню)


Но, зачастую, не всегда, но всё же, бывает нужно иметь «под рукой» несколько, если не все элементы меню, причем с разными классами.
В таком случае, проще скриптом пройтись, перебрать все элементы меню, и назначить им класс автоматически, в зависимости от «индекса» данного элемента.

Делается это тоже не сложно, примерно так же ....

Вот код скрипта - примера:

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
/*Start DocumentReady*/
var a=$('#uMenuDiv1 ul.uMenuRoot>li'),b=a.length;
for(var i=0;i<b;i++){a[i].className+=' myClass'+[i];};
/*End DocumentReady*/
});
</script>

Где:

$('#uMenuDiv1 ul.uMenuRoot>li') - выбираем всех прямых потомков «ul.uMenuRoot» - то есть все верхние элементы «li».

for(var i=0;i<b;i++){a[i].className+=' myClass'+[i];}; - проходимся по ним циклом, и назначаем (добавляем) класс, в зависимости от порядкового номера элемента на текущий момент цикла - a[i].className+=' myClass'+[i];

Где:

a[i] - текущий элемент.

.className+=' myClass'+[i] - добавляем класс плюс номер элемента.

Пример:

 Пример с назначением класса всем пунктам посредством цикла (откроется в новом окне)

Получаем диапазон классов начиная от «myClass0» и заканчивая, в данном случае - «myClass15» ....
В зависимости от количества пунктов в меню - b=a.length;.



Далее - мы можем управлять любым элементом меню при помощи стилей:

Code (CSS)
<style type="text/css">
/*Start(.uMenuV .myClass)*/
.uMenuV .myClass0{background-color:#CCC;}
.uMenuV .myClass1{background-color:#C9F;}
.uMenuV .myClass2{background-color:#C00;}
.uMenuV .myClass3{background-color:#309;}
.uMenuV .myClass4{background-color:#F69;}
.uMenuV .myClass5{background-color:#6FF;}
.uMenuV .myClass6{background-color:#FF6;}
.uMenuV .myClass7{background-color:#CF3;}
.uMenuV .myClass8{background-color:#90F;}
.uMenuV .myClass9{background-color:#F0F;}
.uMenuV .myClass10{background-color:#0F0;}
.uMenuV .myClass11{background-color:#090;}
.uMenuV .myClass12{background-color:#900;}
.uMenuV .myClass13{background-color:#C66;}
.uMenuV .myClass14{background-color:#3C9;}
.uMenuV .myClass15{background-color:#6F9;}
/*End(.uMenuV .myClass)*/
</style>

Пример:

 Пример с назначением класса всем пунктам посредством цикла с добавлением стилей(откроется в новом окне)



Конечно, совсем не обязательно прописывать все стили, а только необходимые вам.



При окончательном варианте - лучше всего занести их в свою таблицу стилей (отдельный файт, обычно - my.css).

Выбираем четные, не чётные элементы


Таким же образом, если есть необходимость, можно выделить только чётные элементы меню, или наоборот, не чётные.

Пример (чётные элементы):

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
/*Start DocumentReady*/
$('#uMenuDiv1 ul.uMenuRoot>li:even').addClass('myEven'); /* Выбираем все четные */
/*End DocumentReady*/
});
</script>

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
/*Start DocumentReady*/
$('#uMenuDiv1 ul.uMenuRoot>li:odd').addClass('myOdd'); /* Выбираем все не четные */
/*End DocumentReady*/
});
</script>

Где:

$('#uMenuDiv1 ul.uMenuRoot>li:even') - Выбираем все четные (начиная с нуля) непосредтвенные потомки ul.uMenuRoot - то есть все четные элементы li.

$('#uMenuDiv1 ul.uMenuRoot>li:odd') - Выбираем все не четные (начиная с нуля) непосредтвенные потомки ul.uMenuRoot - то есть все не четные элементы li.

.addClass('myEven') - добавляем (если есть, назначаем - если нет) класс myEven - для чётных и myOdd - для не чётных.


Инфа по теме:
«jQuery. Селекторы»
«jQuery. Работа с элементами. Использование CSS селекторов»

Пример:

 Пример с назначением класса только чётным элементам (откроется в новом окне)

 Пример с назначением класса только не чётным элементам (откроется в новом окне)


Выбираем элемент по контексту


Также, вы можете выбрать тот элемент, который содержит определённую фразу, словосочетание, слово .....

Пример:

Code (JavaScript)
<script type="text/javascript">
$(document).ready(function(){
/*Start DocumentReady*/
$('#uMenuDiv1 ul.uMenuRoot>li:contains("Обратная")').addClass('myText');
/*End DocumentReady*/
});
</script>

Где:

$('#uMenuDiv1 ul.uMenuRoot>li:contains("Обратная")') - выбираем всех прямых потомков «ul.uMenuRoot» - то есть все верхние элементы «li» в которых есть текст, в данном случае - со словом «Обратная».

Учитывается любое вхождение слова в выражение.

Пример:

 Пример с назначением класса только элементу со словом «Обратная» (откроется в новом окне)

 Пример с назначением класса только элементу со словом «слово» (откроется в новом окне)

Материалы по теме:

«jQuery. Селекторы»
«jQuery. Работа с элементами. Использование CSS селекторов»
«Как подсветить (выделить) активную (текущую) ссылку. JavaScript + CSS»
«Пишем скрипт меню для Интернет магазина. Для юКоз (uCoz). jQuery»
Автор: Likbezz aka Flesh




Источник: Как изменить один пункт в стандартном меню или управляем системным меню через стили с помощью JavaScript, скрипт для юКоз, uCoz
Категория: JS и JQ скрипты для uCoz | Добавил: likbezz (06.01.2011) E
Просмотров: 18685 | Комментарии: 8 | Теги: Стили, JavaScript, через, системным, изменить, помощью, Как, стандартном, управляем, меню
Всего комментариев: 8
0  
8  mrserzh [Материал[13.04.2012]

Здравствуйте! на forum.ucoz.ru так и не получил ответ. Может тут смогут помочь...
Включен модуль интернет-магазин. Созданы под него категории. Хочу внести изменения и получить следующее: чтоб эти категории находились под разделом в меню "Интернет магазин", а отдельный блок категорий убрать. Т.е. категории интернат-магазина находились сразу под ним.
Интересует вариант акардиона, только без изменения кнопок, стилей и т.п. (чтоб сохранялось по шаблону и как в настройках $CATALOG$).
Ну просто не могу сообразить как в $MENU_1$, под /shop запихнуть $CATALOG$ магазина sad
И ещё: обычно нажимаемое меню акордеона является не активным, а активны под ним категории. Мне нужно, чтоб при нажатии "Интернет-магазин" открывался акордион (просто вываливался каталог) и сразу загружалась страница /shop. Да, и при переходе на другую страницу магазина, чтоб сохранения куки были и меню не закрывалось на каждой новой странице (может это и не нужно указывать, в каталоге оно не закрывается, но на всякий случай решил указать).
Как такое возможно?

0  
6  Оксана [Материал[29.02.2012]

А как изменить не пункт меню, а саму надпись "меню сайта", поменять цвет?

0  
7  likbezz [Материал[01.03.2012]

Quote (Оксана)
А как изменить не пункт меню, а саму надпись "меню сайта", поменять цвет?

Отредактировать шаблон глобального блока «Первый контейнер» или того, в котором у вас меню.
Найти надпись «Меню сайта» и заменить на свою.
... Это в ПУ » Управление дизайном » Редактирование шаблонов » Глобальные блоки ...
...

0  
5  SKh [Материал[01.01.2012]

Уж очень ускоренно деградирует юКоз.)
Забывает прописные истины.
Народная:
"Будь проще и народ к тебе потянется."
Техническая:
"Усложнять просто, упрощать сложно."

0  
4  SKh [Материал[01.01.2012]

Что-то тут всего так много наворочено)
Раньше, помню все пункты были прописаны и легко было ставить галочку "невидим"
Легко было переместить выше - ниже, изменить название любого модуля.
Попроще (по старому) можно как-то добраться до регулировок МЕНЮ?
Или их вообще упразднили?
Сейчас у меня в "Конструктор меню" лишь вот такое, убогое

0  
3  Александр [Материал[29.10.2011]

Делал сайт про систему wmmail.ru

0  
2  Александр [Материал[29.10.2011]

Большое спасибо очень помогли!

0  
1  Alex86 [Материал[27.08.2011]

Нет слов..., + .

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]