Баг, конечно, не критичный но крайне неприятный для тех, кому нужно многоуровневое меню с разграничениями прав доступа к вложенным пунктам.
Так оно будет выглядеть в свернутом виде
Теперь нам понадобилось скрыть от гостей доступ к одному из разделов
Вот, что гости увидят в итоге
Теперь, отказавшись от предыдущей затеи, скроем пункты в разделе, с надеждой, что после этого раздел превратится в обычную ссылку
В свернутом виде это будет выглядеть так
А в развернутом
Я не рискнул экспериментировать, что получится, если мы захотим одновременно скрыть вышеупомянутые пункты и раздел:)
Еще раз хочу подчеркнуть, что лично я особых ужасов в этом не вижу. Этот баг из разряда неприятностей, которые можно было бы обойти средствами системы, правда, не без некоторых потерь. Но если говорить о том, как это должно выглядеть ПРАВИЛЬНО, то по логике вещей, в развернутом виде примерно так
На всякий случай напомню исходное меню
Строки:
Заменяем на:
Идем дальше.
Строку:
Заменяем на:
Идем дальше.
ПЕРЕД строкой:
Вставляем:
Все.
Помним, что после копирования нужно менять кавычки!
Те, кому лень или нет нужды ковырять код, могут скачать патч в каталоге дополнений.
P.S. Если разработчики сочтут целесообразным включить это решение в оф.релиз, то будет не лишним оптимизировать файл шаблона. Из него можно исключить логику отображения скрытых пунктов. Мне не составит труда это сделать.
Описание бага
Предположим нам нужно сделать многоуровневое менюТак оно будет выглядеть в свернутом виде
Теперь нам понадобилось скрыть от гостей доступ к одному из разделов
Вот, что гости увидят в итоге
Теперь, отказавшись от предыдущей затеи, скроем пункты в разделе, с надеждой, что после этого раздел превратится в обычную ссылку
В свернутом виде это будет выглядеть так
А в развернутом
Я не рискнул экспериментировать, что получится, если мы захотим одновременно скрыть вышеупомянутые пункты и раздел:)
Еще раз хочу подчеркнуть, что лично я особых ужасов в этом не вижу. Этот баг из разряда неприятностей, которые можно было бы обойти средствами системы, правда, не без некоторых потерь. Но если говорить о том, как это должно выглядеть ПРАВИЛЬНО, то по логике вещей, в развернутом виде примерно так
На всякий случай напомню исходное меню
Устранение бага
Открываем файл /modules/mod_menu/module.phpСтроки:
while ($row = $inDB->fetch_assoc($rs_rows)){ if ($row['menu'] == $menu){
$m_num = 0; // счетчик "актуальных" пунктов меню while ($row = $inDB->fetch_assoc($rs_rows)){ if ( ($row['menu'] == $menu) & (($row['allow_group'] == -1)||($row['allow_group'] == $inUser->group_id)||$inUser->is_admin) & // заносим в массив только "актуальные" пункты меню // отсекаем вложенные пункты, к родительскому разделу которых нет прав доступа if ( $row['NSRight'] - $row['NSLeft'] != 1 ) { // если не 1 - значит имеются потомки $m_inside[$row['id']]['count'] = 0; // стартовое значение счетчика прямых потомков $m_inside[$row['id']]['num'] = $m_num; // индекс пункта меню в массиве } if ( $row['parent_id'] != $root_id ) { // если родительский раздел не является корнем $m_inside[$row['parent_id']]['count']++; // счетчик прямых потомков родительского раздела увеличивается на 1 }
Строку:
$items[] = $item;
$items[$m_num++] = $item; // заносим данные в текущую ячейку массива и увеличиваем счетчик на 1
ПЕРЕД строкой:
$smarty = $inCore->initSmarty('modules', 'mod_menu.tpl');
foreach ( $m_inside as $m_par ) { if ( !$m_par['count'] ) { // если нет "актуальных потомков" $items[$m_par['num']]['NSRight'] = $items[$m_par['num']]['NSLeft'] + 1; // снимаем статус родителя } }
Помним, что после копирования нужно менять кавычки!
Те, кому лень или нет нужды ковырять код, могут скачать патч в каталоге дополнений.
P.S. Если разработчики сочтут целесообразным включить это решение в оф.релиз, то будет не лишним оптимизировать файл шаблона. Из него можно исключить логику отображения скрытых пунктов. Мне не составит труда это сделать.
Реклама #
14 лет назад #
14 лет назад #
Но вот у меня возникла еще более серьезная проблема. Она заключается в том, что менюшка нивкакую не хочет разворачиваться. Т.е. когда есть вложенный пункт он, по идее, должен появиться при щелчке на главный пункт меню. У меня же при клике на основной пункт список разворачивается и сразуже сворачивается. Это происходит и в эксплорере и в опере. Посмотрите сами на моем сайте пункт "Аудио, видео, книги" в левом верхнем меню. Можете что-то посоветовать по этому поводу? как решить эту проблему?
neart 14 лет назад #