Non aux brevets logiciels

SpipLab

ViderLaRacine

PagePrincipale :: DerniersChangements :: Vous êtes 38.103.63.61 (Connexion)

Historique

2005-05-02 La fonctionalité est incluse dans SPIP avec le fichier page.php3. La page ci dessous est obsolète.

2005-02-03 Utilisation des if ... normaux, ajout d’une couche de métal et de inc-urls-minh.

2005-02-01 Création : par Minh sur la base d’un code de Nicolas.


Pour archive

Voici un fichier index.php3 qui :

-  Est rétrocompatible.
-  Comprend les URLs de la forme /index.php3?article=3
-  En général Apache est configuré de telle sorte qu’on peut même écrire /?article=3
-  Le script permet de placer des .php3 dans le répertoire de squelette. La présence du .php3 reste utile pour le cas où on veut changer le $delai ou bien changer le $fond en fonction d’un mot clé par exemple.

Dans ce dernier cas, le .php3 ne doit pas chercher à appeler inc-public.php3 directement mais mettre à 1 la variable $want_inc_public (*** à tester ***).

Le but de la manoeuvre est que le .php3 n’ai pas besoin de savoir où il est par rapport à la racine. Ceci pour mettre les .php3 dans le même répertoire que le .html. Notez que si ce .php3 veut s’appelerlui même il doit alors le faire à travers index.php3. Si ça va pas, il y a toujours les rewriterules et la racine.

<?php
$fond = 'sommaire';
$delai = 24 * 3600;
$want_inc_public = 1;
require_once ("ecrire/inc_version.php3");

$query=$_SERVER['QUERY_STRING'];


# Le sommaire
if ($query == '' || $query == 'var_mode=recalcul'){
  $fond='sommaire';
  require_once 'inc-public.php3';
  return;
  }

# On reconnait seulement les requêtes commençant par "unmotclé=1"
if (!ereg("^([[:alpha:]]+)=([0-9]+)", $query, $regs)){
  $fond='404';
  require_once 'inc-public.php3';
  return;
  }

#Discrimination positive
function permis($script){
  $okay = array( "sommaire", "article", "rubrique" , "breve" , "auteur" , "forum", "plan", "recherche");
  #Il faudrait ajouter une option de configuration ???
  return in_array($script, $okay);
  }

if (!permis($regs[1])) {
  $fond='404' ;
  require_once 'inc-public.php3';
  return;
  }

$fond= $regs[1];
$_GET['id_'.$fond] = $regs[2];

#Par défaut si il y a un script on ne SPIPe pas de fond.
# Le script n'est nécessaire que si on veut modifier $delai
# ou $fond, par exemple en fonction de mots clés...
#
#La modif est que les scripts n'appellent pas inc-public directement mais
# le demandent en remettant want_inc_public à 1.
# La raison est que le script ne connait pas le chemin du répertoire SPIP
#
if ( $script=find_in_path($fond.'.php') ) { $want_inc_public=0; include_once $script; }
if ( $script=find_in_path($fond.'.php3') ) { $want_inc_public=0; include_once $script; }

if ($want_inc_public && (!find_in_path($fond.'.html')) ) {
       $fond = 'plan'; #Requête bien formatée mais fond non trouvé
}

endif;

if ($want_inc_public) { require_once 'inc-public.php3'; }

?>

Il faut faire en plus un inc-url-minh avec les fonctions qui vont bien :

<?php

// executer une seule fois
if (defined("_INC_URLS2")) return;
define("_INC_URLS2", "1");

// Utiliser avec le index.php3 qui dispatche

function generer_url_article($id_article) {
       return "?article=$id_article";
}

function generer_url_rubrique($id_rubrique) {
       return "?rubrique=$id_rubrique";
}

function generer_url_breve($id_breve) {
       return "?breve=$id_breve";
}

function generer_url_mot($id_mot) {
       return "?mot=$id_mot";
}

function generer_url_auteur($id_auteur) {
       return "?auteur=$id_auteur";
}


function generer_url_document($id_document) {
       if (intval($id_document) <= 0)
               return '';
       if ((lire_meta("creer_htaccess")) == 'oui')
               return "spip_acces_doc.php3?id_document=$id_document";
       if ($row = @spip_fetch_array(spip_query("SELECT fichier FROM spip_documents WHERE id_document = $id_document")))
               return ($row['fichier']);
       return '';
}

function recuperer_parametres_url($fond, $url) {
       global $contexte;
       return;
}

#TODO: url forums

?>
et ajouter $type_urls = "minh" dans mes_options.php3

Notes

Le script permettrait de se passer des article.php3 et autre dans la racine, mais il faut les garder pour ne pas casser les liens entrants des sites existants qui n’ont pas utilisé les belles URL.

Le principe est similogue au module action. (similogue = analaire ?). L’idée générale d’avoir un dispatcher unique est aussi décrite ici

BUG : $_GET est une variable d’environnement qui présente la liste des variables reçues dans une requête HTTP/GET par le script PHP. En modifier une valeur est donc une hérésie - et je me demande pourquoi c’est possible - et il faut plutôt passer par une variable perso.

BUG : Les articles virtuels ne sont plus redirigés. Sauf quand on clique sur "Répondre à cet article !"

Voir aussi UrlsPropres