An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Aktive Seite farbig unterlegt

28. Apr 2015, 10:07

Hallo Forum,

Ich benutze ein Dropdown Menu mit folgendem Code:

Code: Alles auswählen

   <ul>
   <li<?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'redaxo://1') ? ' id="current"' : ''; ?>
      <?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'redaxo://2') ? ' id="current"' : ''; ?>
      <?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'redaxo://3') ? ' id="current"' : ''; ?>>
                                <a href="redaxo://1">Produkte</a>
                                <ul>
                                  <li><a href="redaxo://2">Baugruppen</a></li>
                                  <li><a href="redaxo://3">Sonstiges </a></li>
                                </ul>
                        </li>
<li<?php echo (basename( $_SERVER['REQUEST_URI'] ) == redaxo://4) ? ' id="current"' : ''; ?>>
                                <a href="redaxo://4">Kontakt</a>
                        </li>  
</ul>

Ich möchte gerne, dass sobald ein Artikel (Seite) dieser Kategorie aktiv ist, die id="current" im code einbezogen wird und der Navigationspunkt "Produkte" oder "Baugruppen" farbig hinterlegt wird.
Das hatte in meinen Navigationen bisher immer funktioniert, seit ich mit SEO42 arbeite, wird id="current" ignoriert.
Was mache ich falsch?

Redaxo 4.6.1, PHP 5.5, Seo42 3.3.0
Vielen Dank für eine Antwort
Anja

Sysix
Beiträge: 101
Registriert: 23. Sep 2014, 15:08

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 14:02

Hallo,

So wie es aussieht, ist es kein Wunder, dass es nicht funktioniert.

Hier ein paar Tipps:
  • benutze statt id="current" lieber, class="current". Zustände werden in meistens in Klassen beschrieben
  • benutzte nicht REQUEST_URI. Wieso? Weil man nie sicher sein kann. Für dein Problem gibt es Konstanten
    http://webbude.com/files/ooredaxo_41.pdf
  • benutzte in Templates nie redaxo://..., dafür gibt es die PHP Funktion rex_getUrl() wo sich automatisch auch das SEO42 Addon einklinkt.
  • eine Feste Navigation? Kann man machen, aber ich glaub das würde auch modularisch gehen :)
Gruß Sysix

An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 15:30

Hallo Sysix,

herzlichen Dank für die Tipps, mein Code sieht jetzt folgendermaßen aus:

Code: Alles auswählen

 <li<?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'rex_getUrl(1)') ? ' class="current"' : ''; ?>
                        <?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'rex_getUrl(2)') ? ' class="current"' : ''; ?>
                        <?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'rex_getUrl(3)') ? ' class="current"' : ''; ?>
                        <?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'rex_getUrl(4)') ? ' class="current"' : ''; ?>>
                              <a href="<?php echo rex_getUrl(1) ?>"  title="Produkte 1" >Produkte 1</a>


                                <ul>
                                  <li><a href="<?php echo rex_getUrl(2) ?>" title="Produkte 2" >Produkte 2</a></li>
                                  <li><a href="<?php echo rex_getUrl(3) ?>" title="Produkte 3" >Produkte 3</a></li>
                                  <li><a href="<?php echo rex_getUrl(4) ?>" title="Produkte 4" >Produkte 4</a></li>
                                </ul>
                        </li>


Im Quellcode steht immer noch:
<li >..., d.h. die Klasse wird nicht angezogen..
Was gibt es denn für eine Alternative für 'REQUEST_URI'?

Benutzeravatar
RexDude
Beiträge: 2518
Registriert: 22. Apr 2010, 11:24

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 15:54

Das Zauberwort heisst debuggen.
Schau doch mal was das raus kommt: (basename( $_SERVER['REQUEST_URI'] )
Und was hier: rex_getUrl(2)
(da du ja die zweit Werte vergleichst musst natürlich mal gucken ob die sich vergleichen lassen)
Vielleicht muss man lediglich ein Slash voranstellen oder so.
Desweiteren macht es keinen Sinn das du ein Funktionsaufruf innerhalb von Anführungszeichen setzt ;)

An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 16:42

Hallo RexDude,

merci für die Antwort, es lag tatsächlich an dem Vergleich der beiden Werte, habe jetzt

Code: Alles auswählen

<li<?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'rex_getUrl(1)') ? ' class="current"' : ''; ?>
mit

Code: Alles auswählen

<li<?php echo (basename( $_SERVER['REQUEST_URI'] ) == 'produktexx.html') ? ' id="current"' : ''; ?>  
ersetzt, und jetzt funktionierts..!

Trotzdem habe ich noch eine Frage, ich habe gelesen, dass 'REQUEST_URI' sehr anfällig für Manipulationen ist; die Alternative 'SCRIPT_NAME' gibt mir aber nur index.php aus, nicht produktexx.html.
Gibt es noch andere Möglichkeiten?

Herzlichen Dank nochmal für die Antwort!
Anja

Benutzeravatar
RexDude
Beiträge: 2518
Registriert: 22. Apr 2010, 11:24

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 17:23

Wie schon Sysix dir sagte ist das keine gute Lösung. Du hast doch die aktuelle Artikel ID in z.B. $REX['ARTICLE_ID']. Dann brauchst du doch nur sowas s.u. machen und hast nix mehr mit den Urls zu tun. Insbesondere weil du jetzt auch noch ne hartcodierte Url benutzt hast. Das geht eigentlich gar nicht :cry:

So machen:

Code: Alles auswählen

<li<?php echo ($REX['ARTICLE_ID']) == 1) ? ' class="current"' : ''; ?>
Und dann noch die Id in ne vernünftig benannte Konstante packen und es wäre noch sauberer.

An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 17:59

Sorry, aber mit diesem Code bekomme ich gar keine Ausgabe..
Was heißt denn "in ne vernünftig benannte Konstante packen"?

An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 18:02

Ich glaub, da hat noch ein Komma gefehlt, wäre es so korrekt?

Code: Alles auswählen

<li<?php echo (($REX['ARTICLE_ID']) == '1') ? ' class="current"' : ''; ?>    

Benutzeravatar
RexDude
Beiträge: 2518
Registriert: 22. Apr 2010, 11:24

Re: Aktive Seite farbig unterlegt

28. Apr 2015, 19:58

Sorry, aber mit diesem Code bekomme ich gar keine Ausgabe..
Ja dann schalt vielleicht mal deine Fehlermeldungen ein und behebe den Fehler. Hab extra zum üben für dich einen drin gelassen ;)

Und wie ich schon sagte: das Zauberwort heisst debuggen :lol:
Was heißt denn "in ne vernünftig benannte Konstante packen"?

Code: Alles auswählen

define('ID_HOME', 1);
define('ID_NEWS', 2);
etc.

Code: Alles auswählen

<li<?php echo (($REX['ARTICLE_ID']) == ID_HOME) ? ' class="current"' : ''; ?>
<li<?php echo (($REX['ARTICLE_ID']) == ID_NEWS) ? ' class="current"' : ''; ?>    
Besser zu lesen oder?

An We
Beiträge: 36
Registriert: 13. Nov 2012, 17:28

Re: Aktive Seite farbig unterlegt

29. Apr 2015, 08:40

Mit "Komma gefehlt" meinte ich natürlich "Klammer gefehlt", aber jetzt funktioniert alles einwandfrei, nochmals vielen Dank für die Hilfe :D und die Nachhilfe :wink: !
Gruß Anja

Benutzeravatar
RexDude
Beiträge: 2518
Registriert: 22. Apr 2010, 11:24

Re: Aktive Seite farbig unterlegt

29. Apr 2015, 09:13

Ja die meisten scheine hier etwas Nachilfe in Sachen Programmieren zu brauchen. Die Top 3 Themen dabei sind:

- Wie Google ich richtig?
- Debuggen? Noch nie gehört!
- Ach ne Readme gibt es auch?

:lol:

Zurück zu „Templates/Navigationen [R4]“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste