Projekt - část 10

Projekt - část 10

V tomto úkolu vyřešíme přepínání jazyka na webu, použijeme k tomu session.

1. Abych mohl se session pracovat, musíme ji nejprve spustit. Nejlepší bude session spustit hned na začátku v souboru index.php za nastavením pro reportování chyb, které by jsi měla mít na prvních třech řádcích. Na další řádek tedy přidej session_start();

2. Dále budeme pracovat v soboru config.php, zde máme proměnnou jazyk, do které ukládáme jazyk webu, tu nahradíme tak, aby se buď proměnná načetla ze session a pokud tam není uložena, tak se použije češitna. Kód kterým nahradíme proměnnou jazyk, může vypadat například takto: $jazyk = $_SESSION['jazyk'] ?? 'cs';

3. Do souboru config.php si ještě přidáme pole povolených jazyků tak, že v poli bude jako klíč vždy kód jazyka a jako hodnota jeho textový název. Stačí, když zde přidáme hodnoty pro češtinu a angličtinu. Po tomto kroku by začátek souboru config.php měl vypadat takto:

<?php

$jazyk = $_SESSION['jazyk'] ?? 'cs';
require __DIR__ . '/preklady/' . $jazyk . '.php';

$povoleneJazyky = [
  'cs' => 'Čeština',
  'en' => 'English',
];

4. Dále upravíme zobrazení aktuálního jazyka a odkazy na jeho přepnutí v souboru layout/navigation.php.

5. K hodnotě aktuálně nastaveného jazyka se dostaneme když provedeme echo $povoleneJazyky[$jazyk];. To použij v textu odkazu, který má na sobě jako jednu z tříd dropdown-toggle

6. Napiš cyklus, který projde pole povolených jazyků (z pole budme potřebovat jak klíč, tak hodnotu) a vypíše položky s odkazy v seznamu s třídou dropdown-menu. Odkaz bude vypadat například takto: href="?stranka=jazyk&jazyk=cs", tzn. směřuje na stránku jazyk a ještě jako GET parametr jazyk je předán kód jazyka, jako text odkazu bude hodnota s nnázvem jazyka.

7. Kód v layout/navigation.php by měl nyní vypadat takto:

<!-- Navigation-->
<div id="progress-bar" class="progress-bar"></div>
<nav class="navbar navbar-expand-lg navbar-light" id="mainNav">
  <div class="container px-4 px-lg-5">
    <a class="navbar-brand" href="?stranka=domu"><?php echo preloz('pageName'); ?></a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
      Menu
      <i class="fas fa-bars"></i>
    </button>
    <div class="collapse navbar-collapse" id="navbarResponsive">
      <ul class="navbar-nav ms-auto py-4 py-lg-0">
        <?php echo vypisMenu($polozkyMenu); ?>
        <li class="nav-item dropdown">
          <a class="nav-link px-lg-3 py-3 py-lg-4 dropdown-toggle" href="#" id="navbarDarkDropdownMenuLink" role="button" data-bs-toggle="dropdown" aria-expanded="false">
            <?php echo $povoleneJazyky[$jazyk]; ?>
          </a>
          <ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="navbarDarkDropdownMenuLink">
            <?php foreach ($povoleneJazyky as $kodJazyka => $povolenyJazyk) : ?>
              <li><a class="dropdown-item" href="?stranka=jazyk&jazyk=<?php echo $kodJazyka; ?>"><?php echo $povolenyJazyk; ?></a></li>
            <?php endforeach; ?>
          </ul>
        </li>
      </ul>
    </div>
  </div>
</nav>

8. Nyní nám již stačí jen ve složce controller vytvořit soubor jazyk.php, který nám zajistí uložení vybraného jazyka do session a jelikož tato stránka nebude mít žádnou šablonu, tak zajistíme přesměrování uživatele zpět na domovskou stránku. Přesměrování jsme ještě nedělali, ale hned si jej vyzkoušíme. Slouží k němu funkce header("location: XXX"); jen XXX v kódu nahradíme za stránku kam chceme přesměrovat, v našem případě tedy header("location: index.php");. Za touto funkcí by měla vždy být ještě zavolána funkce exit();, která zajistí, že php kód skutešně nebude dál pokračovat a dojde správně k přesměrování. Controller jazyk.php by tedy mohl vypadat takto:

<?php

$novyJazyk = $_GET['jazyk'] ?? 'cs';

if (array_key_exists($novyJazyk, $povoleneJazyky)) {
  $_SESSION['jazyk'] = $novyJazyk;
} else {
  $_SESSION['jazyk'] = 'cs';
}

header("location: index.php");
exit();