[plugin] EXTRA PRODUCT FIELDS : plusieurs champs sur la fiche-produits

[plugin] EXTRA PRODUCT FIELDS : plusieurs champs sur la fiche-produits

Messagepar cynic- » Mar 15 Sep 2009, 12:17

Source : http://www.oscommerce.com/community/contributions,6856
Version osCss : 1.2.2 (pas testé sur antérieures / not tested on older versions)

Voici l'adaptation osCss d'EPF / EXTRA PRODUCT FIELDS, permettant l'ajout de champs dans vos fiches-produits.
- gestion des langues pour les nouveaux champs
- affichage ou non sur le "product listing"
- comme pour la gestion d'attributs, possibilité d'entrer des champs dans une liste déroulante et aussi des sous-champs (exemple pour un DVD, champ "boîtier" et sous-champs "cartonné" ou "plastique")
- utilisation des champs dans les meta keywords

Here is the osCss adaptation of EPF / EXTRA PRODUCT FIELDS, allowing to add extra fields in your product pages.
- management of languages for new fields
- display or not on the product listing
- as for attributes management, possibility to enter new fields in a drop-down list and child fields
- extra fields are used in your site's meta keywords

NOTE : quelques bugs très gênants subsistent, voir plus bas. Ceci est en cours de correction mais votre aide est la bienvenue ! Je manque de temps !
NOTE : some very annoying bugs still exist, see below. This is being corrected but any help is welcome ! I lack time !

Changelog : ajout admin, modifier la mise en page admin, changer $HTTP_GET_VARS en $_GET ?
Changelog : add module in admin, modify admin page layout, change $HTTP_GET_VARS into $_GET ?

INSTALL TIME !
1) Sauvegardez votre base de données !
Save your database !

2) Avec phpMyAdmin ou un outil similaire, lancer ces requêtes SQL sur votre base de données :
Using phpMyAdmin or a similar tool, perform the following SQL statements on your database:

/! Ici le préfixe utilisé par défaut est "osc_". Modifier si nécessaire.
/! Here the default table prefix is "osc_". Change if necessary.

Code: Tout sélectionner
DROP TABLE IF EXISTS osc_extra_product_fields;
CREATE TABLE osc_extra_product_fields (
  epf_id int NOT NULL auto_increment,
  epf_order int NOT NULL default 0,
  epf_status tinyint(1) NOT NULL default 1,
  epf_uses_value_list tinyint(1) not null default 0,
  epf_advanced_search tinyint(1) not null default 1,
  epf_show_in_listing tinyint(1) not null default 0,
  epf_size tinyint unsigned not null default 64,
  epf_use_as_meta_keyword tinyint(1) not null default 0,
  epf_use_to_restrict_listings tinyint(1) not null default 0,
  epf_show_parent_chain tinyint(1) not null default 0,
  PRIMARY KEY (epf_id),
  KEY IDX_ORDER (epf_order)
);

Code: Tout sélectionner
DROP TABLE IF EXISTS osc_extra_field_labels;
CREATE TABLE osc_extra_field_labels (
  epf_id int NOT NULL,
  languages_id int NOT NULL,
  epf_label varchar(64),
  epf_active_for_language tinyint(1) not null default 1,
  PRIMARY KEY (epf_id, languages_id)
);

Code: Tout sélectionner
DROP TABLE IF EXISTS osc_extra_field_values;
CREATE TABLE osc_extra_field_values (
  value_id int unsigned not null auto_increment,
  epf_id int not null,
  languages_id int not null,
  parent_id int unsigned not null default 0,
  sort_order int not null default 0,
  epf_value varchar(64),
  primary key (value_id),
  key IDX_EPF (epf_id, languages_id)
);

3) Copier extra_fields.php et extra_values.php dans catalog/admin/
Copy extra_fields.php and extra_values.php into catalog/admin/ directory
Dernière édition par cynic- le Mar 15 Sep 2009, 12:39, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Mar 15 Sep 2009, 12:17

4) A LA FOIS dans catalog/includes/database_tables.php ET catalog/admin/includes/database_tables.php AJOUTEZ les lignes suivantes avant la balise fermante ?> :
In BOTH catalog/includes/database_tables.php AND catalog/admin/includes/database_tables.php ADD the following lines somewhere before the closing ?> :
Code: Tout sélectionner
//Extra Product Fields
  define('TABLE_EPF', DB_TABLE_PREFIX . 'extra_product_fields');
  define('TABLE_EPF_LABELS', DB_TABLE_PREFIX . 'extra_field_labels');
  define('TABLE_EPF_VALUES', DB_TABLE_PREFIX . 'extra_field_values');

5)
5a) A LA FOIS dans catalog/includes/functions/general.php ET catalog/admin/includes/functions/general.php AJOUTEZ les lignes suivantes avant la balise fermante ?> :
In BOTH catalog/includes/functions/general.php AND catalog/admin/includes/functions/general.php ADD the following lines before the closing ?>:

Code: Tout sélectionner
// BOF Extra Product Fields
  function tep_get_extra_field_list_value($value_id, $show_chain = false) {
    $sql = tep_db_query("select epf_value, parent_id from " . TABLE_EPF_VALUES . " where value_id = " . (int)$value_id);
    $value = tep_db_fetch_array($sql);
    if ($show_chain && ($value['parent_id'] > 0)) {
      return tep_get_extra_field_list_value($value['parent_id'], true) . ' | ' . $value['epf_value'];
    } else {
      return $value['epf_value'];
    }
  }
 
  function tep_list_epf_children($parent_id) {
    $sql = tep_db_query("select value_id from " . TABLE_EPF_VALUES . " where parent_id = " . (int)$parent_id);
    $list = '';
    while ($i = tep_db_fetch_array($sql)) {
      $list .= ', ' . $i['value_id'] . tep_list_epf_children($i['value_id']);
    }
    return $list;
  }
 
  function tep_build_epf_pulldown($epf_id, $languages_id, $value_array = '', $parent_id = 0, $indent = '') {
    if (!is_array($value_array)) $value_array = array();
    $sql = tep_db_query("select epf_value, value_id from " . TABLE_EPF_VALUES . " where epf_id = " . (int)$epf_id . " and languages_id = " . (int)$languages_id . " and parent_id = " . (int)$parent_id . " order by sort_order, epf_value");
    while ($v = tep_db_fetch_array($sql)) {
      $value_array[] = array('id' => $v['value_id'], 'text' => $indent . $v['epf_value']);
      $value_array = tep_build_epf_pulldown($epf_id, $languages_id, $value_array, $v['value_id'], $indent . '·');
    }
    return $value_array;
  }
// EOF Extra Product Fields

5b) Dans catalog/admin/includes/functions/general.php UNIQUEMENT insérez les lignes suivantes avant la balise fermante ?> :
In catalog/admin/includes/functions/general.php ONLY insert the following code somewhere before the closing ?>

Code: Tout sélectionner
  function tep_get_product_extra_value($epf_id, $product_id, $language_id) {
    $epf_query = tep_db_query("select epf_id, epf_uses_value_list from " . TABLE_EPF . " where epf_id = " . (int)$epf_id);
    $e = tep_db_fetch_array($epf_query);
    $field = "extra_value" . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id'];
    $product_query = tep_db_query("select " . $field . " from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$product_id . "' and language_id = '" . (int)$language_id . "'");
    $product = tep_db_fetch_array($product_query);
    return $product[$field];
  }

6) Dans catalog/includes/languages/french.php AJOUTEZ les lignes suivantes avant la balise fermante ?> :

Code: Tout sélectionner
define('TEXT_ANY_VALUE', 'Toutes valeurs');  // Extra Product Fields
define('TEXT_RESTRICT_TO', 'Restreindre <strong>%s</strong> &agrave; : %s et ses sous-valeurs (si pr&eacute;sentes).'); // Extra Product Fields

In catalog/includes/languages/english.php ADD the following lines somewhere before the final ?>

Code: Tout sélectionner
define('TEXT_ANY_VALUE', 'Any Value');  // Extra Product Fields
define('TEXT_RESTRICT_TO', 'Restrict <strong>%s</strong> to: %s and its sub-values (if any).'); // Extra Product Fields

7) Dans catalog/includes/content/index_products.php vers la ligne 24 trouvez cette portion de code :
In catalog/includes/content/index_products.php around line 24 find the section of code that reads as follows:

Code: Tout sélectionner
<div id="headingCatImg">
<?php echo tep_image(DIR_WS_IMAGES . $image, HEADING_TITLE, HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?>

Juste après AJOUTEZ les lignes suivantes, avant la balise fermante </div> :
Immediately AFTER ADD the following lines of code, before the closing </div>:

Code: Tout sélectionner
<!-- begin extra product fields -->
<?php
 $epf_list = array();
  foreach ($epf as $e) {
  if ($e['restrict']) $epf_list[] = $e['field'];
  }
 echo tep_draw_form('epf_restrict', FILENAME_DEFAULT, 'get');
  if (is_array($_GET) && (sizeof($_GET) > 0)) {
 reset($_GET);
 while (list($key, $value) = each($_GET)) {
    if ( (strlen($value) > 0) && ($key != tep_session_name()) && (!in_array($key, $epf_list)) ) {
   echo tep_draw_hidden_field($key, $value);
   }
 }
 }
 foreach ($epf as $e) {
  if ($e['restrict']) {
   echo sprintf(TEXT_RESTRICT_TO, $e['label'], tep_draw_pull_down_menu($e['field'], tep_build_epf_pulldown($e['id'], $languages_id, array(array('id' => '', 'text' => TEXT_ANY_VALUE))),'', 'onchange="this.form.submit()"')) . '<br>';
  }
 }
 ?>
  </form>
<!-- end extra product fields -->

8) Dans catalog/index.php vers la ligne 109 trouvez :
In catalog/index.php around line 109 find:

Code: Tout sélectionner
// We show them all
        $listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" . (int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id . "'";
      }
    }

Juste après AJOUTEZ les lignes suivantes :
Immediately AFTER ADD the following lines of code:

Code: Tout sélectionner
// begin extra product fields
    $restrict_by = '';
    foreach ($epf as $e) {
      if ($e['restrict']) {
        if (isset($_GET[$e['field']]) && is_numeric($_GET[$e['field']])) {
          $restrict_by .= ' and (pd.' . $e['field'] . ' in (' . (int)$_GET[$e['field']] . tep_list_epf_children($_GET[$e['field']]) . '))';
        }
      }       
    }
    $listing_sql .= $restrict_by;
// end extra product fields

9) Vers la ligne 87 trouvez cette portion de code :
Around line 87 find the section of code that reads as follows:
Code: Tout sélectionner
        case 'PRODUCT_LIST_WEIGHT':
          $select_column_list .= 'p.products_weight, ';
          break;
      }
    }

// show the products of a specified manufacturer

Juste AVANT le commentaire AJOUTEZ les lignes suivantes :
Immediately BEFORE the comment ADD the following lines:

Code: Tout sélectionner
// begin Extra Product Fields
    $epf_query = tep_db_query("select e.epf_id, e.epf_uses_value_list, e.epf_use_to_restrict_listings, e.epf_show_parent_chain, e.epf_show_in_listing, l.epf_label from " . TABLE_EPF . " e join " . TABLE_EPF_LABELS . " l where e.epf_status and (e.epf_show_in_listing or e.epf_use_to_restrict_listings) and (e.epf_id = l.epf_id) and (l.languages_id = " . (int)$languages_id . ") and l.epf_active_for_language order by e.epf_order");
    $epf = array();
    while ($e = tep_db_fetch_array($epf_query)) {
      $epf[] = array('id' => $e['epf_id'],
                     'label' => $e['epf_label'],
                     'uses_list' => $e['epf_uses_value_list'],
                     'show_chain' => $e['epf_show_parent_chain'],
                     'restrict' => $e['epf_use_to_restrict_listings'],
                     'listing' => $e['epf_show_in_listing'],
                     'field' => 'extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id']);
      $select_column_list .= 'pd.extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id'] . ', ';
    }
// end Extra Product Fields

10) Dans catalog/includes/languages/french/advanced_search.php AJOUTEZ la ligne suivante avant la balise fermante ?> :

Code: Tout sélectionner
define('TEXT_OPTIONAL', 'Les entr&eacute;es dans les champs ci-dessous sont optionnelles, &agrave; moins que le crit&egrave;re de recherche ne soit laiss&eacute; vide. Dans ce cas au moins un des champs ci-dessous devra &ecirc;tre compl&eacute;t&eacute;.');  // Extra Product Fields

In catalog/includes/languages/english/advanced_search.php ADD the following line somewhere before the closing ?> :

Code: Tout sélectionner
define('TEXT_OPTIONAL', 'Entries in the fields below are optional unless the Search Criteria is` left blank. In that case at least one field below must have an entry.'); // Extra Product Fields

11) Dans catalog/includes/content/advanced_search.php
In catalog/includes/content/advanced_search.php

11a) Trouvez cette portion de code :
Find the lines that read as follows:

Code: Tout sélectionner
<p>
  <label for="pfrom"><?php echo ENTRY_PRICE_FROM; ?></label>

Juste AVANT ces lignes AJOUTEZ le code suivant :
Immediately BEFORE these lines ADD the following code:

Code: Tout sélectionner
<?php
// begin Extra Product Fields
    foreach ($epf as $e) {
?>
              <p>
       <label><?php echo $e['label']; ?></label>
               
                <?php if ($e['uses_list']) {
                  echo tep_draw_pull_down_menu($e['field'], 'value_id', tep_build_epf_pulldown($e['id'], $languages_id, array(array('id' => '', 'text' => TEXT_ANY_VALUE))));
                } else {
                  echo tep_draw_input_field($e['field'], '');
                } ?>
                </p>
<?php
}
// end Extra Product Fields
?>

11b) Trouvez cette portion de code :
Find the lines that read as follows:

Code: Tout sélectionner
 
  <p>
  <label><?php echo ENTRY_CATEGORIES; ?></label>

Juste AVANT ces lignes AJOUTEZ le code suivant :
Immediately BEFORE these lines ADD the following code:

Code: Tout sélectionner
 
 <p><?php echo TEXT_OPTIONAL; ?></p>

12) Dans catalog/includes/js/advanced_search.js.php trouvez :
In catalog/includes/js/advanced_search.js.php find:

Code: Tout sélectionner
 
  if ( ((keywords == '') || (keywords.length < 1)) && ((dfrom == '') || (dfrom == '<?php echo DOB_FORMAT_STRING; ?>') || (dfrom.length < 1)) && ((dto == '') || (dto == '<?php echo DOB_FORMAT_STRING; ?>') || (dto.length < 1)) && ((pfrom == '') || (pfrom.length < 1)) && ((pto == '') || (pto.length < 1)) ) {
    error_message = error_message + "* <?php echo ERROR_AT_LEAST_ONE_INPUT; ?>n";

REMPLACEZ par les lignes suivantes :
REPLACE them with the following lines:

Code: Tout sélectionner
  // begin Extra Product Fields
  var cat = document.advanced_search.categories_id.value;
  var mfg = document.advanced_search.manufacturers_id.value;
<?php
foreach ($epf as $e)
{
 echo '  var epf' . $e['id'] . ' = document.advanced_search.' . $e['field'] . ".value;n";
}
?>
// end Extra Product Fields

  if ( ((keywords == '') || (keywords.length < 1)) && ((dfrom == '') || (dfrom == '<?php echo DOB_FORMAT_STRING; ?>') || (dfrom.length < 1)) && ((dto == '') || (dto == '<?php echo DOB_FORMAT_STRING; ?>') || (dto.length < 1)) && ((pfrom == '') || (pfrom.length < 1)) && ((pto == '') || (pto.length < 1))
  // begin Extra Product Fields
   && (cat == '') && (mfg == '')
<?php
foreach ($epf as $e)
{
 $fieldid =  'epf' . $e['id'];
 echo " && (( $fieldid == '' ) || ($fieldid.length < 1))";
}
?>
// end Extra Product Fields
) {
    error_message = error_message + "* <?php echo ERROR_AT_LEAST_ONE_INPUT; ?>n";

Note : voir plus bas* / Note : see below*

13) Dans catalog/includes/content/advanced_search.php juste avant :
In catalog/includes/content/advanced_search.php just before:

Code: Tout sélectionner
<div id="advancedSearch">

AJOUTEZ le code suivant :
ADD the following code:

Code: Tout sélectionner
<?php
// begin Extra Product Fields
    $epf_query = tep_db_query("select e.epf_id, e.epf_uses_value_list, l.epf_label from " . TABLE_EPF . " e join " . TABLE_EPF_LABELS . " l where e.epf_status and e.epf_advanced_search and (e.epf_id = l.epf_id) and (l.languages_id = " . (int)$languages_id . ") and l.epf_active_for_language order by e.epf_order");
    $epf = array();
    while ($e = tep_db_fetch_array($epf_query)) {
      $epf[] = array('id' => $e['epf_id'],
                     'label' => $e['epf_label'],
                     'uses_list' => $e['epf_uses_value_list'],
                     'field' => 'extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id']);
    }
// end Extra Product Fields
?>

14) Dans catalog/advanced_search_result.php
In catalog/advanced_search_result.php

14a) Trouvez les lignes suivantes :
Find the lines that read as follows:

Code: Tout sélectionner
  if (tep_not_null($dfrom)) {
    $where_str .= " and p.products_date_added >= '" . tep_date_raw($dfrom) . "'";
  }

Juste AVANT ceci AJOUTEZ les lignes suivantes :
Immediately BEFORE this ADD the following lines:

Code: Tout sélectionner
// begin Extra Product Fields
foreach ($epf as $e) {
  if ($e['search']) { // only process advanced searchable fields
    $value = '';
    if (isset($_GET[$e['field']]) && !empty($_GET[$e['field']]))
      $value = $_GET[$e['field']]; // get value passed from advanced_search.php
    if ($e['uses_list']) {
      if ($value != '') $where_str .= " and (pd." . $e['field'] . " in (" . (int)$value . tep_list_epf_children($value) . "))";
    } else {
      unset($epf_value_keywords); // erase any keywords from previous field
      tep_parse_search_string($value, $epf_value_keywords);
      if (($value != '') && isset($epf_value_keywords) && (sizeof($epf_value_keywords) > 0)) {
        $where_str .= " and (";
        for ($i=0, $n=sizeof($epf_value_keywords); $i<$n; $i++ ) {
          switch ($epf_value_keywords[$i]) {
            case '(':
            case ')':
            case 'and':
            case 'or':
              $where_str .= " " . $epf_value_keywords[$i] . " ";
              break;
            default:
              $keyword = tep_db_prepare_input($epf_value_keywords[$i]);
              $where_str .= "(pd." . $e['field'] . " like '%" . tep_db_input($keyword) . "%')";
              break;
          }
        }
        $where_str .= ")";
      }
    }
  }
}
// end Extra Product Fields

14b) Trouvez les lignes suivantes :
Find the lines that read as follows:

Code: Tout sélectionner
          if (isset($_GET['search_in_description']) && ($_GET['search_in_description'] == '1')) $where_str .= " or pd.products_description like '%" . tep_db_input($keyword) . "%'";

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER this ADD the following lines:

Code: Tout sélectionner
// begin Extra Product Fields
          if (isset($_GET['search_in_description']) && ($_GET['search_in_description'] == '1')) // extra fields are part of product description and so should be searched only if searching in descriptions
            foreach ($epf as $e) {
              if (!$e['uses_list']) // can only search directly entered fields and not ones chosen from a list
                $where_str .= " or pd." . $e['field'] . " like '%" . tep_db_input($keyword) . "%'";
            }
// end Extra Fields Contribution

14c) Trouvez la ligne suivante :
Find the line that reads as follows:

Code: Tout sélectionner
  $select_str = "select distinct " . $select_column_list . " m.manufacturers_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as final_price ";

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER this ADD the following lines:

Code: Tout sélectionner
  // begin Extra Product Fields
  foreach ($epf as $e) {
    $select_str .= ', pd.' . $e['field'] . ' ';
  }
  // end Extra Product Fields

14d) Trouvez la ligne suivante :
Find the line that reads as follows:

Code: Tout sélectionner
if (empty($dfrom) && empty($dto) && empty($pfrom) && empty($pto) && empty($keywords)) {

REMPLACEZ pour donner ceci :
CHANGE it to read like this instead:

Code: Tout sélectionner
  if (empty($dfrom) && empty($dto) && empty($pfrom) && empty($pto) && empty($keywords)
// begin Extra Product Fields
     && !tep_not_null($epf_values) &&
     (isset($HTTP_GET_VARS['categories_id']) && empty($HTTP_GET_VARS['categories_id'])) &&
     (isset($HTTP_GET_VARS['manufacturers_id']) && empty($HTTP_GET_VARS['manufacturers_id']))
// end Extra Product Fields
     ) {

Note : voir plus bas* / Note : see below*

14e) Juste au-dessus de cette ligne, vous trouverez cette portion de code :
Just above this line there is a section of code that reads as follows:

Code: Tout sélectionner
    if (tep_not_null($keywords)) {
      if (!tep_parse_search_string($keywords, $search_keywords)) {
        $error = true;

        $messageStack->add_session('search', ERROR_INVALID_KEYWORDS);
      }
    }
  }

Juste AVANT la dernière accolade fermante INSÉREZ le code suivant :
Just BEFORE the last closing brace INSERT the following code:
Code: Tout sélectionner
// begin Extra Product Fields
    if (tep_not_null($epf_values)) {
      foreach ($epf_values as $value) {
        if (!tep_parse_search_string($value, $epf_value_keywords)) {
          $error = true;
          $messageStack->add_session('search', ERROR_INVALID_KEYWORDS . $value );
        }
      }
    }
// end Extra Product Fields

Ce qui devrait donner:
This entire section should now read as follows:
Code: Tout sélectionner
    if (tep_not_null($keywords)) {
      if (!tep_parse_search_string($keywords, $search_keywords)) {
        $error = true;

        $messageStack->add_session('search', ERROR_INVALID_KEYWORDS);
      }
    }
// begin Extra Product Fields
    if (tep_not_null($epf_values)) {
      foreach ($epf_values as $value) {
        if (!tep_parse_search_string($value, $epf_value_keywords)) {
          $error = true;
          $messageStack->add_session('search', ERROR_INVALID_KEYWORDS . $value );
        }
      }
    }
// end Extra Product Fields
  }

14f) Trouvez la ligne suivante :
Find the line that reads as follows:
Code: Tout sélectionner
if ( (isset($_GET['keywords']) && empty($_GET['keywords'])) &&

Juste APRÈS cette ligne AJOUTEZ les lignes suivantes :
Immediately AFTER this line ADD the following :

Code: Tout sélectionner
// begin Extra Product Fields
       $epf_empty &&
       (isset($_GET['categories_id']) && empty($_GET['categories_id'])) &&
       (isset($_GET['manufacturers_id']) && empty($$_GET['manufacturers_id'])) &&
// end Extra Product Fields

Note : voir plus bas* / Note : see below*

14g) Trouvez la ligne suivante :
Find the line that reads as follows:

Code: Tout sélectionner
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_ADVANCED_SEARCH);

Juste APRÈS cette ligne AJOUTEZ les lignes suivantes :
Immediately AFTER this line ADD the following:

Code: Tout sélectionner
// begin Extra Product Fields
  $epf_query = tep_db_query("select e.epf_id, e.epf_uses_value_list, e.epf_advanced_search, e.epf_show_parent_chain, e.epf_show_in_listing, l.epf_label from " . TABLE_EPF . " e join " . TABLE_EPF_LABELS . " l where e.epf_status and (e.epf_id = l.epf_id) and (l.languages_id = " . (int)$languages_id . ") and l.epf_active_for_language order by e.epf_order");
  $epf = array();
  while ($e = tep_db_fetch_array($epf_query)) {  // retrieve all active extra fields
    $epf[] = array('id' => $e['epf_id'],
                   'label' => $e['epf_label'],
                   'uses_list' => $e['epf_uses_value_list'],
                   'show_chain' => $e['epf_show_parent_chain'],
                   'search' => $e['epf_advanced_search'],
                   'listing' => $e['epf_show_in_listing'],
                   'field' => 'extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id']);
  }
  $epf_empty = true;
  $epf_values = array();
  foreach ($epf as $e) {
    if ($e['search'])  // only advanced searchable fields will have separate values
      if (isset($HTTP_GET_VARS[$e['field']]) && !empty($HTTP_GET_VARS[$e['field']])) {
       $epf_empty = false;
       $epf_values[] = $HTTP_GET_VARS[$e['field']];
      }
  }
// end Extra Product Fields
Dernière édition par cynic- le Mar 15 Sep 2009, 16:38, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Mar 15 Sep 2009, 12:18

15) In catalog/includes/content/product_info.php

15a) Vers la ligne 120 trouvez cette portion de code :
Around line 120 find the section of code that reads as follows:

Code: Tout sélectionner
<p><?php echo stripslashes($product_info['products_description']); ?></p>
<?php
  $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$_GET['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");

Juste AVANT la ligne qui initialise $products_attributes_query INSÉREZ le code suivant :
Immediately BEFORE the line that sets $products_attributes_query INSERT the following code:

Note: Pour un affichage correct des descriptions de produits, si vous devez y utiliser des "backslash" il vous faudra retirer la fonction "stripslashes" de la description de produits.
Note: For proper display of product descriptions if you have use a backslash inside it you also need to remove the stripslashes function from the product description.


Code: Tout sélectionner
  // begin Extra Product Fields
  foreach ($epf as $e) {
    if (tep_not_null($product_info[$e['field']])) { // only display if information is set for product
      echo '<strong>' . $e['label'] . ': </strong>';
      if ($e['uses_list']) {
        echo tep_get_extra_field_list_value($product_info[$e['field']], $e['show_chain']);
      } else {
        echo $product_info[$e['field']];
      }
      echo '<br>';
    }
  }
  // end Extra Product Fields

Cela devrait donner :
It should now read as follows:
Code: Tout sélectionner
          <p><?php echo $product_info['products_description']; ?></p>
<?php
  // begin Extra Product Fields
  foreach ($epf as $e) {
    $mt = ($e['uses_list'] ? ($product_info[$e['field']] == 0) : !tep_not_null($product_info[$e['field']]));
    if (!$mt) { // only display if information is set for product
      echo '<strong>' . $e['label'] . ': </strong>';
      if ($e['uses_list']) {
        echo tep_get_extra_field_list_value($product_info[$e['field']], $e['show_chain']);
      } else {
        echo $product_info[$e['field']];
      }
      echo '<br>';
    }
  }
  // end Extra Product Fields
    $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");

15b) Trouvez la ligne suivante :
Find the line that reads as follows:

Code: Tout sélectionner
   $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$_GET['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");

and REPLACE it with the following code:

Code: Tout sélectionner
// begin Product Extra Fields
    $query = "select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id";
    foreach ($epf as $e) {
      $query .= ", pd." . $e['field'];
    }
    $query .= " from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'";
    $product_info_query = tep_db_query($query);
    // end Product Extra Fields

16) Dans catalog/includes/header_tags.php, à la fin, trouvez :
In catalog/includes/header_tags.php, at the end, find :

Code: Tout sélectionner
echo '  <title>' . $the_title . '</title>' . "n";
echo '  <meta name="description" content="' . $the_desc . '" />' . "n";
echo '  <meta name="keywords" content="' . $the_key_words . '" />' . "n";
echo '  <meta name="reply-to" content="' . HEAD_REPLY_TAG_ALL . '" />' . "n";

REMPLACEZ PAR / REPLACE BY :

Code: Tout sélectionner
?>

<!-- begin Extra Product Fields //-->
<meta name="DCTERMS.modified" content ="<?php echo $datemod;?>" />
<?php
?>
<!-- end Extra Product Fields //-->
<?php
echo '  <title>' . $the_title . '</title>' . "n";
echo '  <meta name="description" content="' . $the_desc . '" />' . "n";
if (isset($epf)) {
  foreach ($epf as $e) {
    if ($e['keyword'] && tep_not_null($pname[$e['field']])) {
     echo '  <meta name="keywords" content="' . $the_product_info['products_name'] . ' ';
     if ($e['uses_list']) {
        echo htmlspecialchars(tep_get_extra_field_list_value($pname[$e['field']]));
     } else {
         echo htmlspecialchars($pname[$e['field']]);
      }
     echo ' - ' . $the_key_words . '" />' . "n";
    }
  }
} else { 
  echo '  <meta name="keywords" content="' . $the_key_words . '" />' . "n";
}
  echo '  <meta name="reply-to" content="' . HEAD_REPLY_TAG_ALL . '" />' . "n";


Ici nous plaçons un champ pour que les moteurs de recherche connaissent la date de dernière modification du produit, et des META mots-clés pour afficher les champs suppl. du produit.
Here we are setting a field so search engines can see when the product was last modified, setting META keywords for any extra fields that are set up as keywords for the product.


17) Dans catalog/product_info.php trouvez la ligne suivante :
In catalog/product_info.php find the line that reads as follows:

Code: Tout sélectionner
$product_check = tep_db_fetch_array($product_check_query);

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER this ADD the following lines:
Code: Tout sélectionner
// begin Extra Product Fields
  $epf = array();
  if ($product_check['total'] > 0) {
    $epf_query = tep_db_query("select e.epf_id, e.epf_uses_value_list, e.epf_show_parent_chain, e.epf_use_as_meta_keyword, l.epf_label from " . TABLE_EPF . " e join " . TABLE_EPF_LABELS . " l where e.epf_status and (e.epf_id = l.epf_id) and (l.languages_id = " . (int)$languages_id . ") and l.epf_active_for_language order by epf_order");
    while ($e = tep_db_fetch_array($epf_query)) {  // retrieve all active extra fields
      $epf[] = array('id' => $e['epf_id'],
                     'label' => $e['epf_label'],
                     'uses_list' => $e['epf_uses_value_list'],
                     'show_chain' => $e['epf_show_parent_chain'],
                     'search' => $e['epf_advanced_search'],
                     'keyword' => $e['epf_use_as_meta_keyword'],
                     'field' => 'extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id']);
    }
    $query = "select p.products_date_added, p.products_last_modified, pd.products_name";
    foreach ($epf as $e) {
      if ($e['keyword']) $query .= ", pd." . $e['field'];
    }
    $query .= " from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$_GET['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'";
    $pname = tep_db_fetch_array(tep_db_query($query));
    $datemod = substr((tep_not_null($pname['products_last_modified']) ? $pname['products_last_modified'] : $pname['products_date_added']), 0, 10);
  } else {
    $pname = TEXT_PRODUCT_NOT_FOUND;
    $datemod = date('Y-m-d');
  }
// end Extra Product Fields

18) Dans catalog/admin/includes/languages/french.php avant la balise fermante ?> AJOUTEZ les lignes suivantes :
Code: Tout sélectionner
// Extra Product Fields
define('TEXT_NOT_APPLY', 'Ne s'applique pas');
define('BOX_CATALOG_PRODUCTS_EXTRA_FIELDS', 'Champs suppl&eacute;mentaires');
define('BOX_CATALOG_PRODUCTS_EXTRA_VALUES', 'Valeurs des champs suppl&eacute;mentaires');

In catalog/admin/includes/languages/english.php somewhere before the closing ?> ADD the following lines:
Code: Tout sélectionner
// Extra Product Fields
define('TEXT_NOT_APPLY', 'Does Not Apply');
define('BOX_CATALOG_PRODUCTS_EXTRA_FIELDS', 'Extra Product Fields');
define('BOX_CATALOG_PRODUCTS_EXTRA_VALUES', 'Extra Field Values');

19) In catalog/admin/categories.php

19a) Vers la ligne 916 trouvez les lignes suivantes :
Around line 916 find the section of code that reads as follows:
Code: Tout sélectionner
      $languages = tep_get_languages();
      for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
        echo tep_draw_hidden_field('products_name[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_name[$languages[$i]['id']])));
        echo tep_draw_hidden_field('products_description[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_description[$languages[$i]['id']])));
        echo tep_draw_hidden_field('products_url[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($products_url[$languages[$i]['id']])));
      }

Juste AVANT l'accolade qui ferme la boucle for INSEREZ les lignes suivantes
Just BEFORE the brace that closes the for loop INSERT the following:

Code: Tout sélectionner
        // begin Extra Product Fields
        foreach ($xfields as $f) {
          echo tep_draw_hidden_field($f . '[' . $languages[$i]['id'] . ']', htmlspecialchars(stripslashes($extra[$f][$languages[$i]['id']])));
        }
        // end Extra Product Fields

19b) Vers la ligne 847 trouvez la ligne suivante :
Around line 847 find the following line:

Code: Tout sélectionner
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_IMAGES . $products_image_name, $pInfo->products_name, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'align="right" hspace="5" vspace="5"') . $pInfo->products_description; ?></td>

REMPLACEZ par les lignes suivantes :
REPLACE them with the following lines:

Code: Tout sélectionner
<td class="main"><?php echo tep_image(DIR_WS_CATALOG_IMAGES . $products_image_name, $pInfo->products_name, SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'align="right" hspace="5" vspace="5"') . $pInfo->products_description . '<p>';
// begin Extra Product Fields
         foreach ($epf as $e) {
           if ($e['language'] == $languages[$i]['id']) {
             if ($e['language_active']) {
               if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) {
                 $value = tep_get_product_extra_value($e['id'], $pInfo->products_id, $languages[$i]['id']);
               } else {
                 $value = tep_db_prepare_input($extra[$e['field']][$languages[$i]['id']]);
               }
               if (tep_not_null($value)) {
                 echo '<strong>' . $e['label'] . ': </strong>';
                 if ($e['uses_list']) {
                   echo tep_get_extra_field_list_value($value, $e['show_chain']);
                 } else {
                   echo $value;
                 }
                 echo '<br>';
               }
             }
           }
         }
// end Extra Product Fields
        ?>    </td>

19c) Vers la ligne 793 trouvez cette portion de code :
Around line 793 find the section of code that reads as follows:

Code: Tout sélectionner
  } elseif ($action == 'new_product_preview') {
    if (tep_not_null($HTTP_POST_VARS)) {
      $pInfo = new objectInfo($HTTP_POST_VARS);
      $products_name = $HTTP_POST_VARS['products_name'];
      $products_description = $HTTP_POST_VARS['products_description'];
      $products_url = $HTTP_POST_VARS['products_url'];
    } else {
      $product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id  from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'");
      $product = tep_db_fetch_array($product_query);

REMPLACEZ par les lignes suivantes :
REPLACE them with the following lines:

Code: Tout sélectionner
  } elseif ($action == 'new_product_preview') {
    if (tep_not_null($HTTP_POST_VARS)) {
      $pInfo = new objectInfo($HTTP_POST_VARS);
      $products_name = $HTTP_POST_VARS['products_name'];
      $products_description = $HTTP_POST_VARS['products_description'];
      $products_url = $HTTP_POST_VARS['products_url'];
      // begin Extra Product Fields
      $extra = array();
      foreach ($xfields as $f) {
        $extra[$f] = $HTTP_POST_VARS[$f];
      }
      // end Extra Product Fields
    } else {
      // begin Extra Product Fields
      $query = "select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id";
      foreach ($xfields as $f) {
        $query .= ', pd.' . $f;
      }
      $query .= " from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'";
      $product_query = tep_db_query($query);
      // end Extra Product Fields
      $product = tep_db_fetch_array($product_query);

19d) Vers la ligne 641 trouvez cette portion de code :
Around line 641 find the section of code that reads as follows:

Code: Tout sélectionner
          <tr>
            <td class="main"><?php echo TEXT_PRODUCTS_WEIGHT; ?></td>
            <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . '&nbsp;' . tep_draw_input_field('products_weight', $pInfo->products_weight); ?></td>
          </tr>

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER these lines ADD the following code:

Code: Tout sélectionner
<?php  // begin Extra Product Fields
          foreach ($epf as $e) {
           for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
              if ($e['language'] == $languages[$i]['id']) {
               if ($e['language_active']) {
                  if ($e['uses_list']) {
                    $inp = tep_draw_pull_down_menu($e['field'] . "[" . $languages[$i]['id'] ."]", tep_build_epf_pulldown($e['id'], $languages[$i]['id'], array(array('id' => '', 'text' => TEXT_NOT_APPLY))), (isset($extra[$e['field']][$languages[$i]['id']]) ? stripslashes($extra[$e['field']][$languages[$i]['id']]) : tep_get_product_extra_value($e['id'], $pInfo->products_id, $languages[$i]['id'])));
                 } else {
                    $inp = tep_draw_input_field($e['field'] . "[" . $languages[$i]['id'] ."]", (isset($extra[$e['field']][$languages[$i]['id']]) ? stripslashes($extra[$e['field']][$languages[$i]['id']]) : tep_get_product_extra_value($e['id'], $pInfo->products_id, $languages[$i]['id'])), "maxlength=" . $e['size']);
                 }
?>
          <tr bgcolor="#ebebff">
            <td class="main"><?php echo $e['label']; ?>:</td>
            <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . '&nbsp;' . $inp; ?></td>
          </tr>
<?php
                }
              }
            }
          }
// end Extra Product Fields
?>

19e) Vers la ligne 411 trouvez cette portion de code :
Around line 411 find the section of code that reads as follows:

Code: Tout sélectionner
$products_name = $HTTP_POST_VARS['products_name'];
      $products_description = $HTTP_POST_VARS['products_description'];
      $products_url = $HTTP_POST_VARS['products_url'];

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately BEFORE this ADD the following lines:

Code: Tout sélectionner
// begin Extra Product Fields
$extra = array();
foreach ($xfields as $f) {
$extra[$f] = $HTTP_POST_VARS[$f];
}
// end Extra Product Fields

Assurez-vous que ce code soit inséré avant l'accolade qui ferme le elseif (tep_not_null($HTTP_POST_VARS)).
Make sure this code gets inserted before the } that closes the elseif (tep_not_null($HTTP_POST_VARS)).

19f) Vers la ligne 405 trouvez cette ligne :
Around line 405 find the line that reads:

Code: Tout sélectionner
$product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");

REMPLACEZ par :
REPLACE with:

Code: Tout sélectionner
// begin Extra Product Fields
      $query = "select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id";
      foreach ($xfields as $f) {
        $query .= ', pd.' . $f;
      }
      $query .= " from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'";
      $product_query = tep_db_query($query);
      // end Extra Product Fields

19g) Vers la ligne 402 trouvez cette ligne :
Around line 402 find the line that reads:

Code: Tout sélectionner
$pInfo = new objectInfo($parameters);

Juste AVANT ceci AJOUTEZ les lignes suivantes :
Immediately BEFORE this ADD the following lines:
Code: Tout sélectionner
// begin Extra Product Fields
    foreach ($xfields as $f) {
      $parameters = array_merge($parameters, array($f => ''));
    }
// end Extra Product Fields

19h) Vers la ligne 279 trouvez cette portion de code :
Around line 279 find the lines that read as follows :

Code: Tout sélectionner
$sql_data_array = array('products_name' => tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id]),
                                    'products_description' => tep_db_prepare_input($HTTP_POST_VARS['products_description'][$language_id]),
                                    'products_url' => tep_db_prepare_input($HTTP_POST_VARS['products_url'][$language_id]));

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER theses lines ADD the following:

Code: Tout sélectionner
// begin Extra Product Fields
            foreach ($epf as $e) {
              if ($e['language'] == $language_id) {
                if ($e['language_active']) {
                  $extra = array($e['field'] => tep_db_prepare_input($HTTP_POST_VARS[$e['field']][$language_id]));
                } else {
                  $extra = array($e['field'] => ($e['uses_list'] ? 0 : ''));
                }
                $sql_data_array = array_merge($sql_data_array, $extra);
              }
            }
            // end Extra Product Fields

19i) Vers la ligne 18 trouvez cette ligne :
Around line 18 find the line that reads:

Code: Tout sélectionner
$action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER theses lines ADD the following:

Code: Tout sélectionner
// begin Extra Product Fields
  $epf_query = tep_db_query("select e.epf_id, e.epf_uses_value_list, e.epf_show_parent_chain, e.epf_size, l.epf_label, l.languages_id, l.epf_active_for_language from " . TABLE_EPF . " e join " . TABLE_EPF_LABELS . " l where e.epf_status and (e.epf_id = l.epf_id) order by e.epf_order");
  $epf = array();
  $xfields = array();
  while ($e = tep_db_fetch_array($epf_query)) {  // retrieve all active extra fields for all languages
    $field = 'extra_value' . ($e['epf_uses_value_list'] ? '_id' : '') . $e['epf_id'];
    $epf[] = array('id' => $e['epf_id'],
                   'label' => $e['epf_label'],
                   'uses_list' => $e['epf_uses_value_list'],
                   'show_chain' => $e['epf_show_parent_chain'],
                   'size' => $e['epf_size'],
                   'language' => $e['languages_id'],
                   'language_active' => $e['epf_active_for_language'],
                   'field' => $field);
    if (!in_array( $field, $xfields))
      $xfields[] = $field; // build list of distinct fields   
  }
// end Extra Product Fields

20) Dans catalog/admin/includes/filenames.php AJOUTEZ les lignes suivantes avant la balise fermante ?>
In catalog/admin/includes/filenames.php ADD the following lines somewhere before the closing ?>

Code: Tout sélectionner
// Extra Product Fields
  define('FILENAME_EXTRA_FIELDS', 'extra_fields.php');
  define('FILENAME_EXTRA_VALUES', 'extra_values.php');

21) Dans catalog/admin/includes/boxes/catalog.php vers la ligne 26 trouvez cette ligne :
In catalog/admin/includes/boxes/catalog.php around line 26 find the line that reads as follows:


Code: Tout sélectionner
$cat_group .= tep_admin_files_boxes(FILENAME_PRODUCTS_ATTRIBUTES, BOX_CATALOG_CATEGORIES_PRODUCTS_ATTRIBUTES, 'attributes');

Juste APRÈS ceci AJOUTEZ les lignes suivantes :
Immediately AFTER this line ADD the following:

Code: Tout sélectionner
$cat_group .= tep_admin_files_boxes(FILENAME_EXTRA_FIELDS, BOX_CATALOG_PRODUCTS_EXTRA_FIELDS, 'extrafields'); 
$cat_group .= tep_admin_files_boxes(FILENAME_EXTRA_VALUES, BOX_CATALOG_PRODUCTS_EXTRA_VALUES, 'extravalues');

22) Copiez extra_fields.php et extra_values.php dans catalog/admin/includes/languages/french/
Copy extra_fields.php and extra_values.php in catalog/admin/includes/languages/english/

Note :
*Les lignes citant categories_id et manufacturers_id ne font pas partie des extra fields mais sont requis pour permettre à la recherche de fonctionner convenablement, si l'utilisateur n'a entré qu'une seule catégorie ou qu'un seul fabricant et n'a entré aucun terme de recherche.
The lines referencing categories_id and manufacturers_id aren't part of the extra fields but are required to allow the search to work properly if only a category or manufacturer are set by the user and no other search terms are used.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Mar 15 Sep 2009, 12:21

Bugs :
1. Souci sur la page index.php?manufacturers_id=1

2. Souci sur la page index.php?cPath=1

3. Souci lors de la création de liste déroulante dans advanced_search.php :
Image

4. Tiens tiens, un autre bug, les options cochées dans l'admin, lorsqu'on édite un champ, se décochent...
Dernière édition par cynic- le Mar 15 Sep 2009, 18:45, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar j4k » Mar 15 Sep 2009, 13:51

Intéressant ce tuto ! :)

pour le pb de liste déroulante voir dans la page includes/content/advanced_search.php

à cet endroit :
Code: Tout sélectionner
echo tep_draw_pull_down_menu($e['field'], tep_build_epf_pulldown($e['id'], $languages_id, array(array('id' => '', 'text' => TEXT_ANY_VALUE))));

il faudrait voir ce que retourne la fonction tep_build_epf_pulldown et compléter les variables manquantes demandée par la fonction echo tep_draw_pull_down_menu de includes/function/html_output.php ; à savoir : function tep_draw_pull_down_menu($name, $id= '',$values, $default = '', $parameters = '', $required = false)

c'est juste une piste, il faudrait que je l'installe pour voir ça en live
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar j4k » Mar 15 Sep 2009, 13:55

pour les pb 1 et 2 peux tu décrire les symptomes ?
~ osCSS 1.2.1 ~
Avatar de l’utilisateur
j4k
Site Admin
 
Messages: 1259
Inscription: Mer 27 Avr 2005, 09:13
Localisation: France

Messagepar oscim » Mar 15 Sep 2009, 15:47

Salut, mmh

intéressant, effectivement, je rejoins j4k :)

Quand j'aurais un peu de temps, ca me parait effectivement pas mal, comme approche ..

Merci Cynic
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar cynic- » Mar 15 Sep 2009, 15:49

Volontiers :)

Symptôme 1 : la page manufacturers se charge jusqu'à cet endroit puis plus rien :
Code: Tout sélectionner
<div id="headingCatImg">
 <img src="images/imagecache/300x360_logo-truc.jpg" alt="Voyons ce que nous avons ici" title=" Voyons ce que nous avons ici " width="300" height="360" />

<!-- begin extra product fields -->
<form id="epf_restrict" action="index.php" method="get">
<input type="hidden" name="manufacturers_id" value="1" />

Symptôme 2 : la page cPath se charge jusqu'à cet endroit puis plus rien :

Code: Tout sélectionner
<div id="headingCatImg">
 <img src="images/imagecache/300x360_logo-truc.jpg" alt="Voyons ce que nous avons ici" title=" Voyons ce que nous avons ici " width="300" height="360" />
<!-- begin extra product fields -->
<form id="epf_restrict" action="index.php" method="get">
<input type="hidden" name="cPath" value="1" />

edit : C'est "epf_restrict" qui s'emmêle les pinceaux dans
catalog/includes/content/index_products.php je suppose
> soit le point 7) du tuto

pour advanced_search une piste ici : http://forums.oscss.org/viewtopic.php?pid=1345#p1345
Dernière édition par cynic- le Mar 15 Sep 2009, 16:23, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Mar 15 Sep 2009, 16:41

Pour advanced_search j'ai modifié le point 11a)
Pour corriger le bug, et adapter au design osCss en passant !

Remplacer
Code: Tout sélectionner
echo tep_draw_pull_down_menu($e['field'],  tep_build_epf_pulldown($e['id'], $languages_id, array(array('id' => '', 'text' => TEXT_ANY_VALUE))));

par
Code: Tout sélectionner
echo tep_draw_pull_down_menu($e['field'], 'value_id', tep_build_epf_pulldown($e['id'], $languages_id, array(array('id' => '', 'text' => TEXT_ANY_VALUE))));

En ajoutant l'argument 'value_id', le bug est corrigé mais est-ce la bonne méthode...
Dernière édition par cynic- le Mar 15 Sep 2009, 17:00, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Mar 15 Sep 2009, 18:46

Pour les symptômes 1 et 2, on dirait que l'admin ne prend pas en compte le choix d'afficher, ou non, les nouveaux champs dans le listing index_products. En effet les options cochées dans l'admin, lorsqu'on édite un champ, se décochent...
Ce qui expliquerait le plantage lors de l'affichage côté public. Voyons de ce côté...
Dernière édition par cynic- le Mar 15 Sep 2009, 19:18, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Ven 18 Sep 2009, 13:45

Souci dans catalog/includes/header_tags.php
La boucle
Code: Tout sélectionner
foreach ($epf as $e) { ... }

génère plusieurs <meta name="keywords" content="" />
Or il faudrait que "content" regroupe tous les champs sur une seule ligne. A voir donc.

Cela dit ça ne gêne en rien la validation xhtml du truc, étonnamment :P
Dernière édition par cynic- le Ven 18 Sep 2009, 13:47, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar cynic- » Lun 19 Oct 2009, 20:52

cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar oscim » Mar 20 Oct 2009, 17:28

Cool,

J'etait partis pour l'intégrer, suite à l'intégration de son petit frére pour les customers.

Je fais ca desuite..
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar cynic- » Mar 20 Oct 2009, 19:40

C'est plutôt long alors bon courage. Au passage, si tu trouves pourquoi les options cochées dans l'admin, se décochent lorsqu'on les édite... je rencontre le même souci avec un autre plugin (SPPC) alors je me dis qu'un fonction doit être différente entre oscommerce et oscss... problème de "checked" ???
Dernière édition par cynic- le Mar 20 Oct 2009, 19:41, édité 1 fois.
cynic-
Site Admin
 
Messages: 694
Inscription: Mar 04 Déc 2007, 13:04

Messagepar oscim » Mar 20 Oct 2009, 22:57

Oui, si je me souvient bien, il doit y avoir un id en supplement, defini en plus du name.
Donc, ca decalle les arguements d'une position. Ce qui expliquerai alors que le report foire...

PS, juste pour dire, perso je remplace systhematiquement les HTTP_GET_VAR et idem post , pour assurer compatibilité vers php5.

Tous mes hébergement sont maintenant en php5.

Dans le début intégration, utilisant aussi le customer ectra fields, je renomme le fichier en product_extra_fields.php

D'autre part , je l'ajoute aussi dans les filename
Code: Tout sélectionner
define('FILENAME_PRODUCTS_EXTRA_FIELDS','products_extra_fields.php');

Si vous tester la version oscss-RvBo, il est necessaire d'ajouter cet element dans le menu configuration comme suit
Code: Tout sélectionner
  $tabl_link[100][4][]= array(FILENAME_PRODUCTS_EXTRA_FIELDS, 'BOX_CONFIGURATION_PRODUCTS_EXTRA_FIELDS', 'products_extra_fields', @$img['products_extra_fields']);

et de re-initialiser le menu (account>init menu)
Dernière édition par oscim le Mar 20 Oct 2009, 23:23, édité 1 fois.
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar niahoo » Lun 03 Mai 2010, 20:22

Bonjour,

je dois être miro, mais j'ai installé la contribution en suivant scrupuleusement le mode d'emploi dans ce topic, et je ne comprends pas ce qui a changé dans la boutique...

Je n'ai aucun message d'erreur, la boutique foncitonne parfaitement, seulement, aucune trace d'un menu, onglet ou autre chose qui me propose d'ajouter des champs à mes fiches produits..

à moins que ce soient ces attributes -- mais non puisqu'il me semble que ce sont pour ajouter des options payantes à un produit.

merci de m'aider !
niahoo
Membre inactif
 
Messages: 7
Inscription: Lun 03 Mai 2010, 20:19

Messagepar oscim » Lun 03 Mai 2010, 20:40

Bonjour niahoo,

Tu as installé sur quelle version d'oscss ?

Pour les version oscss 1.xx
Theoriquement, c'est dans la page categories, lors de l'editon d'un produit que tu as ces champs supplementaire
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar niahoo » Lun 03 Mai 2010, 20:56

voilà une copie d'écran de ce que j'ai :

j'ai bien peur d'avoir oublié d'insérer un bout de code quelque part moi..

Image

edit : le dossier strip-tease sur le screen ce sont des clients hein :p
Dernière édition par niahoo le Lun 03 Mai 2010, 21:16, édité 1 fois.
niahoo
Membre inactif
 
Messages: 7
Inscription: Lun 03 Mai 2010, 20:19

Messagepar oscim » Lun 03 Mai 2010, 21:16

Oui effectivement,

Tu as oublié quelques chose. La partie a insérer dans cette page du backoffice.

voir le point n° 19, du 2éme post de cynic
, les elements du fichier categories.php
Pour un web au normes du W3C, pour un web plus propre !

- Download osCSS Toutes versions
- stable osCSS 2.1.0 (help|info|new dev) Official help|wiki|Tuto for osCSS 2 | doc doxygen
- Utiliser le tracker pour suivre les évolutions et développements
- Inscrivez vos sites sur oscss pour présenter vos réalisations
Avatar de l’utilisateur
oscim
Site Admin
 
Messages: 1643
Inscription: Mar 25 Sep 2007, 11:33

Messagepar niahoo » Mar 04 Mai 2010, 13:00

Bonjour,

je viens de revérifier, mon fichier categories.php est modifié conformément aux indications du topic .. je vais recommencer mais je ne vois pas d'où vient l'erreur !
niahoo
Membre inactif
 
Messages: 7
Inscription: Lun 03 Mai 2010, 20:19

Suivante

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