Ошибка с выпадающим меню
14.04.2010Голосование
| Тип | Ошибка |
| Состояние | Исправлено |
| Приоритет | Высокий |
| Версия | 3.46 |
| Система | * |
| Воспроизводимость | Нет |
| Автор | dm |
| Исполнитель | Блоголётчик |
При включении выпадающего меню в админке оно отображается, правда некорректно - об этом ниже, а при выходе из админки и заходе на сайт в качестве посетителя выдается такая ошибка:
Catchable fatal error: Object of class toptions could not be converted to string in Z:\home\blogolet2\www\lib\menu.class.php on line 269
Версия на файлах 3.46, тестирую на Денвере.
По-поводу некорректного отображения меню... Вместо того чтобы выпадать, пункты с подпунктами просто отображаются одной строкой.
Как оказалось, необходимые стили просто не прописаны, я про тему по умолчанию. Чтобы заработало в CSS нужно заменить
topmenu {width:958px;height:100%;margin:0 auto;position:relative;display:block;background-color:#fff;font:14px Trebuchet MS, Tahoma, Verdana, sans-serif;color:#0c588a;padding:1px;overflow: hidden;}
topmenu ul {list-style:none;background-color:#bcebff;width:888px;height:100%;border:5px solid #dff6ff;padding:0 30px;overflow: hidden;}
topmenu ul li {height:30px;float:left;margin-right:20px;position:relative;}
topmenu ul li a {color:#0c588a;height:30px;position:relative;top:5px;text-shadow:1px 1px 0 #eefaff;text-decoration:none;}
topmenu ul li a:hover {text-decoration:underline;}
на
topmenu{height: 40px; width: 960px; margin: 0 auto; border: 1px solid #fff; font: 14px Trebuchet MS, Tahoma, Verdana, sans-serif; color: #0c588a;}
topmenu ul li a {color: #0c588a; height: 30px; text-shadow: 1px 1px 0 #eefaff; text-decoration: none;}
topmenu ul li a:hover {text-decoration:underline;}
nav {height: 25px; padding: 5px 0 0 10px; border: 5px solid #DFF6FF; background: #BCEBFF;}
nav li{float: left; list-style: none; position: relative; padding: 0 10px; min-height: 30px;}
nav li:hover ul{display: block;}
nav ul{position: absolute; z-index: 999; display: none; top: 25px; left: 0; width: 200px; background: #BCEBFF; padding: 5px 0 0 0; overflow: hidden; border-right: 5px solid #DFF6FF; border-bottom: 5px solid #DFF6FF; border-left: 5px solid #DFF6FF;}
nav ul li{width: 100%; min-height: 14px !important; padding: 0 5px 4px 5px !important;}
Работает в нормальных браузерах, в Internet Explorer 6 не будет работать, т.к. там нету полноценной поддержки hover.
По-идее, лечится, например, подключением файла csshover.htc (запросто ищется в Гугле), но проверить конкретный случай не могу, нету сейчас шестерки в наличии.
← Ранее Аяксовое подключение плагина nicedit
Позже Загрузка файлов по ссылке. →
Комментарии (25) на запись “Ошибка с выпадающим меню”
Оставить комментарий
Ок, поправил, до релиза новой версии можешь взять файл из репозитория:
http://litepublisher.googlecode.com/svn/trunk/lib/menu.class.php
или самостоятльносамому в файле lib/menu.class.php заменить $options.url на $options-url
Существующее решение всплывающего меню основано на javascript и не зависит от стилей текущей темы. Галочка "всплывающее меню" делает всего пару вещей: включает нужный javascript (hovermenu.js), изагоняет все меню во вложенные списки, а остальное делае javascript, а именно (если судить по его несложному коду) свораачивает списки и обрабатывает события мышки. Когда то уже обсуждали варианты решения через стили, но я так и не решился перейти на стили, так как тогда бы пришлось бы пправить все известные темы, а также вклчить особые стили для будущих тем, да к тому же как ты пишишь ишачок не частично не поддерживает, а вот с javascript проблем замечено небыло
Спасибо за исправление, теперь Catchable fatal error отсутствует.
ПО поводу выпадения - эти js видел (в JS почти ничего не понимаю, но мысли о том, что это должно работать так, как вы описали, возникали)... но суть в том, что не работает. В нескольких браузерах проверял. Потому-то и сделал на CSS. Сегодня еще раз попробую, наверно просто чего-то недопонял, если у вас все корректно.
Ошибку нашел и устранил, до релиза можно обнвить файл из репозитория:
http://litepublisher.googlecode.com/svn/trunk/lib/theme.parser.class.php
ошибка была в неверном определении (регэксп) тега меню.
выпадающее меню в админке заработало замечательно, но теперь current_page_items на главной странице блога стали выводиться без оболочки <ul id="nav">...</ul>
т.е она не берется из "menulist" а грузится голый "current"
наружу "menulist". Теперь все красиво.
.class_name точка перед названием дает понять что это класс то есть переменная может повторяться в шаблоне сколько угодно
id_name а так обозначются стили для id то есть обьект единственный и повторяться нигде больше небудет.
При обрашении к какому либо обьекту можно использовать любые средства id class названия тегов
если написать
div #first{} - обращаемся к обьекту под айди ферст который находится внутри дива.
div#first{} - а если без пробела то обращение идет к диву с ид ферст
Второе да закомментировал правильно.
Сейчас тестирую на ie - не работает, с подключенным csshover.htc, склоняюсь к решению описанном в
http://www.aether.ru/blog/2006/03/30/dropdown-css-menu
у меня работает
Да http://www.aether.ru/blog/2006/03/30/dropdown-css-menu хорошо расписано, я раньше тоже скриптом пользовался для ие в условных комментариях, но с обновленными версиями браузеров скрипт начал ошибки выдавать, пришлось искать другое решение:
*html #nav li, *html #nav li ul, *html #nav li ul li { behavior:expression(
onmouseover = function() {this.className += ' hover'},
onmouseout = function() {this.className = this.className.replace(' hover', ''),
style.behavior = null});
}
Но хаки мне если честно не по душе, нелюблю их, да и не валидно все это, скрипт лучше, поставил страничку с менюшкой себе в закладки.
SkineR пишет:
А обновленным версиям браузеров скрипт нужен? )
Этот скрипт же только для ИЕ он не признает свойство :hover ни для чего кроме ссылки, остальные все нормально реагируют браузеры.
А про тот скрипт я просто его был нашедши на каком то старом сайте на допотопной яве написанный, я не этот имею в виду, пару раз попользовался, вообше то шас редко меню на скриптах делают поисковики их нелюбят, если только как в нашем случае только для админки
А вообще, интересно.
Создаю я сейчас между делом тему с нуля под Блоголет. Там тоже используется выпадающее меню. Так вот, в сверстанном шаблоне (просто в HTML который) csshover.htc отлично работает. А в сделанной на его основе теме та же ерунда - не хочет работать. Пути к файлу проверял. Ведь если закинуть этот файл в одну папку с CSS, то путь к файлу, соответственно, нужно прописать так: ("csshover.htc"), т.к. он находится в той же папке, что и файл стилей, в котором прописывается путь... Так? Не хочет работать. Прописывал полный путь: http://blogolet4/themes/mytheme/css/csshover.htc - тоже не хочет. В верстке все верно. Непонимаю... А чисто теоретически сам движок не может как-то блокировать доступ к этому файлу?
Причем, не срабатывает не только для меню, но и для любых иных элементов.
Блоголётчик пишет:
Сейчас потестил - вы правы, этот работает нормально, пункты выпадают... Единственное, что стили для шестерки еще подправить нужно... чем и займусь.
Готово)
В index.tml добавить
<script type="text/javascript" src="$template.url/css/nav.js"></script>
nav.js - это тот скрипт, который тут:
http://www.aether.ru/blog/2006/03/30/dropdown-css-menu
В CSS нужно заменить строки, которые я указывал выше на нижеприведенные
topmenu{position:relative; z-index: 50; height: 40px; width: 960px; margin: 0 auto; border: 1px solid #fff; font: 14px Trebuchet MS, Tahoma, Verdana, sans-serif; color: #0c588a;}
topmenu ul li a {color: #0c588a; height: 30px; text-shadow: 1px 1px 0 #eefaff; text-decoration: none;}
topmenu ul li a:hover {text-decoration:underline;}
nav {position:relative; height: 25px; padding: 5px 0 0 10px; border: 5px solid #DFF6FF; background: #BCEBFF;}
nav li{float: left; list-style: none; position: relative; padding: 0 10px; _padding: 0 10px 8px 10px !important; min-height: 30px;}
nav li:hover ul, #nav li.jshover ul{display: block;}
nav ul{position: absolute; z-index: 100; display: none; top: 25px; left: 0; width: 200px; background: #BCEBFF; padding: 5px 0 0 0; overflow: hidden; border-right: 5px solid #DFF6FF; border-bottom: 5px solid #DFF6FF; border-left: 5px solid #DFF6FF;}
nav ul li{width: 100%; min-height: 14px !important; padding: 0 5px 4px 5px !important;}
Это для нынешней темы по умолчанию.
Нормально работает в ИЕ6, Chrome, Opera, FF
Вот скорректированная тема, посмотрите.
http://sast.spb.ru/default.zip
Единственное, что сейчас посмотрел на свежую голову, вот это вот:
Дмитрий пишет:
не нужно, меню походу нормально обрабатывают ваши скрипты. Тестировал на последней версии.
http://litepublisher.ru/task/izmeneniya-v-shablone-kommentariya.htm
Пожалуйста, кто понимает в стилях подскажите необходимые изменения в стилях