Jump to content

[Résolu] URL friendly avec index.php ne fonctionne pas


Recommended Posts

Bonjour,

 

Je viens de passer de la version 1.4 à la version 1.5.5 et j'ai un problème d'URL friendly avec index.php.

 

Mon site fonctionne avec deux langues FR et DU. Quand j'entre l'URL Pharmanovea.com la page s'affiche bien avec l'URL Pharmanovea.com/fr mais sans URL friendly pharmacie_en_ligne qui est pourtant définie dans SEO et URL.

 

Si je change de langue l'URL Pharmanovea.com/nl/online_apotheek ne fonctionne pas il renvoie une erreur 404. Par contre si je rentre Pharmanovea.com/nl cela fonctionne comme pour fr. Par contre une fois en nl, fr ne fonctionne plus car il affiche pharmanovea.com/fr/pharmacie_en_ligne qui donne une erreur 404.

 

Le changement de langue sue une autre page fonctionne bien par contre. C'est uniquement l'index.php qui ne fonctionne pas.

 

J'ai bien vidé le cache de mon navigateur pour les tests et je n'ai rien changé au .htaccess.

 

Une idée pour résoudre ce problème ?

 

Merci d'avance,

Jean-Marie

 

Link to comment
Share on other sites

Bonjour,

 

J'ai également le même problème.

Boutique en multilangue en 1.5.5 et url simplifié activé.

L'url friendly fonctionne parfaitement sur toutes les pages sauf pour index.php

 

J'ai :

domaine/fr

domaine/en

 

au lieu de :

domaine/fr/accueil

domaine/en/home

 

J'ai vidé les caches, régénéré le htacces etc... etc... rien n'y fait.

 

Par curiosité j'ai fait une install propre de la version 1.5.3, problème identique.

J'ai donc fait une autre install propre de la version 1.5.0.1 et là ça marche !

 

Je vais donc remonter version par version pour trouver à partir de laquelle le problème survient et regarder les changelog en espérent y trouver une piste...!

 

Je te tiens au courant si je trouve quelque chose.

 

Et si quelqu'un a une idée, elle serait la bienvenue !!

 

Bonne journée..

Link to comment
Share on other sites

J'ai trouvé !!  :)

 

Il faut modifier une petite valeur de rien du tout dans la classe dispacher. Pas besoin d'intervenir sur le htacces

Donc pour faire propre j'ai fait un override de la classe.

 

Voici comment faire :

 

// EDIT POST MODIFIÉ VOIR RÉPONSE DANS POST #7

 

Ensuite pour que l'override soit bien pris en compte il faut vider le fichier class_index.php dans le dossier "cache", il se régénérera automatiquement en prenant l'override en compte !

 

Ouf soulagée d'avoir trouvé..

Dis moi si ça marche bien chez toi...

Bon week-end !!

Edited by anda81 (see edit history)
Link to comment
Share on other sites

J'ai été un peu vite pour répondre.

Cela fonctionne en effet pour index.php mais plus moyen d'afficher une catégorie ou un produit, l'URL rewriting ne fonctionne plus !

 

Encore un petit effort et cela devrait fonctionner.

 

Dommage,

Jean-Marie

Link to comment
Share on other sites

Ah zut je suis désolée...

 

Hier je me suis aperçu que je m’étais trompé à deux niveaux :

 

1- l'override dispacher.php n'est pas au bon endroit il doit être dans override/classe

2- J'ai tronqué une partie de la fonction loadRoutes donc après correction voici le contenu de l'override :

 

<?php
class Dispatcher extends DispatcherCore
{             
        protected function loadRoutes($id_shop = null)
    {
                    $context = Context::getContext();
        // Load custom routes from modules
        $modules_routes = Hook::exec('moduleRoutes', array('id_shop' => $id_shop), null, true, false);
        if (is_array($modules_routes) && count($modules_routes))
            foreach($modules_routes as $module_route)
                foreach($module_route as $route => $route_details)
                    if (array_key_exists('controller', $route_details) && array_key_exists('rule', $route_details)
                        && array_key_exists('keywords', $route_details) && array_key_exists('params', $route_details))
                    {
                        if (!isset($this->default_routes[$route]))
                        $this->default_routes[$route] = array();
                        $this->default_routes[$route] = array_merge($this->default_routes[$route], $route_details);
                    }
        
        // Set default routes
        foreach (Language::getLanguages() as $lang)
            foreach ($this->default_routes as $id => $route)
                $this->addRoute(
                    $id,
                    $route['rule'],
                    $route['controller'],
                    $lang['id_lang'],
                    $route['keywords'],
                    isset($route['params']) ? $route['params'] : array(),
                    $id_shop
                );
        
        // Load the custom routes prior the defaults to avoid infinite loops
            if ($this->use_routes)
        {
            // Get iso lang
            $iso_lang = Tools::getValue('isolang');
            $id_lang = $context->language->id;
            if (!empty($iso_lang))
                $id_lang = Language::getIdByIso($iso_lang);

            // Load routes from meta table
            $sql = 'SELECT m.page, ml.url_rewrite, ml.id_lang
                    FROM `'._DB_PREFIX_.'meta` m
                    LEFT JOIN `'._DB_PREFIX_.'meta_lang` ml ON (m.id_meta = ml.id_meta'.Shop::addSqlRestrictionOnLang('ml', $id_shop).')
                    ORDER BY LENGTH(ml.url_rewrite) DESC';
            if ($results = Db::getInstance()->executeS($sql))
                foreach ($results as $row)
                {
                    if ($row['url_rewrite'])
                        $this->addRoute($row['page'], $row['url_rewrite'], $row['page'], $row['id_lang'], array(), array(), $id_shop);
                }

            // Set default empty route if no empty route (that's weird I know)
            if (!$this->empty_route)
                $this->empty_route = array(
                    'routeID' =>    'page',  // Modif pour ulr friendly on index.php
                    'rule' =>        '',
                    'controller' =>    'index',
                );

            // Load custom routes
            foreach ($this->default_routes as $route_id => $route_data)
                if ($custom_route = Configuration::get('PS_ROUTE_'.$route_id, null, null, $id_shop))
                    foreach (Language::getLanguages() as $lang)
                        $this->addRoute(
                            $route_id,
                            $custom_route,
                            $route_data['controller'],
                            $lang['id_lang'],
                            $route_data['keywords'],
                            isset($route_data['params']) ? $route_data['params'] : array(),
                            $id_shop
                        );
        }
    }
        
}
 

 

 

Voilà chez moi problème réglé dites moi si ça marche chez vous !

Link to comment
Share on other sites

Bonjour Anda,

 

Cela semble fonctionner correctement maintenant.

Le fait qu'il passe dans l'autre langue quand on relance l'index est probablement du au cache. Donc pour être concret on est en FR l'URL fonctionne avec pharmanovea.com/fr/pharmacie_en_ligne puis on relance la page d'index il repasse en pharmanovea.com/nl/online_apotheek.

 

Merci beaucoup pour ton aide, cela m'a été très utile.

 

Bravo pour tes connaissances en Prestashop.

 

Bien cordialement,

Jean-Marie

Link to comment
Share on other sites

Bonjour Jean-Marie,

 

Ravie que cela fonctionne maintenant chez toi aussi... Peux tu ajouter [Résolu] dans le titre du fil ?

 

Concernant les langues, j'ai déjà eu ce prb par le passé je ne sais pas d'où ça vient mais en tout cas je suis passée sur ton site pour voir et je n'ai eu aucun prb sur l'index avant et après avoir changé les langues.. peut être cela vient de ton cookie ¿?

 

Bonne journée !

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...