diff --git a/.gitignore b/.gitignore index 8a247dc6..61c677d4 100755 --- a/.gitignore +++ b/.gitignore @@ -36,9 +36,12 @@ site/data/journal.log .DS_Store site/.DS_Store site/file/.DS_Store -site/tmp/5f7f5e998762c.png -site/tmp/5f7f5e9987628.png -site/tmp/5f7f5ea3e983b.png -site/tmp/5f7f5ea3e9837.png -site/tmp/5f7f5ea20d5eb.png -site/tmp/5f7f5ea20d5ee.png +site/data/es/locale.json +site/data/es/module.json +site/data/es/page.json +site/data/en/locale.json +site/data/en/module.json +site/data/en/page.json +site/data/de/locale.json +site/data/de/module.json +site/data/de/page.json \ No newline at end of file diff --git a/CHANGES.md b/CHANGES.md index 7c203ebe..b650f752 100755 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,7 +15,38 @@ - Approbation des commentaires - Gestion des thèmes : - Bouton de réinitialisation avec confirmation - + - Traduction automatique dans la langue du navigateur. + - Amélioration de la structure du flux RSS. + +## Version 10.3.11 +Modification : + - Message sur l'utilisation des cookies +Coorection : + - Recherche inopérante dans les articles des blogs. + +## Version 10.3.10 +Corrections : + - Conflit page inactive et droit d'un membre. + - Module de recherche, correction dans les pages enfants. + - Module formulaire, perte des données en cas d'édition du fomulaire ou des champs. +Modification : + - TinyMCE nettoyage init.js d'options non supportées. + +## Version 10.3.09 +Corrections : + - Configuration : persistance de l'ouverture des blocs. + - Réinitialisation du mot de passe : + - Remise à zéro du timer après renouvellement du mot de passe. + - Affichage de le fenêtre "Nouveau mot de passe" allégée. + - Redirection sur la page d'accueil. + - Modules news et blog : transparence icône RSS. + - Position de l'écran de configuration + +## Version 10.3.08 +Corrections : + - Notification de mise à jour d'update bloqué + - Backup : double commentaire entraînant un bug d'affichage + ## Version 10.3.07 - Petites corrections - Bouton format dans TinyMCE diff --git a/core/class/template.class.php b/core/class/template.class.php index 02795ca2..479b6258 100755 --- a/core/class/template.class.php +++ b/core/class/template.class.php @@ -118,8 +118,7 @@ class template { copy ('core/vendor/zwiico/png/'.$letters[$secondNumber] . '.png', 'site/tmp/' . $secondLetter . '.png'); // Début du wrapper - $html = '
'; - + $html = '
'; // Label $html .= self::label($attributes['id'], ' ' . $operator . '  en chiffres ?', [ diff --git a/core/core.js.php b/core/core.js.php index 8623d83f..be5c6b9d 100755 --- a/core/core.js.php +++ b/core/core.js.php @@ -221,14 +221,18 @@ core.start = function() { /** * Message sur l'utilisation des cookies */ + var analytics = ""; + if (getData(['config', 'analyticsId'])); ?>) { + analytics = ' grâce au cookie Google Analytics' + } if(getData(['config', 'cookieConsent'])); ?>) { if(document.cookie.indexOf("ZWII_COOKIE_CONSENT") === -1) { $("body").append( $("
").attr("id", "cookieConsent").append( - $("").text("En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies et de vos données de visite."), + $("").html("

Ce site utilise des cookies pour assurer l'authentification, améliorer l'expérience utilisateur"+analytics+".
En cliquant sur ”J’accepte”, vous acceptez l’utilisation de ces cookies.

"), $("") .attr("id", "cookieConsentConfirm") - .text("OK") + .text("Accepter") .on("click", function() { // Créé le cookie d'acceptation var expires = new Date(); @@ -237,7 +241,19 @@ core.start = function() { document.cookie = "ZWII_COOKIE_CONSENT=true;" + expires; // Ferme le message $(this).parents("#cookieConsent").fadeOut(); - }) + }), + $("") + .attr("id", "cookieConsentRefuse") + .text("Refuser") + .on("click", function() { + // Créé le cookie d'acceptation + var expires = new Date(); + expires.setFullYear(expires.getFullYear() + 1); + expires = "expires=" + expires.toUTCString(); + document.cookie = "ZWII_COOKIE_CONSENT=false;" + expires; + // Ferme le message + $(this).parents("#cookieConsent").fadeOut(); + }), ) ); } diff --git a/core/core.php b/core/core.php index 26f6d22f..cb81374d 100755 --- a/core/core.php +++ b/core/core.php @@ -45,7 +45,7 @@ class common { const ACCESS_TIMER = 1800; // Numéro de version - const ZWII_VERSION = '10.4.00'; + const ZWII_VERSION = '10.4.00.010'; const ZWII_UPDATE_CHANNEL = "v10"; public static $actions = []; @@ -146,14 +146,28 @@ class common { self::GROUP_MODERATOR => 'Modérateur', self::GROUP_ADMIN => 'Administrateur' ]; + // Langues proposées + public static $i18nList = [ + 'fr' => 'Français (fr)', + 'de' => 'Allemand (de)', + 'en' => 'Anglais (en)', + 'es' => 'Espagnol (es)', + 'it' => 'Italien (it)', + 'nl' => 'Néerlandais (nl)', + 'pt' => 'Portugais (pt)', + ]; + // Langue courante + public static $i18nCurrent = 'fr'; public static $timezone; private $url = ''; // Données de site private $user = []; private $core = []; private $config = []; + // Dossier localisé private $page = []; private $module = []; + private $locale = []; // Descripteur de données Entrées / Sorties // Liste ici tous les fichiers de données @@ -167,7 +181,7 @@ class common { 'theme' => '', 'admin' => '', 'blacklist' => '', - 'translate' => '' + 'locale' => '' ]; /** @@ -182,13 +196,18 @@ class common { $this->input['_COOKIE'] = $_COOKIE; } + // Déterminer le dossier de langues + if (isset($_POST['ZWII_USER_I18N'])) { + self::$i18nCurrent = $_POST['ZWII_USER_I18N']; + } + // Instanciation de la classe des entrées / sorties // Récupére les descripteurs foreach ($this->dataFiles as $keys => $value) { // Constructeur JsonDB $this->dataFiles[$keys] = new \Prowebcraft\JsonDb([ 'name' => $keys . '.json', - 'dir' => $this->dirData ($keys,'fr') + 'dir' => $this->dataPath ($keys,self::$i18nCurrent) ]);; } @@ -208,9 +227,9 @@ class common { // Installation fraîche, initialisation des modules manquants // La langue d'installation par défaut est fr foreach ($this->dataFiles as $stageId => $item) { - $folder = $this->dirData ($stageId, 'fr'); + $folder = $this->dataPath ($stageId, self::$i18nCurrent); if (file_exists($folder . $stageId .'.json') === false) { - $this->initData($stageId,'fr'); + $this->initData($stageId,self::$i18nCurrent); common::$coreNotices [] = $stageId ; } } @@ -220,10 +239,19 @@ class common { $this->user = $this->getData(['user', $this->getInput('ZWII_USER_ID')]); } - // Auto traduction - if ( $this->getData(['translate','active'])) { + // Traduction du site avec le script Google + if ( $this->getData(['config','translate','scriptGoogle'])) { + // Lire la langue stockée dans le cookie (choix manuel) + if ( isset($_COOKIE['ZWII_USER_I18N']) ) { + $lan_cookie = $_COOKIE['ZWII_USER_I18N']; + } // Lire la langue du navigateur - $lan = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); + if ( $this->getData(['config','translate','autoDetect'])) { + $lan_browser = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); + } + + // Priorité : choix manuel - navigateur - fr + $lan = isset($lan_cookie) ? $lan_cookie : (isset($lan_browser) ? $lan_browser : 'fr'); // Changer la locale if ( $lan !== 'fr') { @@ -295,7 +323,7 @@ class common { $this->url = $url; } else { - $this->url = $this->getData(['config', 'homePageId']); + $this->url = $this->getData(['locale', 'homePageId']); } } @@ -691,10 +719,11 @@ class common { * @param $lang langue des pages * @return string du dossier à créer */ - public function dirData($id, $lang) { + public function dataPath($id, $lang) { // Sauf pour les pages et les modules if ($id === 'page' || - $id === 'module') { + $id === 'module' || + $id === 'locale' ) { $folder = self::DATA_DIR . $lang . '/' ; } else { $folder = self::DATA_DIR; @@ -908,9 +937,9 @@ class common { // Fin SMTP } else { $host = str_replace('www.', '', $_SERVER['HTTP_HOST']); - $mail->setFrom('no-reply@' . $host, $this->getData(['config', 'title'])); + $mail->setFrom('no-reply@' . $host, $this->getData(['locale', 'title'])); if (is_null($replyTo)) { - $mail->addReplyTo('no-reply@' . $host, $this->getData(['config', 'title'])); + $mail->addReplyTo('no-reply@' . $host, $this->getData(['locale', 'title'])); } else { $mail->addReplyTo($replyTo); } @@ -945,11 +974,15 @@ class common { * @param array $keys Clé(s) des données */ public function setData($keys = []) { - // Pas d'enregistrement lorsqu'une notice est présente ou tableau transmis vide if (!empty(self::$inputNotices) - OR empty($keys) - OR in_array(NULL, $keys) ) { + OR empty($keys)) { + return false; + } + + // Empêcher la sauvegarde d'une donnée nulle. + if (gettype($keys[count($keys) -1]) === NULL) { + var_dump($keys); return false; } @@ -1453,27 +1486,41 @@ class common { } // Mettre à jour les données des blogs les articles sont dans posts foreach ($pageList as $parentKey => $parent) { - //La page a une galerie + //La page a un blog if ($this->getData(['page',$parent,'moduleId']) === 'blog' ) { - foreach ( $this->getData(['module', $parent]) as $blogKey => $blogItem) { - $data = $this->getdata(['module',$parent,$blogKey]); - $this->deleteData(['module',$parent, $blogKey]); - $this->setData([ 'module', $parent, 'posts', $blogKey, $data ]); + if (is_array($this->getData(['module', $parent]))) { + foreach ( $this->getData(['module', $parent]) as $blogKey => $blogItem) { + if ($blogKey === 'posts' OR $blogKey === 'config') {continue;} + $data = $this->getdata(['module',$parent,$blogKey]); + $this->deleteData(['module',$parent, $blogKey]); + $this->setData([ 'module', $parent, 'posts', $blogKey, $data ]); + } } } } foreach ($pageList as $parentKey => $parent) { - //La page a une galerie + //La page a une news if ($this->getData(['page',$parent,'moduleId']) === 'news' ) { - foreach ( $this->getData(['module', $parent]) as $newsKey => $newsItem) { - $data = $this->getdata(['module',$parent,$newsKey]); - $this->deleteData(['module',$parent, $newsKey]); - $this->setData([ 'module', $parent, 'posts', $newsKey, $data ]); + if (is_array($this->getData(['module', $parent]))) { + foreach ( $this->getData(['module', $parent]) as $newsKey => $newsItem) { + if ($blogKey === 'posts' OR $blogKey === 'config') {continue;} + $data = $this->getdata(['module',$parent,$newsKey]); + $this->deleteData(['module',$parent, $newsKey]); + $this->setData([ 'module', $parent, 'posts', $newsKey, $data ]); + } } } } $this->setData(['core', 'dataVersion', 10306]); } + + // Version 10.3.08 + if ($this->getData(['core', 'dataVersion']) < 10308) { + // RAZ la mise à jour auto bug 10.3.07 + $this->setData(['core','updateAvailable', false]); + $this->setData(['core', 'dataVersion', 10308]); + } + // Version 10.4.00 if ($this->getData(['core', 'dataVersion']) < 10400) { // Ajouter le prénom comme pseudo et le pseudo comme signature @@ -1492,7 +1539,7 @@ class common { } } // Parcourir pageList et rechercher les modules de blog - + foreach ($pageList as $parentKey => $parent) { //La page est un blog if ($this->getData(['page',$parent,'moduleId']) === 'blog' ) { @@ -1531,8 +1578,22 @@ class common { $this->setData(['user',$key,'group', $this->getData(['user',$key,'group']) + 1 ]); } } + // Création du fichier locale.json + $this->setData(['locale','homePageId',$this->getData(['config','homePageId'])]); + $this->setData(['locale','page404',$this->getData(['config','page404'])]); + $this->setData(['locale','page403',$this->getData(['config','page403'])]); + $this->setData(['locale','page302',$this->getData(['config','page302'])]); + $this->setData(['locale','legalPageId',$this->getData(['config','legalPageId'])]); + $this->setData(['locale','searchPageId',$this->getData(['config','searchPageId'])]); + $this->setData(['locale','metaDescription',$this->getData(['config','metaDescription'])]); + $this->setData(['locale','title',$this->getData(['config','title'])]); $this->setData(['core', 'dataVersion', 10400]); + + /** + * mettre à jour defaultdata + */ + } } } @@ -1869,13 +1930,24 @@ class core extends common { $access = true; } else { - if($this->getUrl(0) === $this->getData(['config', 'homePageId'])) { + if($this->getUrl(0) === $this->getData(['locale', 'homePageId'])) { $access = 'login'; } else { $access = false; } } + // Empêcher l'accès aux page désactivée par URL directe + if ( ( $this->getData(['page', $this->getUrl(0),'disable']) === true + AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + ) OR ( + $this->getData(['page', $this->getUrl(0),'disable']) === true + AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + AND $this->getUser('group') < self::GROUP_MODERATOR + ) + ){ + $access = false; + } } /** * Contrôle si la page demandée est en édition ou accès à la gestion du site @@ -2116,13 +2188,20 @@ class core extends common { } } - // Librairie googtrans ajouté dynamiquement - if ( substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) !== 'fr' - AND $this->getData(['translate','active']) === true - AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD')) { - $this->addOutput([ - 'vendor' => array_merge($this->output['vendor'], ['i18n']) - ]); + // Chargement de la librairie googtrans + // Le multi langue est actif + if ($this->getData(['config','translate','scriptGoogle']) === true ) { + // la traduction auto est active + if ( $this->getData(['config','translate','autoDetect']) === true + // Cas des pages d'administration + AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + OR ($this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + AND $this->getData(['config','translate','admin']) === true ) + ) { + $this->addOutput([ + 'vendor' => array_merge($this->output['vendor'], ['i18n']) + ]); + } } // Erreurs if($access === 'login') { @@ -2138,10 +2217,10 @@ class core extends common { 'content' => template::speech('La page ' . $accessInfo['pageId'] . ' est ouverte par l\'utilisateur ' . $accessInfo['userName'] . '') ]); } else { - if ( $this->getData(['config','page403']) !== 'none' - AND $this->getData(['page',$this->getData(['config','page403'])])) + if ( $this->getData(['locale','page403']) !== 'none' + AND $this->getData(['page',$this->getData(['locale','page403'])])) { - header('Location:' . helper::baseUrl() . $this->getData(['config','page403'])); + header('Location:' . helper::baseUrl() . $this->getData(['locale','page403'])); } else { $this->addOutput([ 'title' => 'Erreur 403', @@ -2151,10 +2230,10 @@ class core extends common { } } elseif ($this->output['content'] === '') { http_response_code(404); - if ( $this->getData(['config','page404']) !== 'none' - AND $this->getData(['page',$this->getData(['config','page404'])])) + if ( $this->getData(['locale','page404']) !== 'none' + AND $this->getData(['page',$this->getData(['locale','page404'])])) { - header('Location:' . helper::baseUrl() . $this->getData(['config','page404'])); + header('Location:' . helper::baseUrl() . $this->getData(['locale','page404'])); } else { $this->addOutput([ 'title' => 'Erreur 404', @@ -2166,18 +2245,18 @@ class core extends common { if($this->output['metaTitle'] === '') { if($this->output['title']) { $this->addOutput([ - 'metaTitle' => strip_tags($this->output['title']) . ' - ' . $this->getData(['config', 'title']) + 'metaTitle' => strip_tags($this->output['title']) . ' - ' . $this->getData(['locale', 'title']) ]); } else { $this->addOutput([ - 'metaTitle' => $this->getData(['config', 'title']) + 'metaTitle' => $this->getData(['locale', 'title']) ]); } } if($this->output['metaDescription'] === '') { $this->addOutput([ - 'metaDescription' => $this->getData(['config', 'metaDescription']) + 'metaDescription' => $this->getData(['locale', 'metaDescription']) ]); } @@ -2229,14 +2308,15 @@ class layout extends common { * Affiche le script Google Analytics */ public function showAnalytics() { - if($code = $this->getData(['config', 'analyticsId'])) { + if($code = $this->getData(['config', 'analyticsId']) + AND $this->getInput('ZWII_COOKIE_CONSENT') === 'true') { echo ' '; } } @@ -2258,14 +2338,31 @@ class layout extends common { } echo $this->core->output['content']; - if ( substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) !== 'fr' - AND $this->getData(['translate','showCredits']) === true - AND $this->getData(['translate','active']) === true ) + + /** + * Affiche les crédits, conditions requis : + * La traduction est active et le site n'est pas en français. + * La fonction est activée. + */ + + if ( ( + ( $this->getData(['config','translate','scriptGoogle']) === true + AND substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) !== 'fr' + ) + OR ( isset($_COOKIES['ZWII_USER_I18N']) + AND array_key_exists($_COOKIES['ZWII_USER_I18N'],$this->i18nList + AND $_COOKIES['ZWII_USER_I18N'] !== 'fr' ) + ) + ) + AND $this->getData(['config','translate','showCredits']) === true + ) { echo ''; } } + + /** * Affiche le contenu de la barre gauche * @@ -2346,15 +2443,15 @@ class layout extends common { // Affichage du module de recherche $items .= 'getData(['theme','footer','displaySearch']) === false ? ' class="displayNone" >' : '>'; - if ($this->getData(['config','searchPageId']) !== 'none') { - $items .= ' | Recherche'; + if ($this->getData(['locale','searchPageId']) !== 'none') { + $items .= ' | Recherche'; } $items .= ''; // Affichage des mentions légales $items .= 'getData(['theme','footer','displayLegal']) === false ? ' class="displayNone" >' : '>'; - if ($this->getData(['config','legalPageId']) !== 'none') { - $items .= ' | Mentions légales'; + if ($this->getData(['locale','legalPageId']) !== 'none') { + $items .= ' | Mentions légales'; } $items .= ''; // Affichage du lien de connexion @@ -2480,12 +2577,17 @@ class layout extends common { // Mise en page de l'item $itemsLeft .= '
  • '; - if ( $this->getData(['page',$parentPageId,'disable']) === true - AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') ) - - {$itemsLeft .= ''; + if ( ( $this->getData(['page',$parentPageId,'disable']) === true + AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + ) OR ( + $this->getData(['page',$parentPageId,'disable']) === true + AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + AND $this->getUser('group') < self::GROUP_MODERATOR + ) + ){ + $itemsLeft .= ''; } else { - $itemsLeft .= ''; + $itemsLeft .= ''; } switch ($this->getData(['page', $parentPageId, 'typeMenu'])) { @@ -2535,9 +2637,15 @@ class layout extends common { $targetBlank = $this->getData(['page', $childKey, 'targetBlank']) ? ' target="_blank"' : ''; // Mise en page du sous-item $itemsLeft .= '
  • '; - if ( $this->getData(['page',$childKey,'disable']) === true - AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') ) { - $itemsLeft .= ''; + if ( ( $this->getData(['page',$childKey,'disable']) === true + AND $this->getUser('password') !== $this->getInput('ZWII_USER_PASSWORD') + ) OR ( + $this->getData(['page',$childKey,'disable']) === true + AND $this->getUser('password') === $this->getInput('ZWII_USER_PASSWORD') + AND $this->getUser('group') < self::GROUP_MODERATOR + ) + ){ + $itemsLeft .= ''; } else { $itemsLeft .= ''; } @@ -2856,7 +2964,7 @@ class layout extends common { if($this->getUser('group') >= self::GROUP_ADMIN) { $rightItems .= '
  • ' . template::ico('users') . '
  • '; $rightItems .= '
  • ' . template::ico('brush') . '
  • '; - $rightItems .= '
  • ' . template::ico('flag') . '
  • '; + //$rightItems .= '
  • ' . template::ico('flag') . '
  • '; $rightItems .= '
  • ' . template::ico('cog-alt') . '
  • '; // Mise à jour automatique $today = mktime(0, 0, 0); @@ -2952,4 +3060,20 @@ class layout extends common { } } } + /** + * Affiche le cadre avec les drapeaux + */ + public function showi18n() { + if ( $this->getData(['config','translate','scriptGoogle']) === true ) { + echo '
      '; + foreach (self::$i18nList as $key => $value) { + if ($this->getData(['config','translate','script' . strtoupper($key)]) ) { + echo '
    • '; + echo ''; + echo '
    • '; + } + } + echo '
    '; + } + } } diff --git a/core/layout/common.css b/core/layout/common.css index 60f31f09..d96e1334 100755 --- a/core/layout/common.css +++ b/core/layout/common.css @@ -695,6 +695,7 @@ nav::before { pointer-events: none; } + /* Menu vertical */ .menuSide, @@ -709,6 +710,40 @@ li .menuSideChild { padding-left: 10px; } +/* Container des drapeaux */ + +#i18nContainer { + z-index: 100; + position: relative ; + float: right; + width: auto; + height: auto; + margin-top: -25px; +} + +#i18nContainer ul { + list-style: none; +} + +#i18nContainer li { + display: inline-block; + position: relative; +} + +#i18nContainer img { + width: 80%; +} + + + + +#i18nContainer img { + margin: 2px; +} + + + + /* Corps */ @media (min-width:768px) { @@ -949,20 +984,22 @@ footer #footerSocials .zwiico-github:hover { /* Message sur les cookies */ #cookieConsent { + width: 80%; + margin: auto; opacity: .9; background: #212223; position: fixed; right: 0; - bottom: 0; + bottom: 5%; left: 0; color: #FFF; padding: 10px; z-index: 60; text-align: center; - font-size: .9em; + font-size: 1em; } -#cookieConsentConfirm { +#cookieConsentConfirm, #cookieConsentRefuse { cursor: pointer; margin-left: 10px; background: #666; @@ -971,10 +1008,12 @@ footer #footerSocials .zwiico-github:hover { transition: background .3s ease-out; } -#cookieConsentConfirm:hover { +#cookieConsentConfirm:hover, #cookieConsentRefuse:hover { background: #777; } + + /* Bloc */ .block { /* border: 1px solid #D8DFE3;*/ @@ -1665,7 +1704,7 @@ th.col12 { } .goog-text-highlight { background-color: transparent !important; - border: none !important; + border: none !important; box-shadow: none !important; } */ diff --git a/core/layout/mail.php b/core/layout/mail.php index c8bc04b4..5c588a95 100755 --- a/core/layout/mail.php +++ b/core/layout/mail.php @@ -83,7 +83,7 @@
    - getData(['config', 'title']); ?> + getData(['locale', 'title']); ?>
    @@ -109,7 +109,7 @@
    - getData(['config', 'title']); ?> + getData(['locale', 'title']); ?>
    diff --git a/core/layout/main.php b/core/layout/main.php index a97261b2..df3c1624 100755 --- a/core/layout/main.php +++ b/core/layout/main.php @@ -15,6 +15,12 @@ $lan = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); ?> + + getData(['page', $this->getUrl(0), 'moduleId']) === 'blog' + OR $this->getData(['page', $this->getUrl(0), 'moduleId']) === 'news' ) + AND $this->getData(['module', $this->getUrl(0), 'config', 'feeds']) === TRUE ): ?> + + showStyle(); ?>
    getData(['theme','menu','burgerTitle']) === true ): ?> -
    getData(['config','title']);?>
    +
    getData(['locale','title']);?>