Ventes croisées / Produits associés

Messagepar cynic- » Mer 01 Oct 2008, 11:48

Hello
Je tente d'adapter la contrib de ventes croisées X-Sell dispo ici :
http://www.oscommerce.com/community/contributions,1415/
Le but est de "croiser" les produits soi-même dans l'admin, donc différent de "also purchased" où cela semble se décider au fil des achats.

L'install demande de modifier cette fonction : tep_reset_cache_block

Mais je ne la trouve pas dans catalog/admin/includes/functions/general.php ni aucun équivalent dans les autres fichiers.

Help anyone ? Merki :)
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar j4k » Mer 01 Oct 2008, 13:47

quel genre de modif sur cette fonction ?

osCSS dispose de son propre système de cache, il semble que cette fontions fait référence au système de cache de osCommerce.

Sans faire cette modif, la contrib fonctionne-t-elle? sinon il va fallir chercher de la fonction cache osCSS pour voir si il y a quelque chose à modifier.

Cette contrib semble intéressante, tu nous fera le point sur la difficulté d'install et le compte rendu des fonctionnalités apportées?

(si elle vaut e coup, on pourrait l'ajouter au noyau, en option de remplacement de also_purchased_product)
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar cynic- » Mer 01 Oct 2008, 13:55

Yep, je m'y colle cet aprèm, et je te dis comment ça marche sans cette fonction ;)

Pour info :
Code: Tout sélectionner
Modify /catalog/admin/includes/functions/general.php look for

  function tep_reset_cache_block($cache_block) {
    global $cache_blocks;
    for ($i=0, $n=sizeof($cache_blocks); $i<$n; $i++) {
      if ($cache_blocks[$i]['code'] == $cache_block) {
        if ($cache_blocks[$i]['multiple']) {
          if ($dir = @opendir(DIR_FS_CACHE)) {
            while ($cache_file = readdir($dir)) {
              $cached_file = $cache_blocks[$i]['file'];
              $languages = tep_get_languages();
              for ($j=0, $k=sizeof($languages); $j<$k; $j++) {
                $cached_file_unlink = ereg_replace('-language', '-' . $languages[$j]['directory'], $cached_file);
                if (ereg('^' . $cached_file_unlink, $cache_file)) {
                  @unlink(DIR_FS_CACHE . $cache_file);
                }
              }
            }
            closedir($dir);
          }
        } else {
          $cached_file = $cache_blocks[$i]['file'];
          $languages = tep_get_languages();
          for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
            $cached_file = ereg_replace('-language', '-' . $languages[$i]['directory'], $cached_file);
            @unlink(DIR_FS_CACHE . $cached_file);
          }
        }
        break;
      }
    }
  }

and Replace with:

// BOF Better Tep_reset_cache_block
//  function tep_reset_cache_block($cache_block) {
//    global $cache_blocks;
//   $fp_err = FOpen(DIR_FS_CACHE.'cachelog.txt', 'w');
//    fwrite($fp_err, date('Y-m-d H:i:s').$cache_block."nn"); //add timestamp to the verbose log
//    for ($i=0, $n=sizeof($cache_blocks); $i<$n; $i++) {
//     fwrite($fp_err, 'in cache block '.$cache_blocks[$i]['code']."nn");
//      if ($cache_blocks[$i]['code'] == $cache_block) {
//        if ($cache_blocks[$i]['multiple']) {
//          if ($dir = @opendir(DIR_FS_CACHE)) {
//            while ($cache_file = readdir($dir)) {
//              $cached_file = $cache_blocks[$i]['file'];
//              fwrite($fp_err, 'cache file '.$cache_blocks[$i]['file']."nn");
//              $languages = tep_get_languages();
//              for ($j=0, $k=sizeof($languages); $j<$k; $j++) {
//                $cached_file_unlink = ereg_replace('-language', '-' . $languages[$j]['directory'], $cached_file);
//                fwrite($fp_err, 'cache file unlinked '.$cached_file_unlink."nn");
//                if (ereg('^' . $cached_file_unlink, $cache_file)) {
//                  fwrite($fp_err, 'unlinking '.$cache_file."nn");
//                  @unlink(DIR_FS_CACHE . $cache_file);
//                }
//              }
//            }
//            closedir($dir);
//          }
//        } else {
//          $cached_file = $cache_blocks[$i]['file'];
//          $languages = tep_get_languages();
//          for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
//            $cached_file = ereg_replace('-language', '-' . $languages[$i]['directory'], $cached_file);
//            @unlink(DIR_FS_CACHE . $cached_file);
//          }
//        }
//        break;
//      }
//    }
//    FClose($fp_err);
//  }
 
function tep_reset_cache_block($cache_block) {
  global $cache_blocks;
 
  $pid = '*';
  if ($cache_block == 'xsell_products') {
   $pid = '';
    if (isset($_GET['add_related_product_ID']) ) {
      $pid =  $_GET['add_related_product_ID'];
    }
    if ( !$pid ) $pid = '*';
  } 

  for ($i=0, $n=sizeof($cache_blocks); $i<$n; $i++) {
    if ($cache_blocks[$i]['code'] == $cache_block) {
      $glob_pattern = preg_replace('#-language.+$#', '-*', $cache_blocks[$i]['file']);
      foreach ( glob(DIR_FS_CACHE . $glob_pattern . '.cache' . $pid) as $cache_file ) {
         @unlink($cache_file);
      }
      break;
    }
  }
}
// EOF Better Tep_reset_cache_block
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar j4k » Mer 01 Oct 2008, 14:11

la fonction de cache osCSS se trouve dans includes/class/cache.php mais elle n'a rien à voir avec le cache osCommerce ...
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar cynic- » Ven 03 Oct 2008, 20:44

Petit souci, le produit associé ne s'affiche pas sous la fiche produit (le reste de la page non plus d'ailleurs)

Bout de code incriminé :
Code: Tout sélectionner
<!-- xsell_products //-->
<?php
     $info_box_contents = array();
     $info_box_contents[] = array('align' => 'left', 'text' => TEXT_XSELL_PRODUCTS);
     new contentBoxHeading($info_box_contents);

     $row = 0;
     $col = 0;
     $info_box_contents = array();
     while ($xsell = tep_db_fetch_array($xsell_query)) {
      if (tep_not_null($xsell['specials_new_products_price'])) {
        $xsell_price =  '<s>' . $currencies->display_price($xsell['products_price'], tep_get_tax_rate($xsell['products_tax_class_id'])) . '</s><br>';
         $xsell_price .= '<span class="productSpecialPrice">' . $currencies->display_price($xsell['specials_new_products_price'], tep_get_tax_rate($xsell['products_tax_class_id'])) . '</span>';
      } else {
        $xsell_price =  $currencies->display_price($xsell['products_price'], tep_get_tax_rate($xsell['products_tax_class_id']));
      }
       $text = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $xsell['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $xsell['products_image'], $xsell['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a><br><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $xsell['products_id']) . '">' . $xsell['products_name'] .'</a><br>' . $xsell_price. '<br><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=buy_now&product_to_buy_id=' . $xsell['products_id'], 'NONSSL') . '">' . tep_image_button('button_buy_now.gif', TEXT_BUY . $xsell['products_name'] . TEXT_NOW) .'</a>';
       $info_box_contents[$row][$col] = array('align' => 'center',
                                              'params' => 'class="smallText" width="33%" valign="top"',
                                              'text' => $text) ;
    $col ++;
       if ($col > 2) {
         $col = 0;
         $row ++;
       }
     }
new contentBox($info_box_contents);
?>
<!-- xsell_products_eof //-->
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Sam 04 Oct 2008, 12:39

X-Sell n'est pas si génial : j'ai rencontré des problèmes d'intégration, à cause de la gestion du cache. De plus, une fois installé, il n'est pas très pratique. Il n'y a pas de réciprocité des ventes je m'explique : Je décide d'afficher le produit B sous la fiche du produit A. Mais sous la fiche du produit B il n'y a rien, il faut refaire l'association dans l'autre sens.

Je me suis donc tourné vers Optional Related Products :
http://www.oscommerce.com/community/contributions,2293

Bien plus rapide à installer, la réciprocité se fait en un seul bouton... pour l'instant ça marche très bien !

Reste quelques réglages à faire (virer les tableaux) et une traduction, puis je mettrai à disposition :)
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04


Retourner vers Plugin

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron