Bonjour,

Je viens de finir le tutoriel pour la création d'un site en PHP. Ça marche nickel, c'est beau.
Cependant, je souhaiterai ajouter un système de plugins.

Exemple : un plugin pour afficher un formulaire de contact.
Dans le contenu du post j'écrirai "[contact-form]" et cette balise serai remplacée par le formulaire de contact

Cela fait un petit moment que je cherche comment m'y prendre... est-ce que l'un d'entre-vous peux me donner des pistes ?

TomDoo

3 réponses


tomdoo
Auteur
Réponse acceptée

Je m'y suis collé... J'arrive à récupérer tout le contenu de la page avant l'affichage et c'est là qu'il faut le parser afin de trouver les différents plugins. Les plugins seront appelés grâce à des hooks ("[contact-form]", "[tag-cloud]", "[search]"...) qui seront stockés dans le fichier de configuration. En évolution prévisible, on pourra stocker les hooks dans la base de données et les activer ou les désactiver par l'interface d'administration mais ceci est une autre histoire...

Voici donc ma nouvelle fonction render dans la classe Controller :

public function render($view){
    if($this->rendered){ return false; }
        extract($this->vars);
    if(strpos($view, '/') === 0){
        $view = ROOT.DS.'view'.$view.'.php';
    }
    else{
        $view = ROOT.DS.'view'.DS.$this->request->controller.DS.$view.'.php';
    }
    ob_start();
    require($view);
    $content_for_layout = ob_get_clean();
    ob_start();
    require ROOT.DS.'view'.DS.'layout'.DS.$this->layout.'.php';
    $overall_content = ob_get_clean();

    //TODO : parser le overall_content a la recherche de plugins

    echo $overall_content;
    $this->rendered = true;
}

Les pages n'ont pas l'air de se générer en beaucoup plus de temps donc niveau performances je pense que c'est bon...
Reste plus qu'à écrire le TODO !

Moi je ferais un dossier avec des class spécifiques qui seraient appellées à certains moment (comme les hook sur wordpress)

tomdoo
Auteur

Jusque là, je suis dans la bonne direction. Maintenant je suis me demande à quel moment je peux appeler ces classes. Sachant que les hooks peuvent être dans le layout directement ou alors dans le content_for_layout... En gros à quel moment je peux récupérer ma page html complète afin de la parser à la recherche de hooks afin de les remplacer par le contenu du plugin ?