Bonjour mesdames et messieurs !

Alors en fait j'ai un petit soucis, ça fait maintenant quelques temps que j'utilise la fonction ob_start() de php pour créer une template sur mon site, alors j'avais utilisé à l'époque le tuto de grafikart

http://www.grafikart.fr/tutoriels/php/decomposer-site-php-obstart-102

Que j'ai réutilisé a chaque nouveau projet, sauf que je rencontre un autre problème je souhaite utiliser l'URL REWRITING afin de créer des url plus sympathiques a mes articles/profils d'utilisateur etc ( surtout que je m'attaque à un petit jeu en PHP et donc j'ai vraiment besoin de ça pour l'interaction entre les utilisateurs )

Mon htaccess se présente comme ceci :
http://pastebin.com/ZfrJeRGQ

Et "l'index" ( qui permet de gérer la template ) comme cela :
http://pastebin.com/sxsiuppR

Sauf que moi je souhaiterai changer mon url, je vous propose donc un exemple

Imaginons que je souhaite changer mon irl de base qui est article?id=1 en article/1

Pour cela je réalise donc la ligne suivante dans mon htaccess :
RewriteRule article/([0-9]+) article.php?id=$1

Mais cela ne fonctionne pas a cause des lignes précédentes utilisé pour l'Ob_Start()

Alors j'aimerai pouvoir combiner les deux ou alors utiliser une autre méthode de "template"

Je m'en remet donc à vous, j'espère vous saurez m'aider à choisir un moyen de réaliser ce que je cherche.

Merci beaucoup.

1 réponse


Bonjour l'ami !
Alors tout d'accord quand un utilisateur appelle une page ses par exemple : index.php?page=ma_page
donc avec .htaccess ont pourrait faire cela :

RewriteEngine On
RewriteRule page/([a-zA-Z0-9]+) index.php?page=$1 [L]

RewriteEngine On
RewriteRule (.*) webroot/$1 [L]

Dans le dossier webroot vous créer un nouveau .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]
RewriteRule

Dans le index.php de webroot :

<?php 
require('libs/template.php');
$_template = new Template();
$url = isset($_GET'url']) ? $_GET'url'] : null;
$url = rtrim($url, '/');
$url = explode('/', $url);
if(empty($url[0])) {
    $page = 'index';    
} else {
    $page = $url[0];
}
$file = 'template/pages/' . $url[0] . '.php';
if(isset($page) && preg_match("/^[a-z0-9]+$/i", $page)) {
    $page = strtolower($url);
    if(file_exists($file)) {
        $_template->output($page);
    } else {
        $_template->output('404');
    }
} else {
    $_template->output($page);
}

fichier libs/template.php

<?php
class Template {
    var $layout = 'default';
    public function output($file) {
    ob_start();
    session_start();
    require_once('libs/configuration.php');
    if(isset($file) && file_exists('template/pages/' . $file . '.php')) {
        require_once('template/pages/' . $file. '.php');
    } else {
        die('Une erreur ses produite [Le fichier : ' . $file. '.php est inexistant].');
    }
    $content_for_layout = ob_get_clean() . "\r\n";
    if(isset($this->layout) && file_exists('template/layouts/' . $this->layout. '.php')) {
        require_once('template/layouts/' . $this->layout . '.php');
    } else {
        die('Une erreur ses produite [Le fichier : ' . $this->layout. '.php est inexistant].');
        }
    }
}

Voilà.

Ps : Si il y à des erreur ses par ce que je n'est pas tester le code est que j'ai tout marquer dans les balise code.

En espérant vous avoir aider :)

Cordialement.