И снова здравствуйте, товарисчи!
Вобщем дело такое. Есть меню с primary линками. в css прописал все стили для них. Всё работает.
не понятно только одно: Как сделать так, что-бы при переходе по одной из Праймари Ссылок, эта ссылка приобретала class="avtive". Т.е. что-б на странице куда указывает данный линк, он отображался как-нибудь отлично от остальных.
Заранее спасибо!
Комментарии
мммммммм.............., да они (ссылки) и так становятся активными, при переходе! Главное чтоб в css все было прописано! Если надо чтоб link или active или hover отличались, так и отличите - пропишите разное оформлении....цвета поменяйте, к примеру, .............для проверки правильности.
Убедитесь что другие модули не используют свои стили для ссылок и не перекрывают стили темы.
Если вы используете IE, выкиньте его нах.............!
Есть такая проблема. Активной ссылке в стиль дописывается "-active" вместо "[пробел]active" и возникают проблемы с темизацией.
Для исправления ситуации есть хак, парсящий css-стили. Типа
<?php
//template.php
/// Active menu links fix
function phptemplate_menu_links($links, $attributes = array()) {
if (!count($links)) {
return '';
}
$level_tmp = explode('-', key($links));
$level = $level_tmp[0];
$output = "<ul class=\"links-$level ".$attributes['class']. "\">\n";
foreach ($links as $index => $link) {
$output .= '<li';
if (stristr($index, 'active')) {
$output .= ' class="active"';
$link['attributes']['class'] = 'active';//add class active to <li
}// frontpage AND current-link in menu is <front>
elseif((drupal_is_front_page()) && ($link['href']=='<front>')){
$link['attributes']['class'] = 'active';//add class active to <li
$output .= ' class="active"';//add class active to <a
}
$output .= ">". l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
}
$output .= '</ul>';
return $output;
}
?>
Хм..
2EllECTRONC:
не, пролема именно в том что <a> не "превращается" в active. Т.е., допустим есть
Так вот по идее, при переходе на /diabet/?q=node/2 должно получаться
Или я чего-то не понимаю?
Химический Али, добавил в template.php. не вылечило.
Хм... какую тему используете? Если нестандартные, то как выводится меню?
тему свою сваял, на базе уже готовой. меню вывожу таким образом:
<?php foreach ($primary_links as $link): ?>
<?php
$href = $link['href'] == "<front>" ? base_path() : base_path() . $link['href'];
print "<a id='menu' href='" . $href . "'>" . $link['title'] . "</a>";
?><br>
<?php endforeach; ?>
<?php endif; ?>
Обычно primary выводится списком, т.е в CSS должно быть ЧТО-ТО типа:
ul.primary-links li.active
ЕСЛИ и ЭТО НЕ ПОМОЖЕТ, то не знаю... мож ты кеширование css включил!?!
В конце концов - покажи сайт, посмотрим! НУ или хоть приаттач страничку в html виде
хм. ща попробуем поменять. а сайт покажу в любом случае. хотя-бы что-б оценили. на днях запускаем. после дам линк
неа.. всё то-же.. сделал так:
<?php if (is_array($primary_links)) : ?>
<?php print '<ul>'; ?>
<?php foreach ($primary_links as $link): ?>
<?php
$href
= $link['href'] == "<front>" ? base_path() : base_path() . $link['href'];print "<li><a id='menu' href='" . $href . "'>" . $link['title'] . "</a></li>"; ?>
<?php endforeach; ?>
<?php print '</ul>'; ?>
<?php endif; ?>
Всё равно никаких изминений. В ксс так-и есть li.active. Тока вот толку...
А где вы выводите название стиля для ссылки?
Смотрите че покажу:
<?php
foreach ($primary_links as $index => $link) {
$output .= '<td';
if (stristr($index, 'active')) {
$output .= ' class="active"';
$link['attributes']['class'] = 'active';
}
$output .= ">". l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</td>\n";
}
?>
хм.. а куда это кидать? phptemplate? если да, то в какую функцию? шота не совсем догоняю..(
у меня вывод меню в page.tpl.php, а функция phptemplate_menu_links() в template.tpl.php.
Попробуйте заменить phptemplate_menu_links() на NazvanieVasheiTemy_menu_links()
Всё, я окончательно запутался. Сделал всё как вы посоветовали - никакого результата. Попробовал вывести Примари Линкс так как выводят их другие стандартные темы:
<?php if (isset($primary_links)) : ?>
<?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
<?php endif; ?>
Всё сработало, но только наполовину - там где я добавил свои пункты меню (primary) я задавал для них путь: ?q=... . Так вот, выводя ссылки по-своему (как показывал в первых постах) - ссылки были рабочими, только не становились ACTIVE. При выводе этим "друпаловским" способом - ссылки принимают вид ?q=?q=... . Исправив в админке адреса ссылок, заменив вместо, скажем ?q=node/1 на node/1 - всё заработало. Фантастика просто какая-то...
Я понимаю что вникать в это особо желания ни у кого нету, потому прошу только помочь разобратца в том как происходит этот стандартный вывод, и как его темизировать? Т.е. что за такая функция theme(...) и где её тело?