Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] Adding new fields to Easy Populate


Guest

Recommended Posts

Hi Mibble,

I finally figured that out last night. I worked out how the Products Extra Fields added fields (ie what the headers were called) and set up the file using the fields I needed to add and it all uploaded beautifully. The problem was just figuring out what the field names were for the extra ones!

 

I was using the download file to delete and move items into categories but then found the wonderful multi product delete/move contribution and that is all so much easier now - just select and delete or move!

 

I was so set on concentrating on the download file - realised it was the upload file that was more important!

 

Thank you for your advice! Crisis is over hopefully! :thumbsup:

Link to comment
Share on other sites

  • Replies 167
  • Created
  • Last Reply

Top Posters In This Topic

I've been trying this all day, with no luck.

 

I have installed the 5/19/05 version of New Fields. When I try to upload the .txt with the two new fields, I get the following error:

 

1054 - Unknown column 'products_spec' in 'field list'

 

I d/l'ed a complete file for editing to be sure I was properly calling the new fields, and I am (moved them to the same location in the spreadsheet as well). I have installed everything in the contribution, aside from the search function additions, have added in the databases inside my products database.

 

If anyone can help me with this problem, or help me to get Products Extra Fields to work with Easy Populate (installed that earlier as well, and tried configuring it per the instructions provided on the forum, but I needed to delete the script from easypopulate.php due to various erros I was receiving). Thanks!

Link to comment
Share on other sites

Everything is working now... well, almost.

 

I have added two new fields, and they upload fine according to the upload display. However, when I manually access the file through the admin cp, the fields are blank for my new fields. I can manually enter data into these fields and have it save, but not through EP.

 

I imagine it's just not writing these two fields to the database, but I am unsure of how to solve this. Both databases have been created...

Link to comment
Share on other sites

i added the fields as per the instructions in the contrib. the only thing i did not add was the search function features, and the ones to display with the list of the products, as i did not want those.

 

i have also added the fields into the .txt file in the location in which they appear when i did a test download file.

Link to comment
Share on other sites

i re-tested manually entering the data into the product addition in the admin panel, and upon submitting the altered product information, then going back in to edit it, the new fields show blank again. could it just be in how i have my databases set up? i set them up as per the instructions in the contrib, but perhaps i did something wrong, since it doesn't appear to be writing to them.

Link to comment
Share on other sites

  • 4 weeks later...

Hi everybody. I have some problems when I add some new fields... I followed the rules of your txt file, but when I try to upload the excel modified file, all fields ARE MIXED UP!! How can it be possible???? Thank you for your answers!

Link to comment
Share on other sites

Hello everyone.

 

First of thank you in advance for whoever can help me.

 

I believe I followed all of the instructions correctly, then I downloaded the EP datasheet and then I filled in the new field with information (new field=retail_price), and then when I upload the file, it uploads a few then I get this error:

 

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

1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'll get dizzy trying to follow the twists and turns in this swir

 

UPDATE products_description SET products_name='32403 Scrollwork Candleholder', products_description='You'll get dizzy trying to follow the twists and turns in this swirly, wrought iron candle holder! Better to just enjoy the lovely display it makes on your wall. Holds five 3" diameter candles. Candles not included. 28" x 5 1/2" x 11 1/2" high.', products_url='' WHERE products_id = '3023' AND language_id = '1'

 

[TEP STOP]

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

So, I tried to see if the ones that did upload had the information in the fields and nope the fields are blank. Then I manually filled one in and it didn't download either. I have been trying to install this for about 2 days now. I need some help, because I am so frustrated >_< :( . So I am going to include the easypopulate.php code below

 

Thanks guys,

Margaret

DaylightGifts.com

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

<?php

 

// Current EP Version

$curver = '2.76-MS2';

 

/*

 $Id: easypopulate.php,v 2.75 2005/04/05 AL Exp $

*/

 

//

//*******************************

//*******************************

// C O N F I G U R A T I O N

// V A R I A B L E S

//*******************************

//*******************************

 

// **** Temp directory ****

// if you changed your directory structure from stock and do not have /catalog/temp/, then you'll need to change this accordingly.

//

// Please set DOCUMENT_ROOT to $DOCUMENT_ROOT in your /catalog/admin/includes/configure.php

$tempdir = "/temp/";

$tempdir2 = "/temp/";

 

//**** File Splitting Configuration ****

// we attempt to set the timeout limit longer for this script to avoid having to split the files

// NOTE:  If your server is running in safe mode, this setting cannot override the timeout set in php.ini

// uncomment this if you are not on a safe mode server and you are getting timeouts

// set_time_limit(330);

 

// if you are splitting files, this will set the maximum number of records to put in each file.

// if you set your php.ini to a long time, you can make this number bigger

global $maxrecs;

$maxrecs = 300; // default, seems to work for most people.  Reduce if you hit timeouts

//$maxrecs = 4; // for testing

 

//**** Image Defaulting ****

global $default_images, $default_image_manufacturer, $default_image_product, $default_image_category;

 

// set them to your own default "We don't have any picture" gif

//$default_image_manufacturer = 'no_image_manufacturer.gif';

//$default_image_product = 'no_image_product.gif';

//$default_image_category = 'no_image_category.gif';

 

// or let them get set to nothing

$default_image_manufacturer = '';

$default_image_product = '';

$default_image_category = '';

 

//**** Status Field Setting ****

// Set the v_status field to "Inactive" if you want the status=0 in the system

// Set the v_status field to "Delete" if you want to remove the item from the system <- THIS IS NOT WORKING YET!

// If zero_qty_inactive is true, then items with zero qty will automatically be inactive in the store.

global $active, $inactive, $zero_qty_inactive, $deleteit;

$active = 'Active';

$inactive = 'Inactive';

//$deleteit = 'Delete'; // not functional yet

$zero_qty_inactive = true;

 

//**** Size of products_model in products table ****

// set this to the size of your model number field in the db.  We check to make sure all models are no longer than this value.

// this prevents the database from getting fubared.  Just making this number bigger won't help your database!  They must match!

global $modelsize;

$modelsize = 25;

 

//**** Price includes tax? ****

// Set the v_price_with_tax to

// 0 if you want the price without the tax included

// 1 if you want the price to be defined for import & export including tax.

global $price_with_tax;

$price_with_tax =true;

 

// **** Quote -> Escape character conversion ****

// If you have extensive html in your descriptions and it's getting mangled on upload, turn this off

// set to 1 = replace quotes with escape characters

// set to 0 = no quote replacement

global $replace_quotes;

$replace_quotes = false;

 

// **** Field Separator ****

// change this if you can't use the default of tabs

// Tab is the default, comma and semicolon are commonly supported by various progs

// Remember, if your descriptions contain this character, you will confuse EP!

global $separator;

$separator = "\t"; // tab is default

//$separator = ","; // comma

//$separator = ";"; // semi-colon

//$separator = "~"; // tilde

//$separator = "-"; // dash

//$separator = "*"; // splat

 

// **** Max Category Levels ****

// change this if you need more or fewer categories

global $max_categories;

$max_categories = 3; // 7 is default

 

// VJ product attributes begin

// **** Product Attributes ****

// change this to false, if do not want to download product attributes

global $products_with_attributes;

$products_with_attributes = true;

 

// change this to true, if you use QTYpro and want to set attributes stock with EP.

global $products_attributes_stock;

$products_attributes_stock = false;

 

 

// change this if you want to download selected product options

// this might be handy, if you have a lot of product options, and your output file exceeds 256 columns (which is the max. limit MS Excel is able to handle)

global $attribute_options_select;

//$attribute_options_select = array('Size', 'Model'); // uncomment and fill with product options name you wish to download // comment this line, if you wish to download all product options

// VJ product attributes end

 

 

 

 

// ****************************************

// Froogle configuration variables

// -- YOU MUST CONFIGURE THIS!  IT WON'T WORK OUT OF THE BOX!

// ****************************************

 

// **** Froogle product info page path ****

// We can't use the tep functions to create the link, because the links will point to the admin, since that's where we're at.

// So put the entire path to your product_info.php page here

global $froogle_product_info_path;

$froogle_product_info_path = "http://www.daylightgifts.com/product_info.php";

 

// **** Froogle product image path ****

// Set this to the path to your images directory

global $froogle_image_path;

$froogle_image_path = "http://www.daylightgifts.com/images/";

 

// **** Froogle - search engine friendly setting

// if your store has SEARCH ENGINE FRIENDLY URLS set, then turn this to true

// I did it this way because I'm having trouble with the code seeing the constants

// that are defined in other places.

global $froogle_SEF_urls;

$froogle_SEF_urls = false;

 

 

// ****************************************

// End Froogle configuration variables

// ****************************************

 

//*******************************

//*******************************

// E N D

// C O N F I G U R A T I O N

// V A R I A B L E S

//*******************************

//*******************************

 

 

//*******************************

//*******************************

// S T A R T

// INITIALIZATION

//*******************************

//*******************************

 

 

require('includes/application_top.php');

require('includes/database_tables.php');

 

//*******************************

// If you are running a pre-Nov1-2002 snapshot of OSC, then we need this include line to avoid

// errors like:

//   undefined function tep_get_uploaded_file

if (!function_exists(tep_get_uploaded_file)){

include ('easypopulate_functions.php');

}

//*******************************

 

// VJ product attributes begin

global $attribute_options_array;

$attribute_options_array = array();

 

if ($products_with_attributes == true) {

if (is_array($attribute_options_select) && (count($attribute_options_select) > 0)) {

 foreach ($attribute_options_select as $value) {

  $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " where products_options_name = '" . $value . "'";

 

  $attribute_options_values = tep_db_query($attribute_options_query);

 

  if ($attribute_options = tep_db_fetch_array($attribute_options_values)){

   $attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);

  }

 }

} else {

 $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";

 

 $attribute_options_values = tep_db_query($attribute_options_query);

 

 while ($attribute_options = tep_db_fetch_array($attribute_options_values)){

  $attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);

 }

}

}

// VJ product attributes end

 

global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $fileheaders;

 

// these are the fields that will be defaulted to the current values in the database if they are not found in the incoming file

global $default_these;

$default_these = array(

'v_products_image',

#'v_products_mimage',

#'v_products_bimage',

#'v_products_subimage1',

#'v_products_bsubimage1',

#'v_products_subimage2',

#'v_products_bsubimage2',

#'v_products_subimage3',

#'v_products_bsubimage3',

'v_categories_id',

'v_products_price',

'v_products_quantity',

'v_products_weight',

'v_date_avail',

'v_instock',

'v_tax_class_title',

'v_manufacturers_name',

'v_manufacturers_id',

'v_products_dim_type',

'v_products_length',

'v_products_width',

'v_products_height',

'v_products_upc'

);

 

//elari check default language_id from configuration table DEFAULT_LANGUAGE

$epdlanguage_query = tep_db_query("select languages_id, name from " . TABLE_LANGUAGES . " where code = '" . DEFAULT_LANGUAGE . "'");

if (tep_db_num_rows($epdlanguage_query)) {

$epdlanguage = tep_db_fetch_array($epdlanguage_query);

$epdlanguage_id   = $epdlanguage['languages_id'];

$epdlanguage_name = $epdlanguage['name'];

} else {

Echo 'Strange but there is no default language to work... That may not happen, just in case... ';

}

 

$langcode = ep_get_languages();

 

if ( $dltype != '' ){

// if dltype is set, then create the filelayout.  Otherwise it gets read from the uploaded file

ep_create_filelayout($dltype); // get the right filelayout for this download

}

 

//*******************************

//*******************************

// E N D

// INITIALIZATION

//*******************************

//*******************************

 

 

if ( $download == 'stream' or  $download == 'tempfile' ){

//*******************************

//*******************************

// DOWNLOAD FILE

//*******************************

//*******************************

$filestring = ""; // this holds the csv file we want to download

$result = tep_db_query($filelayout_sql);

$row =  tep_db_fetch_array($result);

 

// Here we need to allow for the mapping of internal field names to external field names

// default to all headers named like the internal ones

// the field mapping array only needs to cover those fields that need to have their name changed

if ( count($fileheaders) != 0 ){

 $filelayout_header = $fileheaders; // if they gave us fileheaders for the dl, then use them

} else {

 $filelayout_header = $filelayout; // if no mapping was spec'd use the internal field names for header names

}

//We prepare the table heading with layout values

foreach( $filelayout_header as $key => $value ){

 $filestring .= $key . $separator;

}

// now lop off the trailing tab

$filestring = substr($filestring, 0, strlen($filestring)-1);

 

// set the type

if ( $dltype == 'froogle' ){

 $endofrow = "\n";

} else {

 // default to normal end of row

 $endofrow = $separator . 'EOREOR' . "\n";

}

$filestring .= $endofrow;

 

$num_of_langs = count($langcode);

while ($row){

 

 

 // if the filelayout says we need a products_name, get it

 // build the long full froogle image path

 $row['v_products_fullpath_image'] = $froogle_image_path . $row['v_products_image'];

 // Other froogle defaults go here for now

 $row['v_froogle_instock']   = 'Y';

 $row['v_froogle_shipping']   = '';

 $row['v_froogle_upc']    = '';

 $row['v_froogle_color']   = '';

 $row['v_froogle_size']   = '';

 $row['v_froogle_quantitylevel']  = '';

 $row['v_froogle_manufacturer_id'] = '';

 $row['v_froogle_exp_date']  = '';

 $row['v_froogle_product_type']  = 'OTHER';

 $row['v_froogle_delete']  = '';

 $row['v_froogle_currency']  = 'USD';

 $row['v_froogle_offer_id']  = $row['v_products_model'];

 $row['v_froogle_product_id']  = $row['v_products_model'];

 

 // names and descriptions require that we loop thru all languages that are turned on in the store

 foreach ($langcode as $key => $lang){

  $lid = $lang['id'];

 

  // for each language, get the description and set the vals

  $sql2 = "SELECT *

   FROM ".TABLE_PRODUCTS_DESCRIPTION."

   WHERE

    products_id = " . $row['v_products_id'] . " AND

    language_id = '" . $lid . "'

   ";

  $result2 = tep_db_query($sql2);

  $row2 =  tep_db_fetch_array($result2);

 

  // I'm only doing this for the first language, since right now froogle is US only.. Fix later!

  // adding url for froogle, but it should be available no matter what

  if ($froogle_SEF_urls){

   // if only one language

   if ($num_of_langs == 1){

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'];

   } else {

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'] . '/language/' . $lid;

   }

  } else {

   if ($num_of_langs == 1){

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'];

   } else {

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'] . '&language=' . $lid;

   }

  }

 

  $row['v_products_name_' . $lid]  = $row2['products_name'];

  $row['v_products_description_' . $lid]  = $row2['products_description'];

  $row['v_products_url_' . $lid]   = $row2['products_url'];

 

  // froogle advanced format needs the quotes around the name and desc

  $row['v_froogle_products_name_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_name'])) . '"';

  $row['v_froogle_products_description_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_description'])) . '"';

 

  // support for Linda's Header Controller 2.0 here

  if(isset($filelayout['v_products_head_title_tag_' . $lid])){

   $row['v_products_head_title_tag_' . $lid]  = $row2['products_head_title_tag'];

   $row['v_products_head_desc_tag_' . $lid]  = $row2['products_head_desc_tag'];

   $row['v_products_head_keywords_tag_' . $lid]  = $row2['products_head_keywords_tag'];

  }

  // end support for Header Controller 2.0

 }

 

 // for the categories, we need to keep looping until we find the root category

 

 // start with v_categories_id

 // Get the category description

 // set the appropriate variable name

 // if parent_id is not null, then follow it up.

 // we'll populate an aray first, then decide where it goes in the

 $thecategory_id = $row['v_categories_id'];

 $fullcategory = ''; // this will have the entire category stack for froogle

 for( $categorylevel=1; $categorylevel<$max_categories+1; $categorylevel++){

  if ($thecategory_id){

   $sql2 = "SELECT categories_name

    FROM ".TABLE_CATEGORIES_DESCRIPTION."

    WHERE

     categories_id = " . $thecategory_id . " AND

     language_id = " . $epdlanguage_id;

 

   $result2 = tep_db_query($sql2);

   $row2 =  tep_db_fetch_array($result2);

   // only set it if we found something

   $temprow['v_categories_name_' . $categorylevel] = $row2['categories_name'];

   // now get the parent ID if there was one

   $sql3 = "SELECT parent_id

    FROM ".TABLE_CATEGORIES."

    WHERE

     categories_id = " . $thecategory_id;

   $result3 = tep_db_query($sql3);

   $row3 =  tep_db_fetch_array($result3);

   $theparent_id = $row3['parent_id'];

   if ($theparent_id != ''){

    // there was a parent ID, lets set thecategoryid to get the next level

    $thecategory_id = $theparent_id;

   } else {

    // we have found the top level category for this item,

    $thecategory_id = false;

   }

   //$fullcategory .= " > " . $row2['categories_name'];

   $fullcategory = $row2['categories_name'] . " > " . $fullcategory;

  } else {

   $temprow['v_categories_name_' . $categorylevel] = '';

  }

 }

 // now trim off the last ">" from the category stack

 $row['v_category_fullpath'] = substr($fullcategory,0,strlen($fullcategory)-3);

 

 // temprow has the old style low to high level categories.

 $newlevel = 1;

 // let's turn them into high to low level categories

 for( $categorylevel=6; $categorylevel>0; $categorylevel--){

  if ($temprow['v_categories_name_' . $categorylevel] != ''){

   $row['v_categories_name_' . $newlevel++] = $temprow['v_categories_name_' . $categorylevel];

  }

 }

 // if the filelayout says we need a manufacturers name, get it

 if (isset($filelayout['v_manufacturers_name'])){

  if ($row['v_manufacturers_id'] != ''){

   $sql2 = "SELECT manufacturers_name

    FROM ".TABLE_MANUFACTURERS."

    WHERE

    manufacturers_id = " . $row['v_manufacturers_id']

   ;

   $result2 = tep_db_query($sql2);

   $row2 =  tep_db_fetch_array($result2);

   $row['v_manufacturers_name'] = $row2['manufacturers_name'];

  }

 }

 

 

 // If you have other modules that need to be available, put them here

 

 // VJ product attribs begin

 if (isset($filelayout['v_attribute_options_id_1'])){

  $languages = tep_get_languages();

 

  $attribute_options_count = 1;

     foreach ($attribute_options_array as $attribute_options) {

   $row['v_attribute_options_id_' . $attribute_options_count]  = $attribute_options['products_options_id'];

 

   for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

    $lid = $languages[$i]['id'];

 

    $attribute_options_languages_query = "select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' and language_id = '" . (int)$lid . "'";

 

    $attribute_options_languages_values = tep_db_query($attribute_options_languages_query);

 

    $attribute_options_languages = tep_db_fetch_array($attribute_options_languages_values);

 

    $row['v_attribute_options_name_' . $attribute_options_count . '_' . $lid] = $attribute_options_languages['products_options_name'];

   }

 

   $attribute_values_query = "select products_options_values_id from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' order by products_options_values_id";

 

   $attribute_values_values = tep_db_query($attribute_values_query);

 

   $attribute_values_count = 1;

   while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {

    $row['v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count]  = $attribute_values['products_options_values_id'];

 

    $attribute_values_price_query = "select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$row['v_products_id'] . "' and options_id = '" . (int)$attribute_options['products_options_id'] . "' and options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "'";

 

    $attribute_values_price_values = tep_db_query($attribute_values_price_query);

 

    $attribute_values_price = tep_db_fetch_array($attribute_values_price_values);

 

    $row['v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count]  = $attribute_values_price['price_prefix'] . $attribute_values_price['options_values_price'];

 

//// attributes stock add start        

if ( $products_attributes_stock == true ) {  

    $stock_attributes = $attribute_options['products_options_id'].'-'.$attribute_values['products_options_values_id'];

   

    $stock_quantity_query = tep_db_query("select products_stock_quantity from " . TABLE_PRODUCTS_STOCK . " where products_id = '" . (int)$row['v_products_id'] . "' and products_stock_attributes = '" . $stock_attributes . "'");

          $stock_quantity = tep_db_fetch_array($stock_quantity_query);

   

    $row['v_attribute_values_stock_' . $attribute_options_count . '_' . $attribute_values_count] = $stock_quantity['products_stock_quantity'];

 }

//// attributes stock add end  

   

   

    for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

     $lid = $languages[$i]['id'];

 

     $attribute_values_languages_query = "select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "' and language_id = '" . (int)$lid . "'";

 

     $attribute_values_languages_values = tep_db_query($attribute_values_languages_query);

 

     $attribute_values_languages = tep_db_fetch_array($attribute_values_languages_values);

 

     $row['v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $lid] = $attribute_values_languages['products_options_values_name'];

    }

 

    $attribute_values_count++;

   }

 

   $attribute_options_count++;

  }

 }

 // VJ product attribs end

 

 // this is for the separate price per customer module

 if (isset($filelayout['v_customer_price_1'])){

  $sql2 = "SELECT

    customers_group_price,

    customers_group_id

   FROM

    ".TABLE_PRODUCTS_GROUPS."

   WHERE

   products_id = " . $row['v_products_id'] . "

   ORDER BY

   customers_group_id"

  ;

  $result2 = tep_db_query($sql2);

  $ll = 1;

  $row2 =  tep_db_fetch_array($result2);

  while( $row2 ){

   $row['v_customer_group_id_' . $ll]  = $row2['customers_group_id'];

   $row['v_customer_price_' . $ll]  = $row2['customers_group_price'];

   $row2 = tep_db_fetch_array($result2);

   $ll++;

  }

 }

 if ($dltype == 'froogle'){

  // For froogle, we check the specials prices for any applicable specials, and use that price

  // by grabbing the specials id descending, we always get the most recently added special price

  // I'm checking status because I think you can turn off specials

  $sql2 = "SELECT

    specials_new_products_price

   FROM

    ".TABLE_SPECIALS."

   WHERE

   products_id = " . $row['v_products_id'] . " and

   status = 1 and

   expires_date < CURRENT_TIMESTAMP

   ORDER BY

    specials_id DESC"

  ;

  $result2 = tep_db_query($sql2);

  $ll = 1;

  $row2 =  tep_db_fetch_array($result2);

  if( $row2 ){

   // reset the products price to our special price if there is one for this product

   $row['v_products_price']  = $row2['specials_new_products_price'];

  }

 }

 

 //elari -

 //We check the value of tax class and title instead of the id

 //Then we add the tax to price if $price_with_tax is set to 1

 $row_tax_multiplier   = tep_get_tax_class_rate($row['v_tax_class_id']);

 $row['v_tax_class_title']  = tep_get_tax_class_title($row['v_tax_class_id']);

 $row['v_products_price']  = round($row['v_products_price'] +

   ($price_with_tax * $row['v_products_price'] * $row_tax_multiplier / 100),2);

 

 

 // Now set the status to a word the user specd in the config vars

 if ( $row['v_status'] == '1' ){

  $row['v_status'] = $active;

 } else {

  $row['v_status'] = $inactive;

 }

 

 // remove any bad things in the texts that could confuse EasyPopulate

 $therow = '';

 foreach( $filelayout as $key => $value ){

  //echo "The field was $key<br>";

 

  $thetext = $row[$key];

  // kill the carriage returns and tabs in the descriptions, they're killing me!

  $thetext = str_replace("\r",' ',$thetext);

  $thetext = str_replace("\n",' ',$thetext);

  $thetext = str_replace("\t",' ',$thetext);

  // and put the text into the output separated by tabs

  $therow .= $thetext . $separator;

 }

 

 // lop off the trailing tab, then append the end of row indicator

 $therow = substr($therow,0,strlen($therow)-1) . $endofrow;

 

 $filestring .= $therow;

 // grab the next row from the db

 $row =  tep_db_fetch_array($result);

}

 

#$EXPORT_TIME=time();

$EXPORT_TIME = strftime('%Y%b%d-%H%I');

if ($dltype=="froogle"){

 $EXPORT_TIME = "FroogleEP" . $EXPORT_TIME;

} else {

 $EXPORT_TIME = "EP" . $EXPORT_TIME;

}

 

// now either stream it to them or put it in the temp directory

if ($download == 'stream'){

 //*******************************

 // STREAM FILE

 //*******************************

 header("Content-type: application/vnd.ms-excel");

 header("Content-disposition: attachment; filename=$EXPORT_TIME.txt");

// Changed if using SSL, helps prevent program delay/timeout (add to backup.php also)

// header("Pragma: no-cache");

if ($request_type== 'NONSSL'){

header("Pragma: no-cache");

} else {

header("Pragma: ");

}

 header("Expires: 0");

 echo $filestring;

 die();

} else {

 //*******************************

 // PUT FILE IN TEMP DIR

 //*******************************

 $tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "$EXPORT_TIME.txt";

 //unlink($tmpfname);

 $fp = fopen( $tmpfname, "w+");

 fwrite($fp, $filestring);

 fclose($fp);

 echo "You can get your file in the Tools/Files under " . $tempdir . "EP" . $EXPORT_TIME . ".txt";

 die();

}

}   // *** END *** download section

?>

 

<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">

<html <?php echo HTML_PARAMS; ?>>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">

<title><?php echo TITLE; ?></title>

<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">

</head>

<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">

<?php require(DIR_WS_INCLUDES . 'header.php'); ?>

 

<table border="0" width="100%" cellspacing="2" cellpadding="2">

<tr>

<td width="<?php echo BOX_WIDTH; ?>" valign="top" height="27">

<table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">

<?php require(DIR_WS_INCLUDES . 'column_left.php');?>

</table></td>

<td class="pageHeading" valign="top"><?php

echo "Easy Populate $curver - Default Language : " . $epdlanguage_name . '(' . $epdlanguage_id .')';

?>

 

<p class="smallText">

 

<?php

 

if ($localfile or (is_uploaded_file($usrfl) && $split==0)) {

//*******************************

//*******************************

// UPLOAD AND INSERT FILE

//*******************************

//*******************************

 

if ($usrfl){

 // move the file to where we can work with it

 $file = tep_get_uploaded_file('usrfl');

 if (is_uploaded_file($file['tmp_name'])) {

  tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

 }

 

 echo "<p class=smallText>";

 echo "File uploaded. <br>";

 echo "Temporary filename: " . $usrfl . "<br>";

 echo "User filename: " . $usrfl_name . "<br>";

 echo "Size: " . $usrfl_size . "<br>";

 

 // get the entire file into an array

 $readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name);

}

if ($localfile){

 // move the file to where we can work with it

 $file = tep_get_uploaded_file('usrfl');   $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";

 

  $attribute_options_values = tep_db_query($attribute_options_query);

 

  $attribute_options_count = 1;

  //while ($attribute_options = tep_db_fetch_array($attribute_options_values)){

 if (is_uploaded_file($file['tmp_name'])) {

  tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

 }

 

 echo "<p class=smallText>";

 echo "Filename: " . $localfile . "<br>";

 

 // get the entire file into an array

 $readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $localfile);

}

 

// now we string the entire thing together in case there were carriage returns in the data

$newreaded = "";

foreach ($readed as $read){

 $newreaded .= $read;

}

 

// now newreaded has the entire file together without the carriage returns.

// if for some reason excel put qoutes around our EOREOR, remove them then split into rows

$newreaded = str_replace('"EOREOR"', 'EOREOR', $newreaded);

$readed = explode( $separator . 'EOREOR',$newreaded);

 

 

// Now we'll populate the filelayout based on the header row.

$theheaders_array = explode( $separator, $readed[0] ); // explode the first row, it will be our filelayout

$lll = 0;

$filelayout = array();

foreach( $theheaders_array as $header ){

 $cleanheader = str_replace( '"', '', $header);

// echo "Fileheader was $header<br><br><br>";

 $filelayout[ $cleanheader ] = $lll++; //

}

unset($readed[0]); //  we don't want to process the headers with the data

 

// now we've got the array broken into parts by the expicit end-of-row marker.

array_walk($readed, 'walk');

 

}

 

if (is_uploaded_file($usrfl) && $split==1) {

//*******************************

//*******************************

// UPLOAD AND SPLIT FILE

//*******************************

//*******************************

// move the file to where we can work with it

$file = tep_get_uploaded_file('usrfl');

//echo "Trying to move file...";

if (is_uploaded_file($file['tmp_name'])) {

 tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

$infp = fopen(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name, "r");

 

//toprow has the field headers

$toprow = fgets($infp,32768);

 

$filecount = 1;

 

echo "Creating file EP_Split" . $filecount . ".txt ...  ";

$tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";

$fp = fopen( $tmpfname, "w+");

fwrite($fp, $toprow);

 

$linecount = 0;

$line = fgets($infp,32768);

while ($line){

 // walking the entire file one row at a time

 // but a line is not necessarily a complete row, we need to split on rows that have "EOREOR" at the end

 $line = str_replace('"EOREOR"', 'EOREOR', $line);

 fwrite($fp, $line);

 if (strpos($line, 'EOREOR')){

  // we found the end of a line of data, store it

  $linecount++; // increment our line counter

  if ($linecount >= $maxrecs){

   echo "Added $linecount records and closing file... <Br>";

   $linecount = 0; // reset our line counter

   // close the existing file and open another;

   fclose($fp);

   // increment filecount

   $filecount++;

   echo "Creating file EP_Split" . $filecount . ".txt ...  ";

   $tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";

   //Open next file name

   $fp = fopen( $tmpfname, "w+");

   fwrite($fp, $toprow);

  }

 }

 $line=fgets($infp,32768);

}

echo "Added $linecount records and closing file...<br><br> ";

fclose($fp);

fclose($infp);

 

echo "You can download your split files in the Tools/Files under /catalog/temp/";

 

}

 

?>

     </p>

 

     <table width="75%" border="2">

       <tr>

         <td width="75%">

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=0" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Upload EP File</b></p>

               <p>

                 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000000">

                 <p></p>

                 <input name="usrfl" type="file" size="50">

               <input type="submit" name="buttoninsert" value="Insert into db">

               <br>

               </p>

             </div>

 

             </form>

 

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=1" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Split EP File</b></p>

               <p>

                 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000000">

                 <p></p>

                 <input name="usrfl" type="file" size="50">

               <input type="submit" name="buttonsplit" value="Split file">

               <br>

               </p>

             </div>

 

            </form>

 

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Import from Temp Dir (<? echo $tempdir; ?>)</b></p>

 <p class="smallText">

 <INPUT TYPE="text" name="localfile" size="50">

                 <input type="submit" name="buttoninsert" value="Insert into db">

                 <br>

               </p>

             </div>

 

            </form>

 

 

 

 

 <p><b>Download EP and Froogle Files</b></p>

 

      <!-- Download file links -  Add your custom fields here -->

  <a href="easypopulate.php?download=stream&dltype=full">Download <b>Complete</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=priceqty">Download <b>Model/Price/Qty</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=category">Download <b>Model/Category</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=froogle">Download <b>Froogle</b> tab-delimited .txt file</a><br>

 

  <!-- VJ product attributes begin //-->

<?php

 if ($products_with_attributes == true) {

?>

  <a href="easypopulate.php?download=stream&dltype=attrib">Download <b>Model/Attributes</b> tab-delimited .txt file</a><br>

<?php

 }

?>

  <!-- VJ product attributes end //-->

 

 <p><b>Create EP and Froogle Files in Temp Dir (<? echo $tempdir; ?>)</b></p>

  <a href="easypopulate.php?download=tempfile&dltype=full">Create Complete tab-delimited .txt file in temp dir</a><br>

         <a href="easypopulate.php?download=tempfile&dltype=priceqty"">Create Model/Price/Qty tab-delimited .txt file in temp dir</a><br>

         <a href="easypopulate.php?download=tempfile&dltype=category">Create Model/Category tab-delimited .txt file in temp dir</a><br>

  <a href="easypopulate.php?download=tempfile&dltype=froogle">Create Froogle tab-delimited .txt file in temp dir</a><br>

 

  <!-- VJ product attributes begin //-->

  <a href="easypopulate.php?download=tempfile&dltype=attrib">Create Model/Attributes tab-delimited .txt file in temp dir</a><br>

  <!-- VJ product attributes end //-->

 

  </td>

</tr>

     </table>

   </td>

</tr>

</table>

 

<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>

 

<p> </p>

<p> </p><p><br>

</p></body>

</html>

 

<?php

 

function ep_get_languages() {

$languages_query = tep_db_query("select languages_id, code from " . TABLE_LANGUAGES . " order by sort_order");

// start array at one, the rest of the code expects it that way

$ll =1;

while ($ep_languages = tep_db_fetch_array($languages_query)) {

 //will be used to return language_id en language code to report in product_name_code instead of product_name_id

 $ep_languages_array[$ll++] = array(

    'id' => $ep_languages['languages_id'],

    'code' => $ep_languages['code']

    );

}

return $ep_languages_array;

};

 

function tep_get_tax_class_rate($tax_class_id) {

$tax_multiplier = 0;

$tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " WHERE  tax_class_id = '" . $tax_class_id . "' GROUP BY tax_priority");

if (tep_db_num_rows($tax_query)) {

 while ($tax = tep_db_fetch_array($tax_query)) {

  $tax_multiplier += $tax['tax_rate'];

 }

}

return $tax_multiplier;

};

 

function tep_get_tax_title_class_id($tax_class_title) {

$classes_query = tep_db_query("select tax_class_id from " . TABLE_TAX_CLASS . " WHERE tax_class_title = '" . $tax_class_title . "'" );

$tax_class_array = tep_db_fetch_array($classes_query);

$tax_class_id = $tax_class_array['tax_class_id'];

return $tax_class_id;

}

 

function print_el( $item2 ) {

echo " | " . substr(strip_tags($item2), 0, 10);

};

 

function print_el1( $item2 ) {

echo sprintf("| %'.4s ", substr(strip_tags($item2), 0, 80));

};

function ep_create_filelayout($dltype){

global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $fileheaders, $max_categories;

// depending on the type of the download the user wanted, create a file layout for it.

$fieldmap = array(); // default to no mapping to change internal field names to external.

switch( $dltype ){

case 'full':

 // The file layout is dynamically made depending on the number of languages

 $iii = 0;

 $filelayout = array(

  'v_products_model'  => $iii++,

  'v_products_image'  => $iii++,

  );

 

 foreach ($langcode as $key => $lang){

  $l_id = $lang['id'];

  // uncomment the head_title, head_desc, and head_keywords to use

  // Linda's Header Tag Controller 2.0

  //echo $langcode['id'] . $langcode['code'];

  $filelayout  = array_merge($filelayout , array(

    'v_products_name_' . $l_id  => $iii++,

    'v_products_description_' . $l_id => $iii++,

    'v_products_url_' . $l_id => $iii++,

  //  'v_products_head_title_tag_'.$l_id => $iii++,

  //  'v_products_head_desc_tag_'.$l_id => $iii++,

  //  'v_products_head_keywords_tag_'.$l_id => $iii++,

    ));

 }

 

 

 // uncomment the customer_price and customer_group to support multi-price per product contrib

 

   // VJ product attribs begin

    $header_array = array(

  'v_products_price'  => $iii++,

  'v_products_weight'  => $iii++,

  'v_date_avail'   => $iii++,

  'v_date_added'   => $iii++,

  'v_products_quantity'  => $iii++,

  );

 

  $languages = tep_get_languages();

 

     global $attribute_options_array;

 

     $attribute_options_count = 1;

     foreach ($attribute_options_array as $attribute_options_values) {

   $key1 = 'v_attribute_options_id_' . $attribute_options_count;

   $header_array[$key1] = $iii++;

 

       for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

         $l_id = $languages[$i]['id'];

 

    $key2 = 'v_attribute_options_name_' . $attribute_options_count . '_' . $l_id;

    $header_array[$key2] = $iii++;

   }

 

   $attribute_values_query = "select products_options_values_id  from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options_values['products_options_id'] . "' order by products_options_values_id";

 

   $attribute_values_values = tep_db_query($attribute_values_query);

 

   $attribute_values_count = 1;

   while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {

    $key3 = 'v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count;

    $header_array[$key3] = $iii++;

 

    for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

     $l_id = $languages[$i]['id'];

 

     $key4 = 'v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $l_id;

     $header_array[$key4] = $iii++;

    }

 

    $key5 = 'v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count;

    $header_array[$key5] = $iii++;

 

//// attributes stock add start        

if ( $products_attributes_stock == true ) {

    $key6 = 'v_attribute_values_stock_' . $attribute_options_count . '_' . $attribute_values_count;

    $header_array[$key6] = $iii++;

}    

//// attributes stock add end  

   

    $attribute_values_count++;

   }

 

   $attribute_options_count++;

    }

 

   $header_array['v_manufacturers_name'] = $iii++;

 

   $filelayout = array_merge($filelayout, $header_array);

   // VJ product attribs end

 

 // build the categories name section of the array based on the number of categores the user wants to have

 for($i=1;$i<$max_categories+1;$i++){

  $filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));

 }

 

 $filelayout = array_merge($filelayout, array(

  'v_tax_class_title'  => $iii++,

  'v_status'   => $iii++,

  'v_products_retail_price'  => $iii++,

  ));

 

 $filelayout_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  p.products_image as v_products_image,

  p.products_price as v_products_price,

  p.products_weight as v_products_weight,

  p.products_date_available as v_date_avail,

  p.products_date_added as v_date_added,

  p.products_tax_class_id as v_tax_class_id,

  p.products_quantity as v_products_quantity,

  p.products_retail_price as v_products_retail_price,

  p.manufacturers_id as v_manufacturers_id,

  subc.categories_id as v_categories_id,

  p.products_status as v_status

  FROM

  ".TABLE_PRODUCTS." as p,

  ".TABLE_CATEGORIES." as subc,

  ".TABLE_PRODUCTS_TO_CATEGORIES." as ptoc

  WHERE

  p.products_id = ptoc.products_id AND

  ptoc.categories_id = subc.categories_id

  ";

 

 break;

case 'priceqty':

 $iii = 0;

 // uncomment the customer_price and customer_group to support multi-price per product contrib

 $filelayout = array(

  'v_products_model'  => $iii++,

  'v_products_price'  => $iii++,

  'v_products_quantity'  => $iii++,

  #'v_customer_price_1'  => $iii++,

  #'v_customer_group_id_1'  => $iii++,

  #'v_customer_price_2'  => $iii++,

  #'v_customer_group_id_2'  => $iii++,

  #'v_customer_price_3'  => $iii++,

  #'v_customer_group_id_3'  => $iii++,

  #'v_customer_price_4'  => $iii++,

  #'v_customer_group_id_4'  => $iii++,

   );

 $filelayout_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  p.products_price as v_products_price,

  p.products_tax_class_id as v_tax_class_id,

  p.products_quantity as v_products_quantity,

  p.products_retail_price as v_products_retail_price

  FROM

  ".TABLE_PRODUCTS." as p

  ";

 

 break;

 

case 'category':

 // The file layout is dynamically made depending on the number of languages

&nbs

Link to comment
Share on other sites

Hi everybody. I have some problems when I add some new fields... I followed the rules of your txt file, but when I try to upload the excel modified file, all fields ARE MIXED UP!! How can it be possible???? Thank you for your answers!

 

SORRY, I make a mistake. I have replay to a wrong Post, instead of this!

 

 

Hi, bene83. I have the same problems, but I dont' know to solve it. I hope in a kind help from anyone, because I can't use my OSC shop without this contribution.

I really need your help! :'(

Thanks

gersio

Link to comment
Share on other sites

for those of you trying to add additional fields, open some of the other files included with easypopulate and do a comparison with what you have, you can then see the proper spots to add the fields

Link to comment
Share on other sites

for those of you trying to add additional fields, open some of the other files included with easypopulate and do a comparison with what you have, you can then see the proper spots to add the fields

 

Many thanks, Mibble, for your reply and especially for your EP full package 2.74. The EP last version (v2.76) not allow to add new fields: in the upload they are mixed up or deleted.

Perhaps, this problem would be pointed to the comunity.

 

Best regards,

gersio

Link to comment
Share on other sites

I do not know anything about NOT being able to add fields in 2.76, no one else has said anything about this. There were only minor mods made. Perhaps if you downloaded someone else's version (one with the semicolon delimited) or from another 'package' it may be the case.

Link to comment
Share on other sites

  • 2 months later...
i dont use products extra fields. since i do custom work it is easier to add the required fields manually to the database and then program them into the specific pages required, as well as adding them into easypopulate.

if you dont want the fields displayed, simple, use an if statement to check to see if there is data in the field.

 

trying to get this contribution to work with a floating field is pretty tough to do.

and since you are usually only adding from 3 to 10 fields, piece of cake to add those to a site and ep together.

 

 

I think you are right Mibble. I have been searching a lot to get this working. Maybe doing this manually will be best. BUT.........I don't know the code to do it. I can manually insert tables (the extra fields) in the DB. I know how to edit the easypopulate.php file to include the extra fields, but I don't know the code to add it to the info page. And also to have it do the check so that no data fields do not display. Can you give me a hand at this?

 

 

Thanks,

Mike

Link to comment
Share on other sites

  • 4 weeks later...

I added this contribution to my page a while back and it has been working really well.

 

I do have two questions. My store is mostly a book store with a few gifts. I'd like to add the Author field - a field I created - to the index.php listing - the list of products that comes up when you click on a category name. Currently, it shows the image, title and price and I'm not sure where to add in a line for showing the author.

 

Also, I'd like to only show the author, both on the index and on the product listing page, for those products that are in the Books category, but not those in the Gift category. This question may not belong in this thread, but has anyone else had success with that?

 

Thanks in advance.

Link to comment
Share on other sites

I added an author field to the database using this contribution. Even though the keyword search will pick up author, my client wants a separate author search field on the advanced search page. I've added the author field to the advanced_search.php page, but I cannot get it to show any results.

 

Here's the code from lines 61 and 281 in advanced_search_results.php. Can someone tell me what I'm doing wrong? I keep getting No Products Match.

 

	if (isset($HTTP_GET_VARS['author'])) {
  $author = $HTTP_GET_VARS['author'];
}

 

if (isset($author) && (sizeof($author) > 0)) {
$where_str .= " and p.products_author like '%" . tep_db_input($author) . "'";
 }

Link to comment
Share on other sites

An update on the search question from above.

 

I added an extra line to the code at line 289 in advanced_search_results.php and now every product in the store gets returned as a result:

 

   if (isset($search_author) && (sizeof($search_author) > 0)) {
 $author = tep_db_prepare_input($search_author[$i]);
$where_str .= " and p.products_author like '%" . tep_db_input($author) . "%'";
 }

 

I also added the following code around line 128

	if (tep_not_null($author)) {
  if (!tep_parse_search_string($author, $search_author)) {
	$error = true;

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

Link to comment
Share on other sites

  • 5 weeks later...

Ok here is the problem I'm having. Keep in mind I've tested everything with a fresh install of easy populate and everything works, the problems start when I install the new fields contrib. I'm using the newest version of both contribs.

 

When I go to add a new category and products everything uploads fine, but the listed products are all messed up. First problem is that even though for the image I have filename.jpg all that shows up is the image filename without the .jpg extension. All of the prices are at $1 no matter what and all of the retail prices are 10.00. The product model shows what the price is supposed to be. the product quantity is either 15 or 25 no matter what i put in, and the shipping weight is a bunch of 9s. all of the products listed are inactive. the dates listed for added and available are all zeros, and when i try to update the products by uploading the file again it just creates 2 instances. I'm completely baffled how all of this could happen. I've double checked everything in the mod and I'm following all of the directions correctly! something is seriously messed up, but maybe its something small causing all of this. If someone could help me out that would be great!

Link to comment
Share on other sites

  • 2 weeks later...
I've seen a number of people requesting help to integrate the Product Extra Fields contribution with Easy Populate.

 

I have not tested the following code extensively but it does seem to work.

 

PLEASE NOTE: You can only add new fields from within admin. You must then download an Easy Populate file to update the extra fields for each product. If you delete an extra field in admin after downloading an Easy Populate file and then import an Easy Populate file with the deleted field it will be ignored.

 

I am no super programmer and I'm sure my code can be optimised considerably but I'd lilke to put back into the community a small portion of the assistance I've received. Much of the basis of the code stems from the original Product Extra Fields contribution.

 

STEP 1: Find the following on approx. line 423

// If you have other modules that need to be available, put them here

 

Add the following immediately below this line:

// START: Extra Fields Contribution v2.0a
? ?$extra_fields_query = tep_db_query("
? ? ? ? ? ? ? ? ? ? ? ?SELECT pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value
? ? ? ? ? ? ? ? ? ? ? ?FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
? ? ? ? ? ? ? LEFT JOIN ?". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
? ? ? ? ? ? ?ON ptf.products_extra_fields_id=pef.products_extra_fields_id
? ? ? ? ? ? ?WHERE ptf.products_id=".$row['v_products_id']." and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='".$languages_id."')
? ? ? ? ? ? ?ORDER BY products_extra_fields_order");
?
? ?while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
? ? ? ? ?$row['v_PEF_'.$extra_fields['name']] = $extra_fields['value'];
? ?}
?// END: Extra Fields Contribution

 

STEP 2: Find the following on approx. line 1047

// build the categories name section of the array based on the number of categores the user wants to have
?for($i=1;$i<$max_categories+1;$i++){
?	$filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));
?}

 

Add the following immediately below:

//START: Extra Fields Contribution v2.0a
?	$extra_fields_query = tep_db_query("
? ? ? ? ? ? ? ? ? ? ? ?SELECT pef.products_extra_fields_name as name
? ? ? ? ? ? ? ? ? ? ? ?FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
? ? ? ? ? ? ? ? ?ORDER BY products_extra_fields_order");
? ?
? ? ?while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
? ? ? ? ? ?$filelayout = array_merge($filelayout, array('v_PEF_'.$extra_fields['name'] ?=> $iii++));
? ? ?
? ? ?}
? ? ?// END: Extra Fields Contribution v2.0a

 

STEP 3: Find the following on approx. line 2072

// VJ product attribs end

 

Add the following code after this line and before the "} else {"

// START: Extra Fields Contribution
?// Get current list of extra fields
? ? ? ? ?$extra_fields_query = tep_db_query("
? ? ? ? ? ? ? ? ? ? ? ?SELECT pef.products_extra_fields_name as name
? ? ? ? ? ? ? ? ? ? ? ?FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
? ? ? ? ? ? ? ? ?ORDER BY products_extra_fields_order");
? ?
? ? ?while ($extra_fields = tep_db_fetch_array($extra_fields_query)) {
? ? ?
? ? ? ?$v_current_PEF_name = $extra_fields['name'];
? ? ?$v_current_PEF_value = $items[$filelayout['v_PEF_' . $v_current_PEF_name]];
? ? ? ? ? ? ? ?
? ? ?//if row value is not null ?update, else delete the current entry if value is now null
? ? ?if(isset($filelayout['v_PEF_' . $v_current_PEF_name])) { // Check to see if this entry has not been added since download
? ? ?	//Find key value for this extra field
? ? ?	$extra_fields_id_query = tep_db_query("SELECT pef.products_extra_fields_id as PEFid, pef.products_extra_fields_name
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?FROM ". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
? ? ? ? ? ? ? ? ? ? ? ?WHERE pef.products_extra_fields_name = '".$v_current_PEF_name."'");
? ?
? ? ? ? $result = tep_db_fetch_array($extra_fields_id_query);
? ? ? ? $PEF_id = $result['PEFid'];
? ? ? ? 
? ? ? ? //Check if we are inserting, updating or deleting
? ? ? ? $extra_fields_exist_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " WHERE products_id = " . $v_products_id. " AND products_extra_fields_id = ".$PEF_id);
? ? ? ? ? ? ? while ($products_extra_fields_exist = tep_db_fetch_array($extra_fields_exist_query)) {
? ? ? ? ? ? ? ? $extra_product_value_exist = True; //found an entry
? ? ? ? ? ? ? }
? ? ? ? 
? ? ?	if ($extra_product_value_exist) { // an entry exists
? ? ? ?if ($v_current_PEF_value == '') tep_db_query("DELETE FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " where products_id = " . $v_products_id . " AND ?products_extra_fields_id = " . $PEF_id);
? ? ? ? ? ? ? ? ? ?else tep_db_query("UPDATE " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " SET products_extra_fields_value = '" . tep_db_input($v_current_PEF_value) . "' WHERE products_id = " . $v_products_id . " AND ?products_extra_fields_id = " . $PEF_id);
? ? ?	}else { // an entry does not exist
? ? ? ? ? ? ? ? ? ?if ($v_current_PEF_value != '') tep_db_query("INSERT INTO " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " (products_id, products_extra_fields_id, products_extra_fields_value) VALUES ('" . $v_products_id . "', '" . $PEF_id . "', '" . tep_db_input($v_current_PEF_value) . "')");
? ? ?	}
? ? ?} 
? ? ?} 
? ? ? ? ?// END: Extra Fields Contribution

 

Hope this helps somebody else. I love the Product Extra Fields contribution and this extra code makes the whole extra field issue completely dynamic.

 

Cheers, Scott

 

 

When I make these changes I get a 1054 error trying to download the database from EP:

 

1054 - Unknown column 'pef.languages_id' in 'where clause'

 

SELECT pef.products_extra_fields_name as name, ptf.products_extra_fields_value as value FROM products_extra_fields pef LEFT JOIN products_to_products_extra_fields ptf ON ptf.products_extra_fields_id=pef.products_extra_fields_id WHERE ptf.products_id=1 and ptf.products_extra_fields_value<>'' and (pef.languages_id='0' or pef.languages_id='1') ORDER BY products_extra_fields_order

 

 

Does anybody know of a reason for this?

Link to comment
Share on other sites

hi folks , i installed EP 2.76b , and it work good for me , excetp that i don't know how to get the categories be filled in the shop database in multilanguage , what is trange is taht i see the product description are in multilanguage, so why not the categories !?

 

do u think i have to use the infos in your contrib "New Fields with Easy Populate" http://www.oscommerce.com/community/contributions,1717

 

or is there any other way to get the full multilanguage for product but also all categories of the shop ?

MS2

Link to comment
Share on other sites

i dont use products extra fields. since i do custom work it is easier to add the required fields manually to the database and then program them into the specific pages required, as well as adding them into easypopulate.

if you dont want the fields displayed, simple, use an if statement to check to see if there is data in the field.

 

trying to get this contribution to work with a floating field is pretty tough to do.

and since you are usually only adding from 3 to 10 fields, piece of cake to add those to a site and ep together.

 

I have added custom fields manually in the 'products' table and everything is working. But I cannot figure out how to hide blank fields in the product listing (not product_info.php). In 'catalog/index.php' and in 'catalog/advanced_search_results.php' I found that removing lines of this code will get rid of a specific field display:

 

$define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL,
'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME,
'PRODUCT_LIST_MANUFACTURER' => PRODUCT_LIST_MANUFACTURER,
'PRODUCT_LIST_HOUSING_LENGTH' => PRODUCT_LIST_HOUSING_LENGTH,
'PRODUCT_LIST_TRAVEL_LENGTH' => PRODUCT_LIST_TRAVEL_LENGTH,
'PRODUCT_LIST_TUBE_BEND' => PRODUCT_LIST_TUBE_BEND,
'PRODUCT_LIST_END_STYLE' => PRODUCT_LIST_END_STYLE,
'PRODUCT_LIST_TAIL_PIECE' => PRODUCT_LIST_TAIL_PIECE,
'PRODUCT_LIST_STYLE' => PRODUCT_LIST_STYLE,
'PRODUCT_LIST_BCABLE_LENGTH' => PRODUCT_LIST_BCABLE_LENGTH,
'PRODUCT_LIST_TOTAL_LENGTH' => PRODUCT_LIST_TOTAL_LENGTH,
'PRODUCT_LIST_LENGTH' => PRODUCT_LIST_LENGTH,
'PRODUCT_LIST_END_1_FITTINGS' => PRODUCT_LIST_END_1_FITTINGS,
'PRODUCT_LIST_END_2_FITTINGS' => PRODUCT_LIST_END_2_FITTINGS,
'PRODUCT_LIST_COIL_END_BOOT' => PRODUCT_LIST_COIL_END_BOOT,
'PRODUCT_LIST_COLOR' => PRODUCT_LIST_COLOR,
'PRODUCT_LIST_LENGTH_WIRE_1' => PRODUCT_LIST_LENGTH_WIRE_1,
'PRODUCT_LIST_LENGTH_WIRE_2' => PRODUCT_LIST_LENGTH_WIRE_2,
'PRODUCT_LIST_SPARK_PLUG_BOOT' => PRODUCT_LIST_SPARK_PLUG_BOOT,
'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY,
'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT,
'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE,
'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW);

 

But I cannot figure out an if() statement that will work. Any suggestions?

Link to comment
Share on other sites

  • 2 weeks later...

I'm having an odd problem.

 

I added 8 fields to the database, and everything is ok in the admin area. These fields are stored in TABLE_PRODUCTS_DESCRIPTION. I followed the instructions outlined in this contribution and modified the queries where necessary to point to the right table.

 

The end result looks ok at first glance. All of the data pulls into Excel, but the problem is that each product is output 8 times. I figure that this has to do with the fact that the values are in the products_description table, but I've been troubleshooting all day, and can't seem to figure out why it's coming out 8 times.

 

Can anyone point me in the right direction?

 

Thanks in advance for any insight!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...