Bonjour,

Déjà merci pour votre tuto, celui-ci aide à mieux comprendre un système MVC ^^

Par contre j'ai un soucis, je voudrais rendre mon site international en utilisant un simple système de constante définie dans des fichier correspondant à la langue voulu.

J'ai donc modifié le htacces :

RewriteRule ([a-z]+)/(.*) index.php/$1/$2 [L]

Pour obtenir ce genre d'url : http://localhost/monsite/fr/page/accueil-1

Ensuite j'ai modifié le fichier Request.php :

public $lang = false; // langue sélectionné par l'utilisateur
.......

function __construct(){
    // Si on a une lang dans l'url on la rentre dans $this->lang
    if(isset($_GET'lang']) && preg_match("/^[a-zA-Z]{2,3}$/i",$_GET'lang'])){
        $this->lang = $_GET'lang'];
    } else {
        $this->lang = 'fr';
    }

    $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/'; 
    // Si on a une page dans l'url on la rentre dans $this->page
    if(isset($_GET'page'])){
        if(is_numeric($_GET'page'])){
            if($_GET'page'] > 0){
                $this->page = round($_GET'page']); 
            }
        }
    }

    // Si des données ont été postées ont les entre dans data
    if(!empty($_POST)){
        $this->data = new stdClass(); 
        foreach($_POST as $k=>$v){
            $this->data->$k=$v;
        }
    }
}

En claire si la variable $_GET'lang'] n'est pas définie la langue par défault et fr

Pour continuer j'ai modifié le fichier Dispatcher.php en modifiant cette ligne de la fonction __construct

Router::parse($this->request->url,$this->request,$this->request->lang);

Ensuite le fichier Router.php pour modifier la fonction parse

static function parse($url,$request,$lang){
    $url = trim($url,'/');
    if(empty($url) || $url == $lang){
        $url = Router::$routes[0]'url']; 
    }else{
        .....

Et donc je modifie le fichier conf.php

define('AdminName','pna');

/**
 * Router
 * Configuration des urls pour le router
 **/

$request = new Request();
$langUser = $request->lang;

Router::prefix(AdminName,'admin');
Router::connect($langUser.'/','posts/index');
Router::connect(AdminName,AdminName.'/posts/index');
Router::connect($langUser.'/page/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/:slug-:id','posts/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/category/:slug','posts/category/slug:([a-z0-9\-]+)');
Router::connect($langUser.'/blog/*','posts/*');

Donc tous ceci fonctionne bien mise à part que j'aimerais que la langue ce définisse simplement en modifiant l'url exemple :

langue FR : http://localhost/monsite/fr/page/accueil-1

langue EN : http://localhost/monsite/en/page/accueil-1

Suis-je sur la bonne vois ?

Merci de votre aide.

Cordialement

2 réponses


Lqncer
Auteur
Réponse acceptée

Bonjour,

Merci de votre réponse effectivement j'ai récupéré la langue directement depuis l'url.
Ensuite je joue avec les champs de la base de donnée pour définir la langue.

Cordilement ;)

A toi de trouver une solution. Peut être dans le lancement du controller récupérer le premier paramètre de l'url (fr ou en) et mettre une variable de conf