Acties:
  • 0 Henk 'm!

  • peaceful_turing
  • Registratie: Mei 2009
  • Laatst online: 12-10-2023
Hoi allemaal,

ik heb een template gekocht voor een drupal installatie. Ik heb zelf totaal geen verstand van PHP, maar ik ken wel een beetje de hiërarchie ervan.

Ik heb een menu met primary links, waarvan ik wil dat de actieve link wordt 'gemarkeerd' met de class 'active'.
In de page.tpl.php wordt het menu geparsed met de volgende code:
code:
1
2
3
4
5
<?php if (isset($primary_links)) : ?>
    <div class="pr-menu">
          <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
    </div>
<?php endif; ?>


En vervolgens wordt in template.php de 'theme_links' overschreven en de class 'active' toegevoegd.
code:
1
2
3
4
5
$current = '';
if (strstr($class, 'active')) {
$current = ' active';
}
$output .= '<li class="'. $extra_class . $class . $current .'">';


In het CSS bestand wordt vervolgens aan de active class een andere stijl dan aan de niet-actieve links toegewezen, dus hier kan het niet aan liggen.
code:
1
ul.primary-links li a:hover, ul.primary-links li a.active { background:url(images/bg-li-act.png) no-repeat 0 0; color:#bebebe;}


Toch wordt een 'active' button hetzelfde weergegeven als een niet-actieve button. In firebug is ook nergens een 'active' class te bekennen, terwijl ik op de homepage (die zich in het menu bevindt) zit te kijken. Ook bij de andere links werkt het niet.

Zien jullie een fout? Of moet ik het op een andere manier aanpakken.

Bedankt,
Joachim

Acties:
  • 0 Henk 'm!

  • dtech
  • Registratie: Juni 2005
  • Laatst online: 13-06 23:19
Wat is je HTML source? Zit active wel juist in die de HTML?

Als ik het goed lees is dat dus niet zo, en lijkt het dus dat $class niet "active" bevat in je template.php

Ik ben zelfs niet bekend met het drupal systeem, maar meestal moet je classes e.d. direct instellen in de template file, niet in het php file. Zou je daar niet kijken?

Acties:
  • 0 Henk 'm!

  • peaceful_turing
  • Registratie: Mei 2009
  • Laatst online: 12-10-2023
dtech schreef op zaterdag 29 januari 2011 @ 12:58:
Wat is je HTML source? Zit active wel juist in die de HTML?

Als ik het goed lees is dat dus niet zo, en lijkt het dus dat $class niet "active" bevat in je template.php

Ik ben zelfs niet bekend met het drupal systeem, maar meestal moet je classes e.d. direct instellen in de template file, niet in het php file. Zou je daar niet kijken?
Het menu wordt in een regeltje geparsed, de links zie ik alleen in de html en worden niet afzonderlijk geparsed.
$class geldt alleen voor het menu en niet voor de links afzonderlijk.

In firebug ziet het er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
<div class="pr-menu">
    <ul class="links primary-links">
        <li class="first menu-701">
            <a href="doet er niet toe">
                <span class="menu-701" title="De homepage">
                    <span>Home</span>
                </span>
            </a>
        </li>
    </ul>                        
</div>

Acties:
  • 0 Henk 'm!

  • peaceful_turing
  • Registratie: Mei 2009
  • Laatst online: 12-10-2023
Ik heb al een oplossing, maar daarbij heb ik wel wat hulp nodig.
Ik heb een snippet die de pagina-url opvraagt en die stopt in de variabele (?) '$pageURL'
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>


Nu wil ik dus ik het dus zo oplossen door als de pagina-url gelijk is aan de 'li url', de class verandert in 'active'.
Op deze manier dus:
code:
1
2
3
4
5
6
7
<li class=" first menu-701">
        <a href="http://www.artisanfotografie.nl/">
            <span class="<?php if($curPageURL == "http://localhost/artisan/"); ?>active <?php endif;?> menu-701" title="De homepage">
                <span>Home</span>
            </span>
        </a>
    </li>

Dit geeft een parse error. Dit vond ik aardig logisch, want dit heb ik geschreven terwijl ik geen eens PHP ken :X. Weten jullie hoe ik
code:
1
<?php if($curPageURL == "http://localhost/artisan/"); ?>active <?php endif;?>
wel goed kan laten werken?

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 00:29
Voor de parse error: lees die error en vergelijk jouw if met andere if's die al in die PHP-bestanden staan (een voorbeeld vind je in je eigen TS) of zoek de syntax voor if-statements op in de manual. Sowieso is het bij het vragen om hulp natuurlijk handig als je de error ook laat zien (al is het hier makkelijk te zien).

Dan ben je er nog niet, want de variabele (ja, een $-teken wijst op een variabele, zie weer de manual) $curPageURL zie ik nergens een waarde krijgen. curPageURL uit je snippet is geen variabele, want geen $-teken en kijk vooral naar het woord ervoor in regel 2 en weer naar de manual. Naast PHP ken je dan denk ik ook geen andere programmeertaal, anders zou je niet zoiets doen (of je hebt niet alles laten zien). Enige basiskennis wordt hier toch wel verwacht, en als ik nog meer zeg dan bovenstaande hints wordt het echt voorkauwen.

[ Voor 3% gewijzigd door Raynman op 29-01-2011 15:34 ]


Acties:
  • 0 Henk 'm!

  • peaceful_turing
  • Registratie: Mei 2009
  • Laatst online: 12-10-2023
Ik ken VBA :D

Acties:
  • 0 Henk 'm!

Verwijderd

if( testa ) { ?>active<? } ?>

Acties:
  • 0 Henk 'm!

  • amahusu
  • Registratie: Juni 2002
  • Laatst online: 14-08 19:28

amahusu

taking over the world!

killking463 schreef op zaterdag 29 januari 2011 @ 15:05:
Ik heb al een oplossing, maar daarbij heb ik wel wat hulp nodig.
Ik heb een snippet die de pagina-url opvraagt en die stopt in de variabele (?) '$pageURL'
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function curPageURL() {
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") {
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
 } else {
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 }
 return $pageURL;
}
?>


..
kan volgens mij makkelijker met jquery

code:
1
2
3
4
5
$(".pr-menu a").each(function() {
var hreflink = $(this).attr("href");
if (hreflink.toLowerCase()==location.href.toLowerCase()) {
    $(this).parent("li").addClass("active");
}


overigens kan je eens proberen om die add class functie uit je template.php te halen. Als het goed is pakt drupal dan de default functie voor de active class.

[ Voor 45% gewijzigd door amahusu op 30-01-2011 00:11 ]

Always Outnumbered, Never Outgunned // Some people feel the rain, others just get wet


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Zet Drupal niet standaard altijd al een "active" class op de <a> van primary links? En een "active-trail" op de <li> (en parent <li>'s)?

Overgens wil je dit met PHP (of een andere server side taal) oplossen, en niet met jQuery. Ook voor mensen die geen javascript aan hebben is het belangrijk te kunnen zien welk item actief is.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

OkkE schreef op maandag 31 januari 2011 @ 14:39:

Overgens wil je dit met PHP (of een andere server side taal) oplossen, en niet met jQuery. Ook voor mensen die geen javascript aan hebben is het belangrijk te kunnen zien welk item actief is.
dit ^

Als je dit met jQuery op gaat lossen ben je serieus aan het doorslaan.
Pagina: 1