Theme AddOn - Language Switcher

Benötigt das Theme Addon

Was macht es?

Eine kleine Funktion um die Sprachen im Frontend als stylebare Liste auszugeben.

Die Funktion

Lege eine Datei namens clang_switch.php im Theme Addon im Ordner theme/private/inc/frontend an.

Inhalt der Datei

<?php
/* ----- Language Switch -----
$showCurLang : true / false - if the current language shall be displayed
$wrappingList: true / false - adds wrapping ul with extra css if given
$countryCode : true / false - Shows Country Code as Name
$fallbackHome : true / false - Shows Language Homepage if article is not online
$css_extra   : adds extra css classes
   ----- Language Switch ----- */

if(!function_exists("getLangNav"))
{
    function getLangNav($showCurLang = true, $wrappingList = true, $countryCode = true, $fallbackHome = false, $css_extra = '')
    {
        $langOutput = '';

        $langOutput  .= ($wrappingList ? '<ul class="lang--nav '.$css_extra.'">' : '');
        $langs = rex_clang::getAll();
            if($showCurLang) {
                $langOutput .= '<li class="lang--item lang--item__active lang--' . rex_clang::getCurrent()->getCode() . '">' . ($countryCode ? rex_clang::getCurrent()->getCode() : rex_clang::getCurrent()->getName()) . '</li>';
            }
        unset($langs[rex_clang::getCurrentId()]);
        foreach($langs as $lang) {
            if($lang->isOnline()) {
                if(rex_article::getCurrent($lang->getId())->isOnline()) {
                    $langOutput .= '<li class="lang--item lang--item__inactive lang--'.$lang->getCode().'"><a title="'.$lang->getName().'" href="'.rex_getUrl('',$lang->getId()).'">'.($countryCode ? $lang->getCode() : $lang->getName()).'</a></li>';
                } elseif ($fallbackHome == true && rex_article::getSiteStartArticle($lang->getId())->isOnline()) {
                    $langOutput .= '<li class="lang--item lang--item__inactive lang--'.$lang->getCode().'"><a title="'.$lang->getName().'" href="' . rex_article::getSiteStartArticle($lang->getId())->getUrl() . '">'.($countryCode ? $lang->getCode() : $lang->getName()).'</a></li>';
                }
            }
        }
        $langOutput .= ($wrappingList ? '</ul>' : '');
        return $langOutput;
    }
}

Einbinden in Theme

Anschließend wird die Datei clang_switch.php in die functions.php im Ordner theme/private/incein.

z.B so:

<?php

if (!rex::isBackend()) {
    // Frontend

    include('frontend/clang_switch.php');

} else {
    // Backend

    //get REDAXO config file
    $configFile = rex_path::coreData('config.yml');
    $config = rex_file::getConfig($configFile);

    if (isset($config['debug']) && $config['debug'] === true) {
        // Optional Debug Module Function - Infos: https://github.com/FriendsOfREDAXO/tricks/blob/master/theme_debug_module.md
        //include('backend/debug_module.php');
    }
}

Ausgabe im Template

Jetzt kann die Ausgabe der Funktion an beliebiger Stelle im Template ausgegeben werden.

<?php

echo getLangNav(true, true, true, 'my--class');

Theme Debug Module

Eine kleine Funktion um die Inhalte der REX_VALUES auszugeben. Vor allem hilfreich beim Einsatz von MForm und MBlock. Zur Anleitung: Theme Debug Module