Angenommen man hat folgende Struktur:
Code:
- OnePageWebsite <-- reference, regular structure module, navigation module
- Page 1
- Page 2
- Page 3
Man legt also die OnePageWebsite Page als Referenzseite fest und möchte dort auch die Ausgabe der Subpages für die OnePageWebsite machen. In so fern hat man auch das Navigationsmodul dort, bzw. im Seiten-Layout eingebunden.
Jetzt bereitet aber folgender Code ein Problem: system/modules/onepagewebsite/OnePageWebsite/Frontend/ModuleOnePageWebsiteNavigation.php, Zeile #173 ff.
PHP-Code:
// href
if($objJumpTo->id != $objPage->id && $objJumpTo->id > 0)
{
$href = $this->generateFrontendUrl($objJumpTo->row()) . '#page' .$objSubpages->id;
}
else
{
$href = '#page' .$objSubpages->id;
}
Die Condition verursacht, dass, wenn die Referenz-Seite und die aktuelle Seite gleich sind, der href zB nur "#page1" wird, anstatt bspw. "onepagewebsite.html#page1".
Dies mag zwar auf den ersten Blick sinnvoll erscheinen, allerdings funktionieren anchor links nicht, wenn ein <base href="..."> existiert! Solche Links, also wie zB href="#page1" führen dann immer zu der im base href angegeben URL, also zB http://www.domain.com/#page1.
Beispiel, unabhängig von Contao und OPW: angenommen man hat eine foo.html auf domain.com. In dieser foo.html befindet sich bspw.
PHP-Code:
<a href="#target">...</a>
...
<h2 id="target">...</h2>
Ohne base href funktioniert dies wunderbar, der Browser möchte dann zu http://www.domain.com/foo.html#target springen, wenn man den Link betätigt. Hat man allerdings folgendes:
PHP-Code:
<base href="http://www.domain.com/">
...
<a href="#target">...</a>
...
<h2 id="target">...</h2>
funktioniert dies nicht mehr. Der Browser wandelt href="#target" zu http://www.domain.com/#target um anstatt http://www.domain.com/foo.html#target
Beispiel online: http://www.inspiredminds.at/files/mi...ehref/foo.html
Insofern ist es wahrscheinlich sinnvoll sowieso immer
PHP-Code:
$href = $this->generateFrontendUrl($objJumpTo->row()) . '#page' .$objSubpages->id;
zu verwenden (und ggf. den $objJumpTo->id > 0 check zu Zeile #165 hinzu zu fügen), da Contao den base href tag ja immer ausgibt, sofern man das nicht selbst ändert.
Unter Umständen ist dieser Fehler bis jetzt noch niemanden aufgefallen, weil die empfohlene Struktur ja so aussieht:
Code:
- Foo <-- regular structure, navigation module
- Referenz <-- reference
- Page 1
- Page 2
- Page 3
Da tritt der Fehler ja nicht auf, weil
PHP-Code:
$objJumpTo->id != $objPage->id
immer true ist.
Lesezeichen