Bonjour,

j’ais essayer de crée un site avec une seul entré, j’ai crée un pti bou de code mais j’aurais bien aimer avoir votre avis, est ce que des element peuvent poser probleme, des erreurs, etc...

merci a vous

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?page=$1 [QSA,L]
if(isset($_GET['page']) && strlen($_GET['page']) <= 150){

    $infosRoot = explode('/', $_GET['page']);
    $titre = false;
    $id = false;
    $numPage = false;
    $parmCount = 1;

    foreach ($infosRoot as $key => $value) {
        if(empty($infosRoot[$key])) {
            unset($infosRoot[$key]);
        }
        else{
            $infosRoot[$key] = preg_replace('#[^0-9a-z_-]+#i', '',  $value);

            // le prenier paramtre est la page a charger
            // elle peut etre accompagner d’un id
            // exemple : monsite.fr/users-6   (affiche le membre avec l’id 6)
            if($key == 0){
                $infosRoot['page'] = explode('-', $infosRoot[0]);

                if(is_array($infosRoot['page']) AND is_numeric(end($infosRoot['page']))){
                    $infosRoot['id'] = (int) array_pop($infosRoot['page']);
                }

                $infosRoot['page'] = implode('-', $infosRoot['page']);
            }

            // le Deuxieme paramtre est le titre de la page
            // exemple : monsite.fr/users-6/Louis-Litt   (titre de la page : Louis-Litt)
            if($key == 1){
                $infosRoot['titre'] = $infosRoot[1];    
            }

            // Un paramtre pur gere la pagination 
            // exemple : monsite.fr/news/page-4
            if (preg_match("#page-([0-9]+)#", $value)) {
                $infosRoot['numPage'] = explode('-', $infosRoot[$key]);

                if(is_array($infosRoot['numPage']) AND is_numeric(end($infosRoot['numPage']))){
                    $infosRoot['numPage'] = (int) array_pop($infosRoot['numPage']);
                }

            }
            // Le dernier c’est pour recupere tout autre parametre eventuel 
            // exemple : monsite.fr/news/un-param-autre (param1 = un-param-y, param2 = un-param-x,)
            elseif($key >= 2){
                $infosRoot['param'.$parmCount] = $value;
                $parmCount ++;  
            }

            unset($infosRoot[$key]);

        }

    }

}else{
    $infosRoot['page'] = 'index';
}

// verification de $infosRoot['page'], le fichier exite t’il
if(file_exists('pages/'.$infosRoot['page'].'.php')){

    require_once('pages/'.$infosRoot['page'].'.php');
    ob_start();
    require_once('public/views/'.$infosRoot['page'].'.php');
    $contentsTemplate = ob_get_clean();
    require_once('public/template/defaut.php');

}else{
    header('Location: '. ROOT .'/404');    
}

15 réponses


arnich
Réponse acceptée

Pour eviter cela il faut que dans ta conf apache tu créés un virtualhost (ex : local.dev) qui pointera vers le dossier de ton site.
On doit pouvoir aussi trouver une solution dans la htaccess en modifiant BaseUrl (de memoire)

clementp
Auteur

non personne ?

j'ai mal expliquer peut etre ?

Salut,

Bon, c'est du code spaghetti, donc pas génial.

Utilise ===, meilleur perf (je dis pas qu'il faut l'utiliser tout le temps, mais dans la grande majorité des cas, === est plus adapté, doc).

Je regarderais plus en détails demain, quand je serais plus éveillé. :)

Ahah, mais utilises bien === . === check le type et la valeur, donc castes bien tes valeurs (string) "true" != (boolena) true, je préfère le dire, si ça peut éviter des heures de debug ^ ^

Il faut noter qu'il existe aussi le !==qui va avec.

== peut servir, mais c'est uniquement dans des cas très rares (savoir si deux instances sont de la même classe, mais n'ont pas obligatoirement les mêmes propriétés, par exemple).

clementp
Auteur

Merci de vos reponses, je note pour les ===

Bon, c'est du code spaghetti, donc pas génial.

lol que veut dire cette phare ?
qu’est-ce qui est "mieux" ?

Du code sphagetti, c'est de la logique qui n'est pas dans des classes.

le code spaghetti s'oppose a la programmation orienté objet, dans laquelle tout est bien rangé dans des classes.

1 class = 1 objectif.
Le but est d'éviter d'avoir une super class coûteux suisse qui rend plusieurs services.

Un autre point d'amélioration, utilise les Exceptions throw new Execption, et log les erreurs, c'est super super important !

clementp
Auteur

ha oki c’etait prevu par la suite !

le petit truck chian c’est qu’avec cette logique je suis obliger de faire des url avec http://

avec cette logique je suis obliger de faire des url avec http://

What ? Quel logique ? Tu utilisais quoi avant ?

Une seul chose à retenir quand on fait du OOP : SOLID.

clementp
Auteur

la logique des url /article/id-article/titre
m’oblige a faire des liens href=http://www.monsite.fr/article/id-article/titre

avant href=article.php?id=id-article

j’aurai bien aimer fair href= /article/id-article/titre

<a href="/article/id-article/titre">link</a> t'envoie sur quel url ?

clementp
Auteur

si je suis la par exemple http://localhost/monSite/

si je clic la <a href="/article/5/titre5">link</a>

je me retrouve http://localhost/article/5/titre5

et sans sous repestoir il me semble que ca fait des truck comme cela http://localhost/article/5/titre5/article/3/titre3

Ça, c'est tout à fait normal, vu que / signifie la racine, donc tu demandes article/5/titre5 à partir de la racine, pas a partir du dossier de ton site.