[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Aktive Seite farbig unterlegt
Seite 1 von 1

Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 10:07
von An We
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

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 14:02
von Sysix
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

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 15:30
von An We
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'?

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 15:54
von RexDude
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 ;)

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 16:42
von An We
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

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 17:23
von RexDude
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.

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 17:59
von An We
Sorry, aber mit diesem Code bekomme ich gar keine Ausgabe..
Was heißt denn "in ne vernünftig benannte Konstante packen"?

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 18:02
von An We
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"' : ''; ?>    

Re: Aktive Seite farbig unterlegt

Verfasst: 28. Apr 2015, 19:58
von RexDude
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?

Re: Aktive Seite farbig unterlegt

Verfasst: 29. Apr 2015, 08:40
von An We
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

Re: Aktive Seite farbig unterlegt

Verfasst: 29. Apr 2015, 09:13
von RexDude
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: