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]Modification du fil d'ariane, Supprimer le lien sur la catégorie en cours
mickael34
posté 12 Nov 2013, 11:09
Message #1


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Bonjour,

J'essaye de rendre mon site (MS2.2) le plus SEO Friendly possible.
Et sur les conseils d'une agence de réf, je souhaite faire des modifications sur mon fil d'ariane.

Dans une fiche produit, pas de problèmes.
On a : Accueil > Catégorie > Sous-Catégorie
On se trouve sur la fiche d'un produit et on a tous les liens qui pointent sur tous les chemins --> OK


Sauf que dans une catégorie, on a aussi :
Accueil > Catégorie > Sous-Catégorie
avec un lien sur tous les chemins.

Or si on se trouve dans la Catégorie ou Sous-Catégorie en question, le lien qui pointe donc sur la page en cours ne sert à rien !

L'idée se serait donc de faire sauter le lien (et juste le lien) de la page en cours.
Je ne sais pas si je suis très clair.

Pensez-vous cela possible ?

Ça doit se jouer ici :

Code
// add category names or the manufacturer name to the breadcrumb trail
  if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
      $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
      if (tep_db_num_rows($categories_query) > 0) {
        $categories = tep_db_fetch_array($categories_query);
        $breadcrumb->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
        $heading_title = $categories['categories_name'];
      } else {
        break;
      }
    }
  } elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
    $manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    if (tep_db_num_rows($manufacturers_query)) {
      $manufacturers = tep_db_fetch_array($manufacturers_query);
      $breadcrumb->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
      $heading_title = $manufacturers['manufacturers_name'];
    }
  }



Si vous avez des idées... smile.gif

Ce message a été modifié par mickael34 - 14 Nov 2013, 14:03.


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
FoxP2
posté 12 Nov 2013, 12:31
Message #2


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



à tester :

Code
        $categories[$i] = tep_db_fetch_array($categories_query);
        $breadcrumb->add($categories[$i-1]['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));


pour éviter un double » dans le fil d'ariane, il faut modifier la méthode trail de la classe : catalog\includes\classes\breadcrumb.php :

Code
if (($i+1) < $n ) $trail_string .= $separator;


devient

Code
if (($i+1) < $n && $this->_trail[$i]['title'] !== null) $trail_string .= $separator;
Go to the top of the page
 
mickael34
posté 12 Nov 2013, 14:15
Message #3


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Merci pour ton aide même si ça ne marche pas.

Le NOM de la Sous-Catégorie n'apparait pas.
Et le LIEN de la Sous-Catégorie (page sur laquelle on se trouve) est sur le nom de la Catégorie --> les liens sont "décalés" en résumé.

Je vais quand même explorer ton idée de modif de code mais plus ça va et plus je pense que c'est impossible dans l'état actuelle des choses (comment le fil d'ariane est construit).

smile.gif


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
FoxP2
posté 12 Nov 2013, 14:50
Message #4


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



ok, tu veux donc dans ton fil d'ariane que le dernier titre du lien apparaisse mais qu'il ne soit pas un lien cliquable.

dans ce cas, c'est plus simple :

dans la méthode trail de la classe catalog\includes\classes\breadcrumb.php, il suffit de changer :

Code
if (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link'])) {


par

Code
if (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link']) && $i<$n-1) {


en code source, pour la page contact_us.php, ça me donné le résultat attendu :

HTML
<div class="grid_12 ui-widget infoBoxContainer">
<div class="ui-widget-header infoBoxHeading">&nbsp;&nbsp;<a href="http://localhost" class="headerNavigation">Top</a> &raquo; <a href="http://localhost/oscommerce2334/catalog/index.php" class="headerNavigation">Catalog</a> &raquo; Contact Us</div>
</div>
Go to the top of the page
 
mickael34
posté 12 Nov 2013, 15:25
Message #5


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



On s'approche de la solution smile.gif

Effectivement ton changement faut sauter le "dernier lien".
C'est que je cherche à faire !

Par contre, il fait également sauter le dernier lien quand on est sur une fiche produit (normal).

Penses tu qu'il soit possible de rajouter une condition dans la classe ?

Du genre si catégorie alors...
Sinon ...


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
mickael34
posté 12 Nov 2013, 16:18
Message #6


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Ok, grâce à toi j'avance.

Pour que ta modif de mon fil d'ariane ne s'applique pas sur mes pages produits, j'ai dupliqué en renommant dans mon application_top la fonction breadcrumb en breadcrumb2 :

Code
  // include the breadcrumb class and start the breadcrumb trail
  require(DIR_WS_CLASSES . 'breadcrumb2.php');
  $breadcrumb2 = new breadcrumb2;

  $breadcrumb2->add(HEADER_TITLE_TOP, HTTP_SERVER);
// $breadcrumb->add(HEADER_TITLE_CATALOG, tep_href_link(FILENAME_DEFAULT));

// add category names or the manufacturer name to the breadcrumb trail
  if (isset($cPath_array)) {
    for ($i=0, $n=sizeof($cPath_array); $i<$n; $i++) {
      $categories_query = tep_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . (int)$cPath_array[$i] . "' and language_id = '" . (int)$languages_id . "'");
      if (tep_db_num_rows($categories_query) > 0) {
       $categories = tep_db_fetch_array($categories_query);
        $breadcrumb2->add($categories['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
        //$categories[$i] = tep_db_fetch_array($categories_query);
        //$breadcrumb->add($categories[$i-1]['categories_name'], tep_href_link(FILENAME_DEFAULT, 'cPath=' . implode('_', array_slice($cPath_array, 0, ($i+1)))));
        $heading_title = $categories['categories_name'];
      } else {
        break;
      }
    }
  } elseif (isset($HTTP_GET_VARS['manufacturers_id'])) {
    $manufacturers_query = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "'");
    if (tep_db_num_rows($manufacturers_query)) {
      $manufacturers = tep_db_fetch_array($manufacturers_query);
      $breadcrumb2->add($manufacturers['manufacturers_name'], tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id']));
      $heading_title = $manufacturers['manufacturers_name'];
    }
  }


Ensuite j'ai dupliqué également mon fichier includes/classes/breadcrumb.php en le renommant breadcrumb2.php (ici sans les modifs de liens).

Et enfin dans mon product_info.php, j'appelle mon "nouveau" breadcrumb2

Code
<?php echo $breadcrumb2->trail(' '); ?>


Ainsi :
- Dans mes catégories et sous catégories : pas de lien sur mon fil d'ariane sur la page en cours
- Dans mes fiches produits : liens sur tous les chemins.


Ca à l'aire de marcher.

Est-ce que c'est "valide" comme façon de faire ?

smile.gif


--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
FoxP2
posté 13 Nov 2013, 09:50
Message #7


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



mrgreen.gif Pouah quelle horreur !

je te montre comment c'est simple :

on modifie les deux méthodes suivantes de la classe catalog\includes\classes\breadcrumb.php :

Code
// on ajoute un paramètre booléen à la méthode, définit à false par défaut
    function add($title, $link = '', $isproduct = false) {
      // le paramètre est ajouté dans le tableau $_trail
      $this->_trail[] = array('title' => $title, 'link' => $link, 'isproduct' => $isproduct);    
    }

    function trail($separator = ' - ') {
      $trail_string = '';
      
      for ($i=0, $n=sizeof($this->_trail); $i<$n; $i++) {
        // on teste le paramètre  $isproduct, si il est à true, tous les liens sont ajoutés dans le fil  
        if (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link']) && $this->_trail[$i]['isproduct'] === true) {        
          $trail_string .= '<a href="' . $this->_trail[$i]['link'] . '" class="headerNavigation">' . $this->_trail[$i]['title'] . '</a>';
        // ce n'est pas un produit, on désactive le dernier lien (catégories ou autres)
        }elseif (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link']) && $i<$n-1) {
          $trail_string .= '<a href="' . $this->_trail[$i]['link'] . '" class="headerNavigation">' . $this->_trail[$i]['title'] . '</a>';        
        } else {
          $trail_string .= $this->_trail[$i]['title'];
        }
        
        if (($i+1) < $n ) $trail_string .= $separator;
      }

      return $trail_string;
    }


et dans le fichier catalog\includes\application_top.php, on ne modifie que cette partie, rien d'autre (oublie les précédente modifs sur les catégories)

Code
// add the products model to the breadcrumb trail
  if (isset($HTTP_GET_VARS['products_id'])) {
    $model_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
    if (tep_db_num_rows($model_query)) {
      $model = tep_db_fetch_array($model_query);
      // on ajoute le paramètre $isproduct à true
      $breadcrumb->add($model['products_model'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']), $isproduct = true);
    }
  }



j'ai mis les commentaires dans le code pour que tu comprennes un peu la logique.
Go to the top of the page
 
mickael34
posté 13 Nov 2013, 11:52
Message #8


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



mrgreen.gif Pouah quelle horreur !

À ce point là ?
biggrin.gif

Sauf que encore une fois si on veut être SEO Friendly, ta modif dans application_top :

Code
// add the products model to the breadcrumb trail
  if (isset($HTTP_GET_VARS['products_id'])) {
    $model_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
    if (tep_db_num_rows($model_query)) {
      $model = tep_db_fetch_array($model_query);
      // on ajoute le paramètre $isproduct à true
      $breadcrumb->add($model['products_model'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']), $isproduct = true);
    }
  }


Fait faire un lien "inutile" sur les pages produits : dans ton fil d'ariane, tu as un lien sur le "modèle".
Modèle qui d'ailleurs est inutile dans le fil d'ariane.
(cette partie du code était commentée avant dans mon fichier).



--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
FoxP2
posté 13 Nov 2013, 18:21
Message #9


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



Citation (mickael34 @ 13 Nov 2013, 11:52) *
(cette partie du code était commentée avant dans mon fichier).


et je suis censé le deviner ?
Go to the top of the page
 
mickael34
posté 13 Nov 2013, 21:13
Message #10


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Non c'est vrai désolé !

Mais dans tous les cas je cherche à avoir un fil d'ariane le plus "propre" possible.
Et que ce soit sur les pages catégories ou produits je ne veux pas de liens "inutiles".

Merci pour ton aide smile.gif



--------------------
Sur OsCommerce 2.2
Go to the top of the page
 
FoxP2
posté 14 Nov 2013, 09:32
Message #11


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1665
Inscrit : 3-June 09
Membre no 25501



si le product_model n'est pas pertinent comme information, autant le remplacer avec le nom du produit, mais de le laisser dans le breadcrumb :

Code
// remplace : the products model to the breadcrumb trail
// add the products name to the breadcrumb trail
  if (isset($HTTP_GET_VARS['products_id'])) {
    $model_query = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)$languages_id . "'");
    if (tep_db_num_rows($model_query)) {
      $model = tep_db_fetch_array($model_query);
      $breadcrumb->add($model['products_name'], tep_href_link(FILENAME_PRODUCT_INFO, 'cPath=' . $cPath . '&products_id=' . $HTTP_GET_VARS['products_id']));
    }
  }


Ensuite, dans les bonnes pratiques du développement, il est préférable d'étendre la classe originale, plutôt que de modifier l'original.

catalog\includes\application_top.php

Code
// include the breadcrumb class and start the breadcrumb trail
  require(DIR_WS_CLASSES . 'breadcrumb.php');
  // $breadcrumb = newbreadcrumb;
  require(DIR_WS_CLASSES . 'my_breadcrumb.php');
  $breadcrumb = new my_breadcrumb;



catalog\includes\classes\my_breadcrumb.php

Code
<?php
/*
  $Id$

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright © 2003 osCommerce

  Released under the GNU General Public License
*/

  class my_breadcrumb extends breadcrumb{

    function add($title, $link = '', $isproduct = false) {
      $this->_trail[] = array('title' => $title, 'link' => $link, 'isproduct' => $isproduct);    
    }

    function trail($separator = ' - ') {
      $trail_string = '';
      
      for ($i=0, $n=sizeof($this->_trail); $i<$n; $i++) {        
        if (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link']) && $this->_trail[$i]['isproduct'] === true) {        
          $trail_string .= '<a href="' . $this->_trail[$i]['link'] . '" class="headerNavigation">' . $this->_trail[$i]['title'] . '</a>';
        }elseif (isset($this->_trail[$i]['link']) && tep_not_null($this->_trail[$i]['link']) && $i<$n-1) {
          $trail_string .= '<a href="' . $this->_trail[$i]['link'] . '" class="headerNavigation">' . $this->_trail[$i]['title'] . '</a>';        
        } else {
          $trail_string .= $this->_trail[$i]['title'];
        }
        
        if (($i+1) < $n ) $trail_string .= $separator;
      }

      return $trail_string;
    }
  }
?>
Go to the top of the page
 
mickael34
posté 14 Nov 2013, 14:02
Message #12


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 181
Inscrit : 3-January 08
Membre no 20263



Merci pour ton aide FoxP2.

J'arrive enfin au résultat souhaité.

Merci smile.gif


--------------------
Sur OsCommerce 2.2
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 : 29th March 2024 - 15:52
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)