Bonjour,
Je suis en train de réaliser un site web entièrement OO (du moins le plus possible). Un des modules que je veux absolument implémenter afin que mon site soit le plus évolutif possible est ce que j'appelle un constructeur de pages. Pour cela j'ai créé une classe Page. En gros le principe est le suivant :
- Sur une page donnée, je charge ma classe Page et les fonctions pour l'hydrater correctement.
- Je crée un nouvel objet Page.
- J'appelle la méthode build, qui pioche dans le contenu de chacun de mes attributs afin de construire la page par morceaux.
Voici l'organisation de mon code :
La classe Page
Les fonctions pour récupérer le contenu de chaque fichier qui va s'insérer dans les attributs de ma classe Page
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 <?php require_once('/php/functions/arrayForClasses.php'); class Page { private $url; private $header; private $title; private $post_title; private $headband; private $logo; private $menu; private $before_body; private $body; private $post_body; private $footer; public function __construct(array $datas) { $this->hydrate($datas); } public function hydrate(array $datas) { // On récupère le nom de chaque setter correspondant à l'attribut. foreach($datas as $key => $value) { $method = 'set'.ucfirst($key); /* Si la méthode existe, on l'appelle. On donne ainsi comme valeur au setter correspondant la valeur de la clé. */ if(method_exists($this, $method)) { $this->$method($value); } } } /* Méthodes */ public function build(array $pageSnippets) { $pageContents = ''; foreach($pageSnippets as $key => $value) { if($key != 'url') $pageContents .= $pageSnippets[$key]; } file_put_contents(''.$this->url, $pageContents); } // Getters et setters ?>
Et enfin un exemple de page qui va être généré :
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 <?php function createPageSnippetsWithoutUrl() { $pageSnippets = array('require_classes' => NULL, 'header' => NULL, 'title' => NULL, 'post_title' => NULL, 'headband' => NULL, 'logo' => NULL, 'menu' => NULL, 'before_body' => NULL, 'body' => NULL, 'post_body' => NULL, 'footer' => NULL); foreach($pageSnippets as $key => $value) { $pageSnippets[$key] = file_get_contents('./php/page_snippets/'.$key.'.php'); } return $pageSnippets; } function createPageSnippets() { $pageSnippets = createPageSnippetsWithoutUrl(); $pageSnippets['url'] = $_SERVER['PHP_SELF']; return $pageSnippets; } ?>
Cependant j'ai 2 warnings :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?php require_once('/php/functions/loadClass.php'); require_once('/php/functions/arrayForClasses.php'); spl_autoload_register('loadClass'); $pageSnippets = createPageSnippets(); $page = new Page($pageSnippets); $page->build($pageSnippets); ?>
Warning: file_get_contents(./php/page_snippets/require_classes.php) [function.file-get-contents]: failed to open stream: No such file or directory in C:\wamp\www\mjs_aquitaine\php\functions\arrayForClasses.php on line 8
Warning: file_put_contents(/mjs_aquitaine/index.php) [function.file-put-contents]: failed to open stream: No such file or directory in C:\wamp\www\mjs_aquitaine\php\class\Page.class.php on line 53
Du coup je me posais plusieurs questions. Dans la façon de penser OO est-ce que c'est un bon découpage ? Après la création de ma page via l'instance de Page, se générera-t-elle sans erreurs ? Je suis un peu dans le flou, comme je débute en POO.
Partager