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
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