Nom du modèle de la vue à utiliser * @content Données pour construire la vue à partir du modèle * */ public function __construct($template, $content){ // Si pas parametre manquant, on quitte if( $template == null ){ $this->error = ManagerError::MissingPath; return false; } /* [1] On vérifie que le template existe =========================================================*/ $templatePath = $this->checkPath($template); if( $templatePath === false ) return false; /* [2] On récupère le chemin du template et on l'enregistre =========================================================*/ $this->template = $templatePath; /* [3] On enregistre les paramètres =========================================================*/ $this->content = $content; /* [4] On process la vue =========================================================*/ $this->view = call_user_func( $this->template, $this->content ); } /* AFFICHE LA VUE CALCULEE * */ public function view(){ echo $this->view; } /* VERIFICATION DE L'EXISTENCE D'UN MODELE * * @template Chemin du modèle * * @return status TRUE si le modèle existe, sinon FALSE * */ private function checkPath($template){ /* [1] On vérifie le format =========================================================*/ if( !preg_match('/^([a-z]+)\.([a-z]+)$/i', $template, $match) ){ $this->error = ManagerError::ParamError; return false; } /* [2] On vérifie que le template existe =========================================================*/ $class = '\\manager\\view\\'.$match[1]; $method = $match[2]; /* (1) On vérifie que la classe existe */ if( !class_exists($class) ){ $this->error = ManagerError::UnknownTemplate; return false; } /* (2) On vérifie que la méthode existe */ if( !method_exists($class, $method) ){ $this->error = ManagerError::UnknownTemplate; return false; } /* [3] Si tout est bon, on renvoie les données =========================================================*/ return [ $class, $method ]; } /* APPLIQUE UN REMPLACEMENT SIMPLE * * @template Contenu HTML du templace * @singles Variables à insérer * * @return result Retourne le templace rempli * */ public static function replaceSingle($template, $singles){ /* On applique chaque remplacement */ foreach($singles as $k=>$v){ /* Tant qu'il y a, on remplace */ if( strpos($template, '@'.$k) !== false ) $template = str_replace('@'.$k, $v, $template); } return $template; } /* APPLIQUE UN REMPLACEMENT MULTIPLE * * @template Contenu HTML du templace * @multiples Tableau de Singles * @singles Variables statiques supplémentaires * * @return result Retourne le templace rempli * */ public static function replaceMultiple($template, $multiples, $singles=[]){ $view = ''; /* On applique chaque remplacement */ foreach($multiples as $multiple) $view .= self::replaceSingle($template, array_merge($multiple, $singles)); return $view; } } // USE case // // $myView = new View('templateParent.templateModel', [ // 'myVar' => 1, // 'helloMsg' => 'Hello', // ]); // // $myView->view(); // ?>