$_Cookie voor geselecteerde taal
... maar dan nog: "/nl" != "nl"?
Rob Doemaarwat op 02/10/2018 18:12:00:
... maar dan nog: "/nl" != "nl"?
@Rob Doemaarwat. De slash staat daar handmatig en is gedefinieerd in Router.php en in de header(Location) zoals eerder getoond.
en als ik $_COOKIE['lang']; echo krijg ik de de juiste waarde nl, en of de dus daar is niets mis mee en zoals gezegd het werkt.
Gewijzigd op 02/10/2018 21:03:15 door Donald Boers
Het is een beetje een verwarrend draadje inmiddels. Kun je nog eens uitleggen wat er precies misgaat?
Ozzie PHP op 02/10/2018 22:19:20:
@Donald
Het is een beetje een verwarrend draadje inmiddels. Kun je nog eens uitleggen wat er precies misgaat?
Het is een beetje een verwarrend draadje inmiddels. Kun je nog eens uitleggen wat er precies misgaat?
@Ozzie. Ik ga het proberen :)
In mijn navigatie heb ik een talen dropdown (Bootstrap dropdown), waarbij de actieve taal de dropdown trigger is en de overige talen in het daadwerkelijke dropdown menu staan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<li class="nav-item dropdown">
<?php if (!isset($_COOKIE["language"]) || ($_COOKIE["language"] == 'nl')): ?>
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/nl.png"> Nederlands //Nederlands is actief
</a>
<div class="dropdown-menu">
<a href="/en<?php echo $current_route?>" class="dropdown-item">
<img src="/images/flaggs/uk.png"> English
</a>
<a href="/de<?php echo $current_route?>" class="dropdown-item">
<img src="/images/flaggs/de.png"> Deutch
</a>
</div>
<?php elseif ($_COOKIE["language"] == 'en' ): ?>
// Zelfde als boven maar dan voor Engels
<?php elseif ($_COOKIE["language"] == 'de' ): ?>
// Zelfde als boven maar dan voor Duits
<?php endif; ?>
</li>
<?php if (!isset($_COOKIE["language"]) || ($_COOKIE["language"] == 'nl')): ?>
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/nl.png"> Nederlands //Nederlands is actief
</a>
<div class="dropdown-menu">
<a href="/en<?php echo $current_route?>" class="dropdown-item">
<img src="/images/flaggs/uk.png"> English
</a>
<a href="/de<?php echo $current_route?>" class="dropdown-item">
<img src="/images/flaggs/de.png"> Deutch
</a>
</div>
<?php elseif ($_COOKIE["language"] == 'en' ): ?>
// Zelfde als boven maar dan voor Engels
<?php elseif ($_COOKIE["language"] == 'de' ): ?>
// Zelfde als boven maar dan voor Duits
<?php endif; ?>
</li>
Nederlands is de default taal voor de website dus als het een eerste bezoek betreft bestaat er uiteraard nog geen Cookie en deze wordt dan gezet met de waarde nl.
Het zetten van de Cookies vindt plaats in de main Controller op de volgende manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$lang = filter_input(INPUT_GET, 'lang');
$route = filter_input(INPUT_GET, 'route');
if ( !$lang ) {
if ( isset($_COOKIE["language"]) ) {
$lang = $_COOKIE["language"];
} else {
$lang = 'nl';
}
header("Location: /$lang/$route");
exit;
} else {
$lang = (string)$lang;
//setcookie( 'language', $lang, time() + 60*60*24*365, '/' );
setcookie( 'language', $_COOKIE["lang"] = $lang, time() + 60*60*24*365, '/' );
}
$route = filter_input(INPUT_GET, 'route');
if ( !$lang ) {
if ( isset($_COOKIE["language"]) ) {
$lang = $_COOKIE["language"];
} else {
$lang = 'nl';
}
header("Location: /$lang/$route");
exit;
} else {
$lang = (string)$lang;
//setcookie( 'language', $lang, time() + 60*60*24*365, '/' );
setcookie( 'language', $_COOKIE["lang"] = $lang, time() + 60*60*24*365, '/' );
}
Waarbij $lang en $route de taal en huidige route(pagina/template) vertegenwoordigen die gebruikt worden in header Location:
en in het dropdown menu:
Het probleem heeft niets te maken met het veranderen van de taal ($lang) en het verwijzen naar de juiste template ($route) want dat werkt prima. M.a.w. als ik op bijvoorbeeld de contact pagina in het Nederlands besluit dat ik van taal wil veranderen en ik kies voor Engels, veranderd de taal naar Engels (waarde van $_COOKIE['language'] veranderd in en) en kom ik inderdaad op de contact pagina terecht. Dus de variabelen $lang en $rout werken zoals gewenst
Mijn probleem heeft te maken met het dropdown menu. Zoals ik al eerder aangaf is de actieve taal (vlag en naam) de trigger voor het dropdown menu:
Code (php)
1
2
3
4
5
2
3
4
5
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/nl.png"> Nederlands //Nederlands is actief
</a>
</li>
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/nl.png"> Nederlands //Nederlands is actief
</a>
</li>
Dus met bovengenoemd voorbeeld zouden de vlag en naam van de trigger na de keuze voor Engels uit het dropdown menu ook moeten veranderen naar de Engelse variant:
Code (php)
1
2
3
4
5
2
3
4
5
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/uk.png"> English //Engels is actief
</a>
</li>
<a class="nav-link dropdown-toggle" href="#">
<img src="/images/flaggs/uk.png"> English //Engels is actief
</a>
</li>
Maar dat werkt dus niet. Ik moet de pagina handmatig verversen voordat de actieve link ook verandert naar de juiste variatie (Engels in dit geval).
Ik hoop dat ik mijzelf zo een beetje duidelijk heb gemaakt
Gewijzigd op 03/10/2018 11:15:22 door Donald Boers
Maak van regel 15 in de main controller (zoals hierboven) eens:
@Rob Doemaarwat. Wat ben ik een sukkel :(. De hand gaat geheel in eigen boezem. Bedankt man. Ik ben je een biertje verschuldigd. Komt omdat ik eerst met $_COOKIE['lang'] werkte maar om het onderscheid te maken heb ik daar language van gemaakt. Je bent een topper