Réécriture des URL par des userfunctions

Un article de Typo3 CMS / Documentation Typo3 / Support Typo3.

Aller à : Navigation, Rechercher

Il est possible de ré-écrire les URL générées par realUrl avec ses propres fonctions. Prenons un exemple précis.

RealUrl me génère une url du type http://novotel.dev.oblady.com/interface-dadministration/corriger-la-e-brochure?Questionnaire[uid]=23&Questionnaire[Base]=eBrochure_meeting

L'identifiant Questionnaire[uid]=23 correspond au questionnaire que je veux modifier. J'aimerai faire remonter dans l'URL à la place de Questionnaire[uid]=23 le nom de l'hôtel qui a réalisé ce questionnaire. Pour faire la correspondance entre le questionnaire et l'hôtel on utilise le champ cruser_id de la table eBrochure_meeting. Cette table n'est d'ailleur pas fixe mais peut être une autre table.

Pour répondre à ce besoin je vais définir à l'aide d'URLTool la fonction à utiliser pour encoder/décoder mon paramètre. Pour cela je dois :

 - créer une extension vide depuis le kickstarter.
 - une fois l'extension créée, je crée un fichier class.tx_realurl_userfunctest.php à la racine du dossier de
mon extension (dans l'exemple ci-dessous j'ai appelé mon extension patch_realurl)


Dans le fichier class.tx_realurl_userfunctest.php je colle le code suivant :

<?php
 
class tx_realurl_userfunctest extends tslib_pibase {
        function main($params, $ref)    {       	
        	if ($params['decodeAlias'])     {
                        return $this->alias2id($ref,$params['value']);
                } else {
                        return $this->id2alias($ref,$params['value']);
                }
 
 
        }
 
        //Fonction qui code
        function id2alias($ref,$value){
 
        }
 
        //Fonction qui décode
        function alias2id($ref,$value){
 
        }
}
 
?>


Je dois maintenant faire le lien dans UrlTool entre l'élément dans l'url que je veux réécrire et la fonction à utiliser pour le réécrire. Pour cela j'ajoute les lignes suivantes dans UrlTool.

'eBrochure' => array (
         '0' => array (
            'GETvar' => 'Questionnaire[uid]',
            'userFunc' => 'EXT:patch_realurl/class.tx_realurl_userfunctest.php:&tx_realurl_userfunctest->main'
          ),
    ),


Nous avons donc 2 fonctions, une pour coder id2alias et une pour décoder alias2id. Reste simplement à mettre dans la première le code permettant de ressortir le nom de l'hôtel en fonction de l'id du questionnaire et dans la seconde, le code permettant de récupère l'id du questionnaire en fonction du nom de l'hôtel.

<?php
 
class tx_realurl_userfunctest extends tslib_pibase {
        function main($params, $ref)    {
        	if ($params['decodeAlias'])     {
                        return $this->alias2id($ref,$params['value']);
                } else {
                        return $this->id2alias($ref,$params['value']);
                }
 
 
        }
 
        //Fonction qui code
        function id2alias($ref,$value){
 
        	$table = $ref->orig_paramKeyValues['Questionnaire[Base]'];
        	$uid = $value;
 
        	$req = $GLOBALS['TYPO3_DB']->exec_SELECTquery("*",$table,"uid=".$uid);
        	if ($res=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($req)){
        		$fe_user  = $this->pi_getRecord("fe_users",$res['cruser_id']);
        	} 
 
 
         	return $fe_user['username'];
        }
 
 
        //Fonction qui décode
        function alias2id($ref,$value){
        	$param =t3lib_div::_GET();
        	$table = $param['Questionnaire']['Base'];
        	$username = $value;
 
        	//On récupère l'utilisation correspondant au username
        	$req = $GLOBALS['TYPO3_DB']->exec_SELECTquery("*","fe_users","username=\"".$username."\"");
        	if ($res=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($req)){
 
        		//On récupère l'enregistrement e-Brochure correspondant
        		$req2 = $GLOBALS['TYPO3_DB']->exec_SELECTquery("*",$table,"cruser_id=".$res['uid']);
        		if ($res2=$GLOBALS['TYPO3_DB']->sql_fetch_assoc($req2)){
 
        			return $res2['uid'];
        		}
 
        	} 
        }
 
 
}
 
 
?>