osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> [resolu]Redirection categories vers fiches produits
gaet
posté 2 Sep 2013, 18:28
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



Bonsoir, je viens de réorganiser mon e-commerce en supprimant des sous-catégories. Je souhaite rediriger ses sous catégories vers la fiche du produit qui correspond.

J'ai donc dans le .htaccess mis RedirectPermanent /catalog/fsdfsdfd-c-1_1.html http://www.exemple.fr/catalog/-p-1.html
La 301 fonctionne bien mais j'ai une variable cPath en fin d'url. http://www.exemple.fr/catalog/-p-1.html?cPath=1_1

Comment enlever la variable cPath en fin d'url ?

Ce message a été modifié par gaet - 5 Sep 2013, 16:20.


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
Gnidhal
posté 3 Sep 2013, 00:15
Message #2


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Bonjour,
Je pense que tu ne pourras pas depuis le htaccess car tu renvoie vers l'url-rewriting qui reprends les variables GET en fin de lien
Il me paraitrait plus logique de faire une redirection depuis le code PHP avec un tep_redirect()
un truc du genre :
if($current_category == '101') tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO,'products_id=101'));
Mais tu peux aussi intercepter le $cPath...
ça me parait bien plus effectif que de passer par un redirectPermanent
tep_redirect change le header(location) tu peux aménager la fonction en y ajoutant un paramètre $type qui te permettrait d'insérer une entête header("Status: 301 Moved Permanently"); avant le location.
ta déclaration de fonction devient
Code
function tep_redirect($url,$type=''){...

avec dedans un
Code
if($type=='301') header("Status: 301 Moved Permanently");

ton lien de redirection devriendrait alors :
Code
tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO,'products_id=101'),'301');

et hop, ton url_rewriting s'y retrouve et google est content wink.gif


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
gaet
posté 3 Sep 2013, 09:34
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



Bonjour merci de m'avoir répondu, j'utilisais avant des 301 vers la page d'accueil ceci ne me donnait aucune variable mais pour ses catégories il est plus pertinent de les rediriger vers des fiches produits.
J n'ai jamais fait de 301 via php. Je dois les mettre dans quel fichier ?

Je vais essayer de trouver des informations la dessus plus détaillées.


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
Gnidhal
posté 3 Sep 2013, 13:29
Message #4


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Ce n'est pas à proprement parler "via PHP" mais plutôt en exploitant les fonctionnalités osCommerce
Un tep_redirect doit être mis de préférence dans application_top.php puisqu'il envoie un header, il faut le faire avant tout code affiché.
Normalement, tu dois avoir dans application_top.php la variable $current_category_id qui est construite automatiquement à partir de $cPath
dans le bas de application_top.php tu peux donc ajouter un test sur cette variable :
Code
if (isset($current_category_id) && $current_category_id == "ID de ta catégorie à rediriger") tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . "ID du produit destinataire"));

cela fonctionne mais fait une redirection standard (302 je crois)
Si tu veux un 301 il faut ajouter l'entête header("Status: 301 Moved Permanently"); et donc modifier la fonction tep_redirect (comme indiqué précédemment) que tu trouveras dans functions/general.php

Dans le principe quand la catégorie pointée est celle que tu veux rediriger, la redirection est faite avant l'affichage vers la page de destination souhaitée : ici la page produit.

Sur cette base, avec très peu de code supplémentaire, tu pourrais même ajouter un moidule de commande depuis l'administration pour ajouter ou retirer une redirections. Mais ce n'est peut-être pas utile dans ton cas.


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
gaet
posté 3 Sep 2013, 13:48
Message #5


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



J'ai juste cinq redirections à faire ce n'est donc pas utile d'avoir la gestion dans l'administration.
J'ai ajouté au bas d'application-top
Code
if (isset($current_category_id) && $current_category_id == "112_113") tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . "3674"));


Peut être que le code ne marche pas car c'est une sous-catégorie. La catégorie 112 se retrouve introuvable.


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
FoxP2
posté 3 Sep 2013, 15:21
Message #6


Ceinture marron OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



pourtant gnidhal l'explique bien : la variable $current_category_id est construite automatiquement à partir de $cPath.
112_113 n'est pas un categories_id issue de la base données, mais un chemin.


--------------------


Go to the top of the page
 
gaet
posté 3 Sep 2013, 15:30
Message #7


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



Merci pour la rectification FoxP2 et encore merci à Gnidhal. Je confirme que j'obtiens une 302.
Par contre pour avoir la redirection 301 dans general.php j'ai
Code
  function tep_redirect($url) {
    if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {
      tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
    }

    if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page
      if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url
        $url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL
      }
    }

    $url = str_replace('&', '&', $url);
    session_write_close();
    header('Location: ' . $url);
    exit;
  }

Je dois donc y insérer ?
Code
tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO,'products_id=101'),'301');

A quel endroit ?

Ce message a été modifié par gaet - 3 Sep 2013, 19:00.


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
Gnidhal
posté 4 Sep 2013, 21:58
Message #8


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



bah regarde mon exemple au départ.
Il faut modifier cette fonction comme indiqué plus haut mais j'aurais plus vite fait de la réécrire ici :
Code
  function tep_redirect($url,$type='') {
    if ( (strstr($url, "\n") != false) || (strstr($url, "\r") != false) ) {
      tep_redirect(tep_href_link(FILENAME_DEFAULT, '', 'NONSSL', false));
    }

    if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page
      if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url
        $url = HTTPS_SERVER . substr($url, strlen(HTTP_SERVER)); // Change it to SSL
      }
    }

    $url = str_replace('&', '&', $url);
    session_write_close();
    if($type=='301') header("Status: 301 Moved Permanently");
    header('Location: ' . $url);
    exit;
  }

et ton lien précédent qui n'est pas dans la fonction mais dans ton application_top(tu l'as déjà réalisé) qui donne un 302 est à modifier comme suit :
Code
tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . "3674"),'301');
La redirection sera un 301 puisqu'on passe le paramètre à la fonction qui se chargera d'ajouter l'entête qui va bien.
allez, au boulot ! wink.gif


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
gaet
posté 5 Sep 2013, 07:36
Message #9


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



Merci beaucoup tout fonctionne parfaitement.
Si je supprime de la BDD ses sous catégories que j'ai dirigés. Cela pose t'il un problème ?


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
Gnidhal
posté 5 Sep 2013, 16:14
Message #10


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 9219
Inscrit : 4-March 03
Lieu : Auray
Membre no 927



Ha ! j'ai un doute, ne supprime rien pour le moment : je crains que si la catégorie n'existe plus ça génère une erreur de redirection en boucle!
Avec le test sur $current_category_id il se peut que tu ne puisses supprimer les catégories et la redirection que quand tu seras certain que GG et les autres moteurs a bien enregistré la redirection.
Quelques jours ? quelques semaines ?
Fais un test pour voir.
Si ça plante il y a une possibilité de travailler sur le $_GET['cPath'] plutôt que sur le $current_category_id
voici ce que tu devrais mettre dans ton application_top en complétant avec toutes tes catégories et les bons products_id de produit (et en supprimant les précédentes redirections)
Code
  if (isset($_GET['cPath'])) {
    $cParray = explode('_', $_GET['cPath']);
    if (in_array('id de ta catégorie périmée',$cParray )) tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . "3674"),'301');
    // ligne ci dessus à répéter pour chacune des catégories périmées
  }
dans ce cas tu pourras dégager les catégories périmées puisque le test se fera assurément sur le paramètre entrant GET['cPath']


--------------------
Tout d'abord : - Ni Hotline ni Service Après Vente, ces forums sont un lieu d'échange. BIEN POSER SA QUESTION (généralités)
Les "Informations Importantes" que vous devez ABSOLUMENT avoir lues :
Règlement, Bien poser sa question dans ces forums et Bien utiliser les Forums.
Les raccourcis pour gagner du temps : la FAQ, les PDF de la Doc (MS2-fr): PDF-V1 et PDF-V2, le moteur de Recherche sur les forums , la Liste des Contributions de Corbin.

----------------------------- Quelques sites de référence ---------------------------
PHP: Le site du Zéro et PHP Débutant avec la DOC en français -- HTML: Self HTML - WebProgrammation -- CSS: OpenWeb - AlsaCréations - CSS/Edge -- Autres ressources: - XajaX - highslide js
Les bons outils : EasyPHP - WAMP-5 - - Notepad++ - Firefox et son extension WebDeveloper
Le gène idéal c'est le gène original. Le génie des halles est un Génie des Alpages qui tente d'être à la page. (Merci f'murrr pour les cours de philosophie de chien)
Go to the top of the page
 
gaet
posté 5 Sep 2013, 16:19
Message #11


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 122
Inscrit : 23-July 09
Lieu : Aveyron
Membre no 25830



Encore merci pour la réponse. Je vais simplement les laisser cela n'est pas gênant. J'ai donc bien fait de ne rien supprimer.

smile.gif


--------------------
OScommerce 2.2RC1 : featured-products, Ajax shopingcart, who's online enhancement, product lising columns, how did you hear, Easy graphical border, ot discount coupons, show sub categories onmouse over, maincats, URL Rewriting, header tag seoV 3.1.8
Go to the top of the page
 
aurelou
posté 14 Jul 2015, 02:51
Message #12


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 131
Inscrit : 9-April 10
Membre no 27422



Bonjour,

J'ai le même problème mais j'aimerais faire des redirections d'anciennes catégories vers de nouvelles.

Comment modifier ceci pour que ce soit adapté à des redirections de catégories et non vers des pages produits ?

Citation
tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO,'products_id=101'),'301');


Merci pour votre aide.


--------------------
Oscommerce 2.3.4 BS
Go to the top of the page
 
aurelou
posté 14 Jul 2015, 12:10
Message #13


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 131
Inscrit : 9-April 10
Membre no 27422



Bon, c'est résolu, voilà ce que j'ai fais :

J'ai fais les modifications nécessaires dans general.php, puis dans index.php dans <head> j'ai ajouté ceci :

Citation
<?Php
if ((int) $current_category_id == '40')
{ tep_redirect(tep_href_link("xxx-c-42.html"),'301');
}
?>


Et ça marche smile.gif


--------------------
Oscommerce 2.3.4 BS
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 23rd November 2017 - 06:37
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)