Forum CMS Made Simple FR
Module et routage d'url, comment ça marche ? - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : Module et routage d'url, comment ça marche ? (/thread-3215.html)



Module et routage d'url, comment ça marche ? - kube - 16/05/2014

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: !1.11.9
#~ Url du site :
#~ Hébergeur / Soft : Ubuntu server + apache2 + mysql + php5...
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.11.9
#~ Installed Modules:
#~ CMSMailer: 5.2.2
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.3
#~ MenuManager: 1.8.6
#~ MicroTiny: 1.2.5
#~ ModuleManager: 1.5.5
#~ News: 2.14.1
#~ Search: 1.7.11
#~ ThemeManager: 1.1.8
#~ MultiDomains: 2.1.1
#~ CGSimpleSmarty: 1.7.1
#~ CGExtensions: 1.38.1
#~ MleCMS: 1.11.4
#~ CGGoogleMaps: 2.4.5
#~ HostedVideoAlbums: 2.4.3
#~ AdvancedContent: 0.9.4.3
#~ FormBuilder: 0.7.4
#~ Captcha: 0.4.6
#~ Gallery: 1.6.1
#~ JQueryTools: 1.2.5
#~ CGContentUtils: 1.3.4
#~ Products: 2.19.5.1
#~ MysqlDump: 1.3.1
#~ AceEditor: 0.2.5
#~ CGSmartImage: 1.15
#~ CompanyDirectory: 1.20
#~ Postcode: 1.2.1
#~ FrontEndUsers: 1.21.18
#~ CustomContent: 1.9
#~ Uploads: 1.14.4
#~ TemplateExternalizer: 2.1.3
#~ SelfRegistration: 1.8
#~ CGEcommerceBase: 1.4.2
#~ MultiPrice: 1.1.0
#~ CGUserDirectory: 1.4.1
#~ OBfeumanager: 0.0.1
#~ GAMadeSimple: 1.1
#~ OBSelfregValidator: 0.0.1
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 50000000
#~ url_rewriting: mod_rewrite
#~ page_extension: /
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.5.9-1ubuntu4
#~ md5_function: On (True)
#~ gd_version: 2
#~ tempnam_function: On (True)
#~ magic_quotes_runtime: Off (False)
#~ E_STRICT: 2048
#~ E_DEPRECATED: 8192
#~ memory_limit: 128M
#~ max_execution_time: 60
#~ output_buffering: 4096
#~ safe_mode: Off (False)
#~ file_uploads: On (True)
#~ post_max_size: 50M
#~ upload_max_filesize: 50M
#~ session_save_path: /var/lib/php5 (1733)
#~ session_use_cookies: On (True)
#~ xml_function: On (True)
#~ xmlreader_class: On (True)
#~ Server Information:
#~ Server Api: apache2handler
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.5.37
#~ Server Db Grants: Found a "GRANT ALL" statement that appears to be suitable
#~ Server Time Diff: No filesystem time difference found
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Voilà, j'essaie de créer un module qui doit être joignable via une url spécifique (fournie via mail).
En gros, cette url, lorsqu'elle est appelée devrait charger une action spécifique de mon module (récupérer un paramètre et afficher un formulaire)

J'ai consulté le cookbook cmsms et retourné certains modules. Je dois ajouter ceci dans la fonction SetParameters de mon module:

Code :
[== PHP ==]
    $contentops = cmsms()->GetContentOperations();
    $returnid = $contentops->GetDefaultContent();
    $parms = array('action'=>'default','returnid'=>$returnid);
    $route = new CmsRoute('invite/', $this->GetName(),$parms,TRUE);

    cms_route_manager::register($route);

J'ai ensuite créé un fichier action.default.php pour voir si il y avait une réaction. (un simple echo suivit d'un exit)

Cela ne marche pas.

Comment faire ???


Module et routage d'url, comment ça marche ? - bess - 16/05/2014

C'est effectivement étonnant que cela ne marche pas ... Je me permet de te refaire un exemple complet

edit : essai sans le slash de fin de ta route !

en gros tu veux que tonsite.fr/mon/url/speciale/99 face appel à l'action mon_action(number)

Alors je te conseil de faire cela

1 / Tu déclare effectivement ton mapping url -> action mon_action dans ta main class de ton module (monmodule.module.php)

Code :
function SetParameters() {
   $this->RegisterRoute('/mon\/url\/speciale\/(?P<un_nombre>[0-9]+)$/',array('action'=>'mon_action', 'mon_identifiant' => 'un_nombre'));
  
}

(+ d'info sur la fonction et un exemple dans le SVN de Skeleton


Tu peux également enregistrer des routes non dynanique, appelées routes statiques qui sont + rapide que des routes dynamiques (ça va de soit)

Par exemple que l'url tonsite.fr/mon/url/speciale affiche systématiquement la même chose : l'action "mon_autre_action" avec un paramètre "mon_parametre" toujours égal à "foo"

Code :
function SetParameters() {
        $contentops = cmsms()->GetContentOperations();
        $returnid = $contentops->GetDefaultContent();
        $parms = array('action'=>'mon_autre_action','mon_parametre'=>'foo','returnid'=>$returnid);
        $route = new CmsRoute('mon/url/speciale',$this->GetName(),$parms,TRUE);
        cms_route_manager::register($route);
}

Un exemple d'utilisation de ces deux cas :

mon/url/speciale afficherait tous les profils utilisateurs dans une liste
mon/url/speciale/99 afficherait le détail du profil utilisateur n° 99


En espérant avoir été clair Smile


Module et routage d'url, comment ça marche ? - kube - 19/05/2014

Merci pour tes explications Bess.

De mon côté j'ai contacté Robert campbell (Calguy1000) qui m'a fait remarquer que l'utilisation de la fonction SetParameters pour ça était obsolète. Il faut utiliser InitializeFrontend().

J'ai entre temps réussit à faire fonctionner un routage dynamique dans une install de test de cmsms (avec mod_rewrite).

Par contre si je veux appliquer ce même module sur le vrais site en production, cela ne marche pas. Lorsque je vais sur l'url dans le navigateur j'obtiens un 301 moved permanently suivit d'un cancel.

A tout hasard, voici le htaccess
Code :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_METHOD} !POST$
RewriteRule ^(.*) %{REQUEST_URI}/ [NE,R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?page=$1 [QSA]