2016-08-26 1 views
0

Veuillez excuser mes compétences en anglais. J'ai une page d'accueil avec un échange linguistique dans les domaines suivants inclus common.phpSession PHP avec une langue et un fichier plat

<?php 
session_start(); 
header('Cache-control: private'); 
if(isSet($_GET['lang'])) 
{ 
$lang = $_GET['lang']; 
$_SESSION['lang'] = $lang; 
setcookie('lang', $lang, time() + (3600 * 24 * 30)); 
} else if(isSet($_SESSION['lang'])) { 
$lang = $_SESSION['lang']; 
} else if(isSet($_COOKIE['lang'])) { 
$lang = $_COOKIE['lang']; 
} else { 
$lang = 'de'; 
} 

switch ($lang) { 
case 'en': $lang_file = 'lang.en.php'; break; 
case 'de': $lang_file = 'lang.de.php'; break; 
case 'ru': $lang_file = 'lang.ru.php'; break; 
case 'fr': $lang_file = 'lang.fr.php'; break; 
default: $lang_file = 'lang.de.php'; 
} 
include_once 'lang/'.$lang_file; 
?> 

Maintenant, je voudrais mettre en œuvre sur mon site un mini-blog avec fichiers plats et utilisez le code suivant

<?php 
    define("DEFAULT_LANGUAGE", "lang=de"); 
    session_start(); 
    $languages = ["de", "en", "fr", "ru"]; 
    if(isset($_GET["lang"])){ $lang = filter_input(INPUT_GET, "lang", FILTER_SANITIZE_STRING); 
    if(!in_array($lang, $languages)){ $lang = DEFAULT_LANGUAGE; } 
    $_SESSION["language"] = $lang; 
    } 
    function get_lang() { return isset($_SESSION["language"]) ? $_SESSION["language"] : DEFAULT_LANGUAGE; } 
    function get_post_names() { 
    static $_cache = []; 
    if(empty($_cache)){ $_cache = array_reverse(glob(__DIR__ . '/posts/' . get_lang() . '/*.php')); } 
    return $_cache; 
    } 
    function print_posts() { $paths = get_post_names(); 
    foreach($paths as $path){ $content = file_get_contents($path); 
    echo "<div class='post'>\n"; 
    echo "<p>{$content}</p>\n"; 
    echo "</div>\n\n"; 
    } 
    } 
    ?> 
    <?php print_posts(); ?> 

Pour les articles de blog, il y a un dossier [posts] dans quels sous-dossiers (de, en, fr, ru). Dans ces sous-dossiers, il y a, selon la langue, par exemple: "examplepost.php" dans les articles de blog qui ont été écrits. La sélection de la langue fonctionne sans aucun problème. Mais je veux que quand un utilisateur sélectionne une langue différente, alors le blog lit automatiquement le dossier correspondant de la voix du blog et contenant les fichiers de sorties.

Le problème est qu'il existe deux sessions. Cela conduit à des erreurs! Ma question serait: Comment puis-je tout fusionner dans une session ou comment puis-je connecter les deux sessions sans conflits, de sorte qu'il fonctionne à la fois (la langue du site et la sortie des fichiers dans les dossiers de la langue choisie par les visiteurs pour les articles du blog).

Merci beaucoup à vous tous pour votre aide et vos suggestions! Salutation

Répondre

1

Vous n'avez pas besoin de deux sessions pour contenir la même variable ($ lang).
Qu'est-ce que vous pouvez faire est quelque chose comme ceci:

session_start(); 
// check/set default language session  
if (!isset($_SESSION["language"])) { 
$_SESSION["language"] = DEFAULT_LANGUAGE; 
} 
if ($isset($_GET['lang']) && in_array($_GET['lang'], $languages)){ 
$_SESSION["language"] = $_GET['lang']; 
} 
// execute more code 
$lang_file = 'lang.'.$_SESSION["language"].'.php'; 
include_once 'lang/'.$lang_file; 
+0

Merci pour votre réponse! Mais j'ai besoin de la connexion aux sous-dossiers (voir le script PHP) dans votre script. Par exemple, avec ... require_once ("posts /". $ Lang. "* .php"); Dans les sous-dossiers, il y a quatre dossiers: DE, EN, FR, RU. Le fichier contenant .php doit, en fonction de la sélection de la langue, lire le contenu affiché avec German Comment est-il possible que les deux fonctionnent? –

+0

@php_echo avez votre fichier include sous la déclaration de session, comme je l'ai démontré dans mon exemple. Commencez par trouver la langue que vous utiliserez (eitehr default ou GET, puis assignez-la à la session, puis incluez les dossiers/fichiers appropriés – andrew

0

andrew Je pense que je me suis exprimé mal. Le common.php pour l'échange linguistique est responsable et devrait être conservé. Je ai juste besoin d'une fonction dans le common.php quelles sont les mêmes fonctions que dans l'autre script mentionné. Il doit être possible que ...

  • est changé dans la langue sélectionnée sur le site
  • Et en même temps, a également évoqué le sous-dossier du blog (« messages »).

La structure

[root] 
|_ acp ........ admin-center 
|_ css ........ css styles 
|_ img ........ graphics 
|_ inc ........ includes files 
|_ func ....... function files (i.e. common.php) 
|_ js ......... js files 
|_ lang ....... language files 
|_ posts ...... for the Blog Postings 
    |_ [de] [en] [fr] [ru] 

Dans les derniers dossiers sont witch fichiers .php, en fonction de la sélection de la langue a été sélectionnée par le common.php en même temps avec le common.php aussi les fichiers du dossier [posts] du blog et affichés pour être lus. En bref ... 1) en fonction de la langue dans le fichier de langue redirect - AND - 2) en plus du sous-dossier du dossier [posts] et les fichiers contenus à lire et le contenu de la sortie de fichiers.