PHP MVC - NavBar multi-langue
Bonjour à tous,
Je suis entrain de développer une site en utilisant le modèle MVC. Je me posais la question si il existe une façon plus "intelligente" d'inclure ma barre de naviguation que celle que j'utilise en ce moment. Effectivement cette navbar sera appelé dans près de 80% de mes contrôleurs, mais elle nécesssite l'utilisation d'un modèle pour la charger en fonction des langues. Car les données sont dans une table MySQL.
config.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<?php
// DB Params
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '123456');
define('DB_NAME', 'urbanride');
//app root
define('APPROOT', dirname(dirname(__file__)));
// URL Root
define('URLROOT', 'http://localhost/urbanride'); //remove ending slash
//Site Name
define('SITENAME', 'urbanride');
define('WEB_EXTENSION', '.ch');
//table for all languages
define('DB_TABLE_TEXTLANG', 'displaytext');
//App version
define('APPVERSION', '1.1.0');
//Website language should at least have one language, and each language are separated by "_" used in the core.php class
define('LANGUAGES', 'en_fr');
define('LANGUAGES_DEFAULT', 'en'); |
homePages controller
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php
Class homePages extends controller{
public function __construct(){
$this->homePage = $this->model('homePage');
}
public function index(){
$data = [
'navbar' => $this->homePage->getNavBar(),
'title' => 'Welcome',
'description' => 'this is a website'
];
$this->view('HomePage/index', $data);
}
} |
homePage.php modèle
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php
class homePage{
public function __construct(){
$this->db = new Database;
}
public function getNavBar(){
$this->db->query('SELECT * FROM ' . DB_TABLE_TEXTLANG . ' WHERE controller=:controllerRequested');
$this->db->bind(':controllerRequested','navbar');
$results = $this->db->resultSet();
return $results;
}
} |
navBar to include dans les différentes views
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
<nav class="navbar navbar-dark navbar-expand-lg" style="background-color: rgba(0,0,0,0.93);" >
<div class="container">
<a class="navbar-brand" href="#">
<img src="<?php echo URLROOT ?>/public/img/logoUrbanride.png" alt="" width="" height="" class="d-inline-block align-text-top">
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mb-2 mb-lg-0">
<li class="nav-item">
</li>
<?php var_dump($data['navbar']); ?>
<?php foreach($data['navbar'] as $navbar) : ?>
<li class="nav-item">
<a class="nav-link" href="#">
<?php echo $navbar->{'value_' . $_SESSION['lang']} ?>
</a>
</li>
<?php endforeach; ?>
</div>
</div>
</nav> |
Voilà, donc en fait ce qui me chagrine c'est que je vais devoir avant chaque vue ajouter ce bout de code 'navbar'
Code:
1 2 3 4 5
| $data = [
'navbar' => $this->homePage->getNavBar(),
'title' => 'Welcome',
'description' => 'this is a website'
]; |
Idem dans le modèle, avec la fonction navbar.
modèle
homePage.php
Code:
1 2 3 4 5 6 7 8 9 10
|
public function getNavBar(){
$this->db->query('SELECT * FROM ' . DB_TABLE_TEXTLANG . ' WHERE controller=:controllerRequested');
$this->db->bind(':controllerRequested','navbar');
$results = $this->db->resultSet();
return $results;
} |
Je suis sûr qu'il est possible de faire mieux, mais je bloque un peu. J'espère avoir été aussi clair que possible, si ce n'est pas le cas hesitez pas.
Merci aux personnes qui prendront le temps de répondre.