DevNet Posted September 19, 2012 Share Posted September 19, 2012 Bonjour, Je devance certainement l'enrichissement de la documentation 1.5, car il n'y a rien à ce sujet la. Je cherche à utiliser le système rewritecond maintenant bien présent dans la 1.5, mais à partir d'une personnalisation via un controller de module. L'accès à la page du module se fait par : domain.tld/module/lemodule/lecontroller La règle dans l'AdminMeta est bien enregistrée par défaut : module/{module}{/:controller} Ma question est comment faire pour ajouter de nouvelles règles personnalisées afin de les rendre fonctionnelles depuis le module controller. Du genre : domain.tld/module/lemodule/lecontroller/mon-rewrite-texte_id4 Si un dev à l'info, je suis prenneur A+ Link to comment Share on other sites More sharing options...
Damien Metzger Posted October 2, 2012 Share Posted October 2, 2012 Bonjour, Nous avons tous lu ton article de blog très intéressant à ce sujet http://blog.dev-net.fr/2012/10/fausse-joie-pour-le-dispatcher-ou-plutot-inacheve/ Et tu as parfaitement raison, il manque un petit quelque chose pour que ce soit pleinement utilisable. Il faudrait un hook spécial, qui au lieu de simplement appeler une méthode, permet d'enregistrer des routes dans un fichiers type settings.inc.php qui serait inclu dans le dispatcher (bon, plus vraiment un hook en fait ^^). Ce dev t'intéresserait ? Sur une branche dédiée ? Cordialement, 1 Link to comment Share on other sites More sharing options...
J. Danse Posted October 2, 2012 Share Posted October 2, 2012 Bah le mieux ce serait quand même de développer un truc qui permet de rajouter des paramètres ou un truc comme ça ! (moi, ça m'intéresse !!!!) 1 Link to comment Share on other sites More sharing options...
DevNet Posted October 2, 2012 Author Share Posted October 2, 2012 Je pense que passer des paramètres en config, est vraiment plus simple. L'idée actuelle dans le dispatcher était bien débutée, manque juste à la finaliser. Un serialize dans une variable de config et zou ... il est ensuite simple comme bonjour de définir l'array dans nos classes modules. En tout cas je te remercie Damien de t'être intéressé au sujet. Link to comment Share on other sites More sharing options...
rg701653 Posted October 2, 2012 Share Posted October 2, 2012 Ce dev t'intéresserait ? Sur une branche dédiée ? Si cette intervention est une main tendue à la communauté pour faire évoluer la solution alors je dis BRAVO ! Link to comment Share on other sites More sharing options...
J. Danse Posted October 2, 2012 Share Posted October 2, 2012 De fait, aussi ! (Et je vais demander à Dev Net de faire un article sur les produits virtuels, on sait jamais, ça fera p-e la même chose... ) Link to comment Share on other sites More sharing options...
Damien Metzger Posted October 2, 2012 Share Posted October 2, 2012 Hello, Je suis un peu allergique aux serialize mais d'un point de vue technique cette solution fonctionne en effet. Non seulement je tends la main, mais c'est quelque chose que j'ai déjà fait pour des fonctionnalités entières, comme le watermark ou l'onglet backup. Le premier n'est pas tant récupérer le développement mais plutôt assurer la maintenance derrière. Il faut donc bien concevoir le développement au préalable pour ne pas se retrouver avec du code que personne ne maintiendra. C'est un peu ce qu'il s'est passé sur les produits virtuels. On peut développer très vite, mais la maintenance prend un temps considérable, et on ne peut pas se le permettre. On est en train de préparer la mise en place des outils nécessaires pour ce genre de chose, mais on est toujours ouverts en attendant. Nous sommes toujours ravi de voir des tickets contenant la résolution sur la forge. Cordialement, 2 Link to comment Share on other sites More sharing options...
rg701653 Posted October 3, 2012 Share Posted October 3, 2012 Et nous (je pense) ravis de vous entendre dire ce genre de choses. 1 Link to comment Share on other sites More sharing options...
DevNet Posted October 3, 2012 Author Share Posted October 3, 2012 J.Dance semble partant pour conduire l'amélioration. Le principal c'est que la solution soit rapidement mise en place, soit dès la prochaine release ? 1 Link to comment Share on other sites More sharing options...
BigZ Posted October 3, 2012 Share Posted October 3, 2012 Cette fonctionnalité nous sera utile à tous ! Je suis aussi très heureux de voir que la team se décide à laisser participer les utilisateurs, ca ne pourra faire que le plus grand bien à la solution Link to comment Share on other sites More sharing options...
J. Danse Posted October 4, 2012 Share Posted October 4, 2012 Grâce à un override de la classe Dispatcher (ainsi que de la classe Meta pour mettre d'ajout les paramètres dans le champ), j'ai pu obtenir un résultat semblable, je pense. J'ai, dans mon besoin et ma configuration actuelle un module qui se présente comme suit: Nom du module: annuaire Controlleur: details Rewrite en SEO & URL's: /annuaire-details Passage de paramètres: /annuaire-details?id=152 Suite à l'override, j'ai modifié comme suit: Nom du module: annuaire Controlleur: details Rewrite en SEO & URL's: annuaire-details/{id}-{rewrite} Passage de paramètres: annuaire-details/152-name Actuellement, la route déclarée est analysée sur le même principe de base et intègre en $_GET les paramètres trouvés. Est-ce quelque chose du genre, que tu veux, DevNet ? NB: Actuellement, je garde les paramètres propres à PrestaShop (id, rewrite, id_category, ...) ; il est éventuellement possible de généraliser cela autrement pour avoir des paramètres très différents - mais cela demande plus de boulot, bien entendu. Link to comment Share on other sites More sharing options...
DevNet Posted October 4, 2012 Author Share Posted October 4, 2012 Le principal est de pouvoir personnaliser les routes rewrite en dehors du Dispatcher.php, dans un module par exemple. Link to comment Share on other sites More sharing options...
J. Danse Posted October 4, 2012 Share Posted October 4, 2012 Mais pourquoi, en dehors ? C'est là que je ne comprends pas... Link to comment Share on other sites More sharing options...
DevNet Posted October 4, 2012 Author Share Posted October 4, 2012 Depuis la classe module, pouvoir déclarer en toute simplicité les routes personnelles, qui seront prises en charge automatiquement par le dispatcher. En gros, il serai intéressant de pouvoir spécifier dans notre classe de module : public $mes_routes = array( 'ma-route-1' => array( 'controller' => null, 'rule' => '{module}-{controller}-{id}-{url}', 'keywords' => array( 'url' => array('regexp' => '[_a-zA-Z0-9-\pL]*'), 'id' => array('regexp' => '[0-9]+', 'param' => 'id'), 'module' => array('regexp' => 'monmodule', 'param' => 'module'), 'controller' => array('regexp' => 'moncontrollerdefault', 'param' => 'controller') ), 'params' => array( 'fc' => 'module' ) ), 'ma-route-2' => array( 'controller' => null, 'rule' => '{module}-{controller}-{cat}-{id}-{url}', 'keywords' => array( 'url' => array('regexp' => '[_a-zA-Z0-9-\pL]*'), 'cat' => array('regexp' => '[0-9]+', 'param' => 'cat'), 'id' => array('regexp' => '[0-9]+', 'param' => 'id'), 'module' => array('regexp' => 'monmodule', 'param' => 'module'), 'controller' => array('regexp' => 'moncontrollercat', 'param' => 'controller') ), 'params' => array( 'fc' => 'module' ) ) ); Ensuite, pouvoir récupérer l'instance du dispatcher afin d'y ajouter ces nouvelles routes persos à Dispatcher->default_routes (et toutes celles des autres modules actifs) avant que la méthode Dispatcher->loadRoutes() ne se traite. Reste à savoir si l'instance du dispatcher est utilisable lors du chargement des classes modules, afin de pouvoir les modifiés. J'avais pensé que passer le dispatcher dans le context pourrait être une solution, afin de l'utiliser dans le module par $this->context->dispatcher->default_routes et d'y injecter les routes persos via un array_push simple depuis un hook du module. Le hook serait bien sur placé dans la classe Dispatcher.php . Cette méthode, je l'ai essayé avec le hook actionDispatcher, mais ça ne marche pas. Car ce hook se lance après les Dispatcher->loadRoutes() Link to comment Share on other sites More sharing options...
J. Danse Posted October 4, 2012 Share Posted October 4, 2012 Et pourquoi pas, tout simplement, réaliser l'ajout des routes (dynamiquement) comme on le ferait dans le back-office, à l'installation du module ? Link to comment Share on other sites More sharing options...
DevNet Posted October 4, 2012 Author Share Posted October 4, 2012 C'est à dire ? Link to comment Share on other sites More sharing options...
J. Danse Posted October 4, 2012 Share Posted October 4, 2012 Lorsque l'on se rend dans le Back-Office, dans l'onglet "SEO & URL's", il est possible de définir une route personnalisée assez basique pour le module/controller. Je propose de faire quelque chose comme: $meta = new Meta(); $meta->rewrite = 'lerewrite/parametres'; $meta->controller = 'controller'; $meta->module = 'module'; $meta->add(); Un peu tout simplement... Link to comment Share on other sites More sharing options...
DevNet Posted October 5, 2012 Author Share Posted October 5, 2012 Je ne pense pas que cela fonctionne avec des paramètres dynamiques. L'ajout par les meta ne concerne que les url fixent connues, je me trompe peut-être ? Link to comment Share on other sites More sharing options...
J. Danse Posted October 5, 2012 Share Posted October 5, 2012 Tu ne te trompes pas, mais justement: j'ai pu mettre au point (pour mon besoin et en globalisant pas trop mal actuellement) l'ajout de paramètre dynamique (tel que id, rewrite, ...). Il faut donc - pour moi - implémenter cette mécanique et alors permettre l'ajout des URL's en direct ; via le module. Link to comment Share on other sites More sharing options...
DevNet Posted October 5, 2012 Author Share Posted October 5, 2012 Super Est-ce que ce mécanisme ou plutôt la déclaration des paramètres personnalisés se construise tel que le dispatcher le propose ? Ou est-ce que tu innoves une construction différente de paramètres ? Comme le propose Damien, il faut garder une harmonie dans les possibilités de configuration afin que la "maintenance" soit plus facile, et que ça colle à une documentation commune. Impatient de tester ta modif Link to comment Share on other sites More sharing options...
J. Danse Posted October 5, 2012 Share Posted October 5, 2012 J'ai conservé les keywords, tels que id, rewrite, id_category et j'en passe (même si ils ne sont pas tous utile dans ce cas là). Et la construction se fait de ce type /lerewritedemonchoix/{id}-{rewrite} ; par exemple ! Pour le test, je t'envoie dès que possible cela (je dois encore peaufiner un détails) 1 Link to comment Share on other sites More sharing options...
DevNet Posted October 5, 2012 Author Share Posted October 5, 2012 Pas de problème Link to comment Share on other sites More sharing options...
DevNet Posted October 19, 2012 Author Share Posted October 19, 2012 Bonjour, Nous avons tous lu ton article de blog très intéressant à ce sujet http://blog.dev-net....lutot-inacheve/ Et tu as parfaitement raison, il manque un petit quelque chose pour que ce soit pleinement utilisable. Il faudrait un hook spécial, qui au lieu de simplement appeler une méthode, permet d'enregistrer des routes dans un fichiers type settings.inc.php qui serait inclu dans le dispatcher (bon, plus vraiment un hook en fait ^^). Ce dev t'intéresserait ? Sur une branche dédiée ? Cordialement, Salut Damien, Comme J.Danse ou moi n'avons pas eu la branche svn, voilà pour ma part la proposition qui fonctionne et qui peut facilement être utilisée par les dev. http://blog.dev-net....-prestashop-1-5 Dis moi ce que tu en penses A+ 1 Link to comment Share on other sites More sharing options...
DevNet Posted October 22, 2012 Author Share Posted October 22, 2012 Il semblerai que sur php 5.3 cela génère une erreur sur les techniques de namepsace . Et donc de ce fait : $ClassName::getModuleRoutes() n'est pas pris en charge et renvoi : Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /home/demotemp./override/classes/Dispatcher.php on line 25 Affaire à suivre, je poursuis dans la résolution du problème ! Link to comment Share on other sites More sharing options...
DevNet Posted October 22, 2012 Author Share Posted October 22, 2012 Voila j'ai mis à jour l'article avec un nouveau code. J'ai mis aussi à jour les fichiers téléchargeables pour vos tests. A+ Link to comment Share on other sites More sharing options...
tarek.fellah Posted September 11, 2016 Share Posted September 11, 2016 Je remonte la discussion, j'ai trouvé qu'il y a un hook function hookModuleRoutes, je l'ai utilisé comme ceci dans mon module. public function hookModuleRoutes() { return array( 'article' => array( 'controller' => 'content', 'rule' => 'article/{id}-{rewrite}', 'keywords' => array( 'id' => array('regexp' => '[0-9]+', 'param' => 'id'), 'rewrite' => array('regexp' => '[_a-zA-Z0-9-\pL]*') ), 'params' => array( 'fc' => 'module', 'module' => 'prestapress', 'controller' => 'content' ) ), 'articles' => array( 'controller' => 'content', 'rule' => 'articles/{id}-{category}', 'keywords' => array( 'id' => array('regexp' => '[0-9]+', 'param' => 'category'), 'category' => array('regexp' => '[_a-zA-Z0-9-\pL]*') ), 'params' => array( 'fc' => 'module', 'module' => 'prestapress', 'controller' => 'content' ) ), ); } J'espère que cela aide quelqu'un, je suis preneur s'il y a des améliorations. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now