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
homePages controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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');
homePage.php modèle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
navBar to include dans les différentes views
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Voilà, donc en fait ce qui me chagrine c'est que je vais devoir avant chaque vue ajouter ce bout de code 'navbar'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Idem dans le modèle, avec la fonction navbar.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $data = [ 'navbar' => $this->homePage->getNavBar(), 'title' => 'Welcome', 'description' => 'this is a website' ];
modèle
homePage.php
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Merci aux personnes qui prendront le temps de répondre.
Partager