$_Cookie voor geselecteerde taal

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Rob Doemaarwat

Rob Doemaarwat

02/10/2018 18:12:00
Quote Anchor link
... maar dan nog: "/nl" != "nl"?
 
PHP hulp

PHP hulp

22/11/2024 11:12:26
 
Donald Boers

Donald Boers

02/10/2018 20:33:46
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header("Location: /en/$route");

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
 
Ozzie PHP

Ozzie PHP

02/10/2018 22:19:20
Quote Anchor link
@Donald

Het is een beetje een verwarrend draadje inmiddels. Kun je nog eens uitleggen wat er precies misgaat?
 
Donald Boers

Donald Boers

03/10/2018 11:06:29
Quote Anchor link
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?

@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)
PHP script in nieuw venster Selecteer het PHP script
1
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">&nbsp;&nbsp;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">&nbsp;&nbsp;English
            </a>
            <a href="/de<?php echo $current_route?>" class="dropdown-item">
                <img src="/images/flaggs/de.png">&nbsp;&nbsp;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)
PHP script in nieuw venster Selecteer het PHP script
1
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, '/' );    
}

Waarbij $lang en $route de taal en huidige route(pagina/template) vertegenwoordigen die gebruikt worden in header Location:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header("Location: /$lang/$route");

en in het dropdown menu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="/en<?php echo $route?>" class="dropdown-item">

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#">
        <img src="/images/flaggs/nl.png">&nbsp;&nbsp;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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#">
        <img src="/images/flaggs/uk.png">&nbsp;&nbsp;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
 
Rob Doemaarwat

Rob Doemaarwat

03/10/2018 12:28:25
Quote Anchor link
Maak van regel 15 in de main controller (zoals hierboven) eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
setcookie( 'language', $_COOKIE["language"] = $lang, time() + 60*60*24*365, '/' );
//                                   ^^^^ dit ontbrak ...
 
Donald Boers

Donald Boers

03/10/2018 13:25:18
Quote Anchor link
@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
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.