Primary .active - не пашет

Главные вкладки

Аватар пользователя patison patison 11 мая 2008 в 21:27

И снова здравствуйте, товарисчи! Smile
Вобщем дело такое. Есть меню с primary линками. в css прописал все стили для них. Всё работает.
не понятно только одно: Как сделать так, что-бы при переходе по одной из Праймари Ссылок, эта ссылка приобретала class="avtive". Т.е. что-б на странице куда указывает данный линк, он отображался как-нибудь отлично от остальных.

Заранее спасибо!

Комментарии

Аватар пользователя EllECTRONC EllECTRONC 12 мая 2008 в 1:20

мммммммм.............., да они (ссылки) и так становятся активными, при переходе! Главное чтоб в css все было прописано! Если надо чтоб link или active или hover отличались, так и отличите - пропишите разное оформлении....цвета поменяйте, к примеру, .............для проверки правильности.
Убедитесь что другие модули не используют свои стили для ссылок и не перекрывают стили темы.
Если вы используете IE, выкиньте его нах.............!

Аватар пользователя Химический Али Химический Али 12 мая 2008 в 15:28

Есть такая проблема. Активной ссылке в стиль дописывается "-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;
}
?>
Аватар пользователя patison patison 13 мая 2008 в 0:31

Хм..
2EllECTRONC:
не, пролема именно в том что <a> не "превращается" в active. Т.е., допустим есть

<a href='/diabet/?q=node/2'>

Так вот по идее, при переходе на /diabet/?q=node/2 должно получаться

<a href='/diabet/?q=node/2' class="active">

Или я чего-то не понимаю?

Химический Али, добавил в template.php. не вылечило.

Аватар пользователя patison patison 13 мая 2008 в 11:20

тему свою сваял, на базе уже готовой. меню вывожу таким образом:

<?php if (is_array($primary_links)) : ?>
                                               
<?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; ?>

Аватар пользователя EllECTRONC EllECTRONC 13 мая 2008 в 12:14

Обычно primary выводится списком, т.е в CSS должно быть ЧТО-ТО типа:
ul.primary-links li.active
ЕСЛИ и ЭТО НЕ ПОМОЖЕТ, то не знаю... мож ты кеширование css включил!?!
В конце концов - покажи сайт, посмотрим! НУ или хоть приаттач страничку в html виде

Аватар пользователя patison patison 13 мая 2008 в 12:55

хм. ща попробуем поменять. а сайт покажу в любом случае. хотя-бы что-б оценили. на днях запускаем. после дам линк Smile

Аватар пользователя patison patison 13 мая 2008 в 13:57

неа.. всё то-же.. сделал так:


<?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. Тока вот толку...

Аватар пользователя Химический Али Химический Али 13 мая 2008 в 14:25

Смотрите че покажу:

<?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";
              }
?>
Аватар пользователя patison patison 15 мая 2008 в 0:04

Всё, я окончательно запутался. Сделал всё как вы посоветовали - никакого результата. Попробовал вывести Примари Линкс так как выводят их другие стандартные темы:


<?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(...) и где её тело?