Текуший пункт меню и разные родители
Всем привет!
Помогите пожалуйста решить одну задачку.Пересмотрел вроде все темы по данному вопросу, но не нашёл вопрос про разные "родители" в структуре меню. Есть горизонтальное, открывающиеся меню на сайте. Главная | Продукция | Контакты | и т.д. Понятно, что если наводим курсором на Продукция, то открывается меню. В открывшемся меню Продукция ссылки на разделы, к примеру(автомобильная тематика): Автошины и Антенны Автошины имеют категорию родителя (http://site.ru/product/avtoshiny/) Антенны имеют уже другую категорию родителя (http://site.ru/komplect/antenny/) Родительская категория Продукция (http://site.ru/product/) Ниже html-код меню: <div id="headmenu"> <ul><li><a href="http://site.ru/product">Продукция</a> <ul> <li><a href="http://site.ru/product/avtoshiny/">Автошины</a></li> <li><a href="http://site.ru/komplect/antenny/">Антенны</a></li> </ul> </ul></li> </div> Теперь переходим к сути задачи, которая заключается в JS-коде, который навешивает подсветку текущего пункта меню, при чём помимо текущего пункта меню, где находится посетитель нужно подсветить и родительский пункт меню, а это во всех случаях Продукция, при том, что по url не совпадает с родительским url. Ниже работающий js-код:
<script type="text/javascript">
$(function () { // когда страница загружена
$('#headmenu a').each(function () { // проходим по нужным нам ссылками
var location = window.location.href // переменная с адресом страницы
var link = this.href // переменная с url ссылки
var result = location.match(link); // результат возвращает объект если совпадение найдено и null при обратном
if(result != null) { // если НЕ равно null
$(this).addClass('active'); // добавляем класс
}
});
});
</script>
Код рабочий и подсвечивает родителя и текущий пункт меню, если совпадает родительский и текущий раздел, т.е. находясь на странице Автошины, в меню подсвечивает, как Продукция, так и Автошины, а вот находясь на Антенны, Продукция не подсвечивается, только Антенны. Ребята подскажите пожалуйста, что подправить в js коде, чтобы он навешивал подсветку, даже если родительский раздел на совпадает.Заранее весьма и весьма благодарен за ответы!! p/s/ пример меню, если со слов не понятно рассказал hxxp://flotenk.ru/products/kns/kns_flotenk/ |
Это силами движка сайта делается. Движок прекрасно знает все хитросплетения страниц и легко подсветит нужный пункт без всяких js. Если движок не совсем гавно конечно. Если самопис - можно доработать.
А на js - не надежно и глючно. |
danik.js, сайт без cms.
Хотелось бы конечно доработать JS-код. До этого начал делать на php, но всё же решил c помощью JS решить эту задачу, но знаний по JS не хватает. danik.js, может у Вас есть варианты доработки JS-кода? |
Цитата:
|
danik.js,
Сайт не на голом html и на каждой странице нет возможности прописывать класс к каждому пункту меню, сам давно не занимаюсь такой ерундой) У определённых разделов сайта есть свой шаблон, например у главной(page.tpl.php), у страницы Продукция (page2.tpl.php) и т.д. Отдельные фрагменты сайта подгружаются так же на php тэгом <? ?>(текст для страниц, меню в отдельных случаях и т.д.).Само горизонтальное меню, которое хочу оживить с помощью JS, прописано в каждом шаблоне(всего 5 шаблонов) в виде обычного html. Странно конечно, я думал, что JS с такими задачами, как я написал в первом сообщение, щёлкает на раз-два, особенно если знать сам язык. Я не знаю там...может по классам команды передавать, если конкретно с передачей url такая загвоздка?В смысле сразу в html прописать класс ссылке Продукция и с помощью JS данный класс связывать с классом .active |
Kiano,
танцы с бубнами ...
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
.active {
background: #FFCC00;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
$(function() { // когда страница загружена
$('#headmenu a').each(function(i, el) {
$("+ul a", el).each(function(indx, element) {
// проходим по нужным нам ссылками
var location = "http://site.ru/komplect/antenny/" // переменная с адресом страницы window.location.href
var link = element.href // переменная с url ссылки
var result = location.match(link); // результат возвращает объект если совпадение найдено и null при обратном
if (result != null) { // если НЕ равно null
$(element).addClass('active'); // добавляем класс
$(el).addClass('active'); // добавляем класс
}
});
});
});
</script>
</head>
<body> <div id="headmenu">
<ul><li><a href="http://site.ru/product">Продукция</a>
<ul>
<li><a href="http://site.ru/product/avtoshiny/">Автошины</a></li>
<li><a href="http://site.ru/komplect/antenny/">Антенны</a></li>
</ul>
</li></ul>
</div>
</body>
</html>
|
Kiano, то есть у тебя иерархия меню не совпадает с иерархией сегментов в url'е? Антенны находятся в Продукция, но в ссылке не prоduct, а komplect? А зачем? SEO-причуды?
|
рони, спасибо за код, но он рабочий только если находишься на странице, которая прописана в var location, на другой странице класс active не подставляется.
|
Цитата:
|
Цитата:
Цитата:
С точки зрения SEO это наоборот не правильно, лучше если иерархия будет соблюдена и вся продукция лежала в папке продукция (/product/), ну и при доработки интерфейса, всплывает проблема о которой написано в первом сообщение. Вчера в ручную прописал активный класс к ссылке Продукция, а JS динамично добавляет класс к текущей ссылке. Хорошо, что страницы с продукцией имеют свой отдельный шаблон(page2.tpl.php). Если кто подскажет код под задачу, которая в первом сообщение, то тоже будет очень хорошо, заберу на сайт!А то это задача касается не только категории с продукцией, есть ещё другие категории с информацией, статьями, сертификатами и т.д., при изменениях придётся изменять иерархию сайта, что не очень хорошо, т.к. будет ставиться 301 редирект, что ведёт к потере веса страниц, тем самым позиций в поисковых системах + ожидание склейщика поисковых систем. |
| Часовой пояс GMT +3, время: 09:59. |