8768 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Salut,

il me semble qu'Heyoan a indiqué une piste intéressante ... il faudrait qu'on sache comment les titres de pages sont liés à la variable $_GET['page'], mais on peut toujours envisager ce qu'il a proposé.
<title><?php
   $titles = array(
      'accueil' => 'Page d\'accueil',
      'news' => 'Les dernières nouvelles',
      ...
   );
   if (array_key_exists($_GET['page'], $titles)) {
      echo $titles[$_GET['page']];
   }
   else {
      echo 'Page introuvable';
   }; 
?></title>
a écrit :

Donc dans ce cas là tu ne gardes pas le principe de départ fourni par cerede c'est à dire de n'avoir qu'un seul fichier contenant à la fois le header et
le footer et de n'inclure que le contenu.

Ah... alors oui dans ce cas effectivement, no choice... bufférisation
La technique de l'associative-array est pas mal, mais elle se limite aux sites simples n'ayant pas de structure trop complexe et/ou un trop grand nombre de pages.
Salut,

c'est vrai que pour un site plus compliqué cela peut vite devenir fastidieux Smiley rolleyes .

Si tel est la cas je te recommande ce tutorial sur les sites dynamiques. Il est clair et facilement adaptable...

A+ Smiley biggrin
Salut
Puisque tout le monde y va de sa proposition, j'en avance une de plus :

- A chaque page correspond une classe d'un modèle abstract factory (la clé de construction est le paramètre $_GET['page']).

- La classe de base définit la variable $titre qui sera renseignée dans les constructeurs des classes héritées.

- La méthode getCode() de la classe de base écrit un template de page html (genre header-footer) avec au milieu l'appel d'une méthode virtuelle getCodeContenu() (surchargée bien évidemment dans les classes filles)

Ce qui donne à l'appel un truc du genre (I_Page est la classe de base de l'AF) :


class I_Page
{
    var $titre;
    // + un tableau static où chaque sous-classe va s'enregistrer
    // dépend de la version de php

    function I_Page ()
    {
        $this->titre = 'un titre par défaut';
    }

    function getCode ()
    {
        $code = 'la dtd' . '<html> & Co';
        $code .= '<title>' . $this->titre . '</titre>';
        $code .= ...
        $code .= '<body><div id="page">' . $this->getCodeContenu() . '</div></body>';
        $code .= '</html>';
        return $html;
    }

    function getCodeContenu ()
    {
        // virtuelle (pure mais pas forcément, peut servir à
        // implémenter un code par défaut... php4 s'en fout)
    }

    [...]
};



class C_PageAccueil extends I_Page
{
    function C_PageAccueil ()
    {
        $this->titre = 'Accueil';
    }

    function getCodeContenu ()
    {
        $code = '...';
        return $code;
    }
};



$o_page = I_Page::_instancier($_GET['page']);
if (is_null($o_page))
{
    // Erreur 404 ou code d'une classe par défaut
}
else
{
    // Une classe correspond à $_GET['page'], elle a déjà défini son titre
    echo $o_page->getCode();
}


Avantages :
- fonctionne même si MySQL est dans les choux (cf tuto proposé par Heyoan)
- chaque classe de page ne se soucie que de son contenu utile
Inconvénients :
- en php 4, il faut ruser pour pallier aux lacunes du support objet.

Remarque 1 : ce n'est qu'un exemple simpliste pour illustrer mon propos, on peut nettement l'améliorer Smiley cligne
Remarque 2 : Je ne connais pas php5 et son support objet, j'ai peut-être dit des c****ries
Remarque 3 : Je n'ai pas mis le code de fabrique abstraite, demandez si besoin (pour php4)

a+
Salut jeje,

J'aime beaucoup ta solution, je trouve qu'elle est plutôt bien pensée, qu'elle permet de garder le principe de départ (un seul fichier contenant le header et le footer). Elle permet également de paramétrer chaque page presque à l'infini. On peut par exemple imaginer une fonction qui permette de créer un menu différent par page.

Je pense que c'est une idée à creuser afin de l'améliorer et de la rendre plus performante. Smiley cligne

jeje a écrit :
Remarque 2 : Je ne connais pas php5 et son support objet, j'ai peut-être dit des c****ries

Non, tous ceux que tu as dit est correct. En plus avec php5, on peut pousser le modèle objet (classe abstraite, surcharge de fonction, etc...) encore plus loin que par rapport à php4.

jeje a écrit :
Inconvénients :
- en php 4, il faut ruser pour pallier aux lacunes du support objet.

Plus besoin comme dis juste au dessus grâce à php5.
Salut ymhotepa,
a écrit :
Elle permet également de paramétrer chaque page presque à l'infini.

Tout à fait ! Je citerais par exemple
- l'ajout de javascripts ou css spécifiques à certaines pages
- la créations de templates différents : ils héritent de I_Page, les pages héritent du "bon template" (avec un menu différent comme tu dis, par exemple, ou sans menu (panneau latéral j'entends) pour la page du forum)

a écrit :
Je pense que c'est une idée à creuser afin de l'améliorer et de la rendre plus performante.

T'inquiète, j'y travaille depuis plusieurs mois déjà, le code proposé doit être ma première ébauche Smiley cligne . Il a beaucoup évolué mais n'est pas encore au point (trop tendance à me disperser Smiley murf ).

Pour ce qui est de php5, j'ose imaginer qu'on se rapproche du C++ mais comme je ne m'y suis pas encore mis... Si les variables de classes (static) ont le comportement adéquat, c'est tout bon Smiley cligne (ça m'éviterait déjà la méthode qui retourne une référence sur une variable static, outch)
Un jour, quand j'aurai le temps Smiley rolleyes

En tout cas merci, j'apprécie que tu apprécies Smiley ravi
Bonne soirée
Alors perso je préfère la version MySQL, je la trouve plus facile d'utilisation et de conception. Mais bon, chacun a ses habitudes.

Si l'arborescence du site devient complexe, il est possible d'améliorer grandement les performances, en partant du principe que plus du 80% des requêtes sont des select (ce qui est généralement le cas dans les sites à contenu) grâce à l'algorythme des arbres à index intervalaires.
Testé pour ma référence js, ça fonctionne du tonerre.
QuentinC a écrit :
Alors perso je préfère la version MySQL, je la trouve plus facile d'utilisation et de conception. Mais bon, chacun a ses habitudes.
idem Smiley good

Et merci pour le lien : très intéressant Smiley cligne
Pages :