Quand je regarde le code de controleurs/nouvelles.php, je me dis que ce fichier n'est pas loin de retourner un objet... $vue
$vue->titre = 'Dernières nouvelles du site et informations ajoutées sur les refuges';
$vue->commentaires = $_GET['commentaires'];
$vue->general = $_GET['general'];
$vue->stat = stat_site ();
$vue->quoi = $_GET ['quoi'] ? $_GET ['quoi'] : 'commentaires,points,forums';
Une petite erreur de casting (au sens cinématographique)?
Ne serait ce pas le rôle du modele/nouvelle.php de retourner les infos concernant les nouvelles ?
Puis au contrôleur de les passer à la vue
modeles/Nouvelles.php:
class ModeleNouvelles
{
$titre = 'Dernières nouvelles du site et informations ajoutées sur les refuges';
$commentaires = $_GET['commentaires'];
$general = $_GET['general'];
$stat = stat_site ();
$quoi = $_GET ['quoi'] ? $_GET ['quoi'] : 'commentaires,points,forums';
}
Puis (en restant dans la logique de codage actuelle):
$vue = new ModeleNouvelles ();
include ($config['chemin_vues']."_entete.html");
include ($config['chemin_vues']."$vue->type.html");
include ($config['chemin_vues']."_pied.html");
En principe, ça revient au même, sauf qu'il n'y a pas de stdclass, ni ->, ni include
Je sens qu'on brûle.
(pas implémenté)
[mcdebat]Comme un arrière gout d'objet
-
- Messages : 3704
- Enregistré le : 08 avr. 2006, 21:58
[mcdebat]Comme un arrière gout d'objet
Modifié en dernier par Dominique le 20 mars 2013, 08:52, modifié 3 fois.
Dominique http://chemineur.fr
-
- Messages : 3704
- Enregistré le : 08 avr. 2006, 21:58
Note: on pourrait coder de même, dans un objet générique, le chargement des vues
Dans ce cas, le vues/page.html inclurait des <?=$this->membre?> beaucoup plus logiques que $vue->membre
includes/Vue.php
class Vue {
function __construct($page) {
global $config;
include ($config['chemin_vues']."_entete.html");
include ($config['chemin_vues'].$page.".html");
include ($config['chemin_vues']."_pied.html");
}}
Puis
new Vue ('nouvelles');
(il manque le passage des arguments)
Dans ce cas, le vues/page.html inclurait des <?=$this->membre?> beaucoup plus logiques que $vue->membre
includes/Vue.php
class Vue {
function __construct($page) {
global $config;
include ($config['chemin_vues']."_entete.html");
include ($config['chemin_vues'].$page.".html");
include ($config['chemin_vues']."_pied.html");
}}
Puis
new Vue ('nouvelles');
(il manque le passage des arguments)
Dominique http://chemineur.fr
-
- Messages : 5041
- Enregistré le : 29 févr. 2004, 17:59
- Localisation : Chambéry - Savoie
Re: [proposition:codage]Comme un arrière gout d'objet
Objet objet, c'est vite dit, c'est juste utilisé comme un "tableau" et il ne le retourne pas mais le complète.Dominique a écrit :Quand je regarde le code de controleurs/nouvelles.php, je me dis que ce fichier n'est pas loin de retourner un objet... $vue
C'est ça, mais qui est en "erreur de casting" ?Une petite erreur de casting (au sens cinématographique)?
Ne serait ce pas le rôle du modele/nouvelle.php de retourner les infos concernant les nouvelles ?
Puis au contrôleur de les passer à la vue
/controlleurs/nouvelles.php ne retourne (au sens objet ou fonction) aucune info concernant les nouvelles, puisque c'est la fonction "affiche_nouvelles" située dans /modeles/fonctions_nouvelles.php qui s'en occupe.
La vue nouvelles.html lui vole toutefois son rôle car c'est elle qui lance affiche_nouvelles, alors qu'elle ne devrait qu'afficher le contenu du tableau constitué par le controlleur.
Peut-être cela sera-t-il éclairci par ma remarque ci-avant, mais ton class ModeleNouvelles n'est en rien un modèle. Ce qu'il fait c'est déporter le remplissage de $vue dans un autre fichier. Ça pourrait avoir un sens si ce code allait être appelé par ailleurs, mais ça a peu de chance d'être le cas ici.modeles/Nouvelles.php:
class ModeleNouvelles
{
$titre = 'Dernières nouvelles du site et informations ajoutées sur les refuges';
$commentaires = $_GET['commentaires'];
$general = $_GET['general'];
$stat = stat_site ();
$quoi = $_GET ['quoi'] ? $_GET ['quoi'] : 'commentaires,points,forums';
}
Puis (en restant dans la logique de codage actuelle):
$vue = new ModeleNouvelles ();
include ($config['chemin_vues']."_entete.html");
include ($config['chemin_vues']."$vue->type.html");
include ($config['chemin_vues']."_pied.html");
En principe, ça revient au même, sauf qu'il n'y a pas de stdclass, ni ->, ni include :D
Je sens qu'on brûle.
(pas implémenté)
-
- Messages : 3704
- Enregistré le : 08 avr. 2006, 21:58
Re: [proposition:codage]Comme un arrière gout d'objet
Tout dépend si on considère que ce sont des informations à propos des nouvelles ou des informations à afficher sur la page d'accueilsly a écrit :Peut-être cela sera-t-il éclairci par ma remarque ci-avant, mais ton class ModeleNouvelles n'est en rien un modèle. Ce qu'il fait c'est déporter le remplissage de $vue dans un autre fichier. Ça pourrait avoir un sens si ce code allait être appelé par ailleurs, mais ça a peu de chance d'être le cas ici.
Dominique http://chemineur.fr
-
- Messages : 5041
- Enregistré le : 29 févr. 2004, 17:59
- Localisation : Chambéry - Savoie
vu comme ça oui, mais vu comme ça, on va aussi avoir besoin d'un modèle pour chaque vue !
Il y a sans doute un truc à jouer sur cette histoire de passe d'information controlleur->vue, notamment en ce qui concerne par exemple des éléments redondants comme l'affichage des nouvelles en page d'accueil et en page nouvelle ou le formulaire de rss et celui d'export et ce afin d'éviter à ré-écrire plusieurs fois.
Mais je ne la vois pas bien en déportant juste le remplissage du $vue, si ce n'est pouvoir dire "là on fait enfin de l'objet dans son fichier tout seul" (alors même qu'on a ni constructeurs ni méthodes : juste un objet bien creux avec juste des propriétés)
Il y a sans doute un truc à jouer sur cette histoire de passe d'information controlleur->vue, notamment en ce qui concerne par exemple des éléments redondants comme l'affichage des nouvelles en page d'accueil et en page nouvelle ou le formulaire de rss et celui d'export et ce afin d'éviter à ré-écrire plusieurs fois.
Mais je ne la vois pas bien en déportant juste le remplissage du $vue, si ce n'est pouvoir dire "là on fait enfin de l'objet dans son fichier tout seul" (alors même qu'on a ni constructeurs ni méthodes : juste un objet bien creux avec juste des propriétés)
-
- Messages : 3704
- Enregistré le : 08 avr. 2006, 21:58
nonsly a écrit :vu comme ça oui, mais vu comme ça, on va aussi avoir besoin d'un modèle pour chaque vue !
Oui : un modele représente un type de donnée (par exemple les nouvelles) et peut être utilisé dans plusieurs vues (accueil, nouvelles, RSS, ...)Il y a sans doute un truc à jouer sur cette histoire de passe d'information controlleur->vue, notamment en ce qui concerne par exemple des éléments redondants comme l'affichage des nouvelles en page d'accueil et en page nouvelle ou le formulaire de rss et celui d'export et ce afin d'éviter à ré-écrire plusieurs fois.
C'est là qu'on factorise
De même, une vue peut appeler plusieurs modèles (les nouvelles, les massifs, ...)
C'est le contrôleur qui aiguille tout ça
new VueAccueil (array (
new ModeleNouvelles (...),
new ModeleMassifs (...),
new ModelePhoto (...),
));
html:
...<?=$this->photos->nombre?>...
(code très approximatif !)
Tout à fait. Ce sont des artifices d'écriture sans grand impactsMais je ne la vois pas bien en déportant juste le remplissage du $vue, si ce n'est pouvoir dire "là on fait enfin de l'objet dans son fichier tout seul" (alors même qu'on a ni constructeurs ni méthodes : juste un objet bien creux avec juste des propriétés)
(on y gagne toutefois l'inclusion automatique)
Dominique http://chemineur.fr