Présentation

En standard, Copix génère des URL de deux formes différentes :

  • index.php?module=nomModule&group=nomGroup&action=nomAction en mode "default"
  • index.php/module/group/action en mode "prepend"

Copix propose également un système de réécriture d'URL sous la forme de classes vous permettant de personnaliser complètement la forme de ces dernières dans vos applications.

Ces classes, par convention, se situent dans le répertoire classes du module et portent le nom "nommodule.urlhandler.php".

Ainsi, pour un module "exemple", le gestionnaire d'url sera situé dans exemple/classes/exemple.urlhandler.php et héritera de CopixUrlHandler :

class UrlHandlerExemple extends CopixUrlHandler {
   public function get ($dest, $parameters, $mode){
   }
   public function parse ($path, $mode){
   }
}

Méthode get

Cette méthode est en charge de générer les URL. Elle reçoit en paramètre :

  • le trigramme module|group|action sous la forme d'un tableau associatif avec les clefs module, group et action
  • le tableau des paramètres demandés
  • le mode de gestion de URL

Elle devra retourner un objet de type CopixUrlHandlerGetResponse pour décrire complètement l'url.

Si votre gestionnaire souhaites indiquer qu'il ne gère pas l'URL reçue, vous retournerez "false".

Par exemple, si vous souhaitez générer l'URL http://www.votresite.org/chemin/vers/index.php/chemin/complet?parametre=valeur, vous auriez retourné cette réponse dans votre handler :

$obj = new CopixUrlHandlerGetResponse ();
$obj->path = array ('chemin', 'complet');
$obj->vars = array ('parametre'=>'valeur');
return $obj;

Méthode parse

Cette méthode est en charge d'analyser l'URL demandée par l'internaute et de la transformer en trigramme copix (module|group|action) avec éventuellement des paramètres supplémentaires.

L'exemple ci dessous permet d'indiquer à Copix qu'il faut, pour les appels aux urls de la forme "index.php/les_nouvelles/1/News-du-jour" réagir comme si l'internaute avait saisis index.php/les_nouvelles/front/read?news=1

class UrlHandlerExemple extends CopixUrlHandler {
   public function parse ($path, $mode){
      //Dans $path on obtient la liste 
      if (count ($path) == 2){
         if (($path[0] == 'les_nouvelles') && is_integer ($path[1])){
            return array ('module'=>'les_nouvelles', 'group'=>'front', 'action'=>'read', 'news'=>1);
         }
      }
   }
}