Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

[Contribution] Adding new fields to Easy Populate


Guest

Recommended Posts

Hi John,

 

Appreciate the contribution bit but I've no experience there and i don't want to muck anyone else's installations up by omitting or adding code automatically through a full contribution. I may be too cautious but I feel better about it ;)

 

Hi Rav,

 

I have absolutely no experience with the Attribute Sets contribution so I won't be much help. Perhaps if you also let us know the error you are receiving someone else with more knowledge may be able to help.

 

As a tip, I imagine that the admin for Attribute Sets already places changes back into the DB. Have a look at that code (as I did for Extra Product Fields) and see if you can find an answer there.

 

Cheers, Scott

Link to comment
Share on other sites

  • Replies 167
  • Created
  • Last Reply

Top Posters In This Topic

trying to use the attribute sets contribution will not be very easy, take a look at the database table, to see how the fields are created, which then get ported into the products_attributes table, unless you understand it all, it is pretty confusing.

Link to comment
Share on other sites

  • 3 weeks later...

My god I totally messed up some where and I cant figure it out. I added 3 new fields to easy populate, and it appear when I output to a file using easy populate, it looks good, but when I upload a tab delimeted text file with all the new data (I used to be able to do this before adding 3 new fields), the upload data is put in the wrong cells in the database. So when I go and look at my catalog, the date is showing where quantity, and a bunch of other fields are not where they should be.

 

How do I fix this?

 

Here is the code....

 

<?php

 

// Current EP Version

$curver = '2.75-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.

//

$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 = 12;

 

//**** 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 = true;

 

// **** 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 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.yourdomain.com/catalog/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.yourdomain.com/catalog/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'

);

 

//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'];

 

    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++;

 

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

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

 

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

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

 

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

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

    }

 

    $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_direct_mail_counts'  => $iii++,

  'v_products_telemarketing_counts'  => $iii++,

  'v_products_mixed_counts'  => $iii++,

  ));

 

 $filelayout_sql = "SELECT

     p.products_direct_mail_counts as v_products_direct_mail_counts,

     p.products_telemarketing_counts as v_products_telemarketing_counts,

     p.products_mixed_counts as v_products_mixed_counts,

  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.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

  FROM

  ".TABLE_PRODUCTS." as p

  ";

 

 break;

 

case 'category':

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

 $iii = 0;

 $filelayout = array(

  'v_products_model'  => $iii++,

 );

 

 // 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_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  subc.categories_id as v_categories_id

  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 'froogle':

 // this is going to be a little interesting because we need

 // a way to map from internal names to external names

 //

 // Before it didn't matter, but with froogle needing particular headers,

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

 $iii = 0;

 $filelayout = array(

  'v_froogle_products_url_1'   => $iii++,

  );

 //

 // here we need to get the default language and put

 $l_id = 1; // dummy it in for now.

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

//   $l_id = $lang['id'];

  $filelayout  = array_merge($filelayout , array(

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

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

    ));

//  }

 $filelayout  = array_merge($filelayout , array(

  'v_products_price'  => $iii++,

  'v_products_fullpath_image' => $iii++,

  'v_category_fullpath'  => $iii++,

  'v_froogle_offer_id'  => $iii++,

  'v_froogle_instock'  => $iii++,

  'v_froogle_ shipping'  => $iii++,

  'v_manufacturers_name'  => $iii++,

  'v_froogle_ upc'  => $iii++,

  'v_froogle_color'  => $iii++,

  'v_froogle_size'  => $iii++,

  'v_froogle_quantitylevel' => $iii++,

  'v_froogle_product_id'  => $iii+

Link to comment
Share on other sites

what fields are you trying to add?

 

 

 

 

Mr. Mibble,

 

I have added

 

p.products_direct_mail_counts as v_products_direct_mail_counts,

p.products_telemarketing_counts as v_products_telemarketing_counts,

p.products_mixed_counts as v_products_mixed_counts,

 

direct_mail_counts

telemarketing_counts

mixed_counts

Link to comment
Share on other sites

John,

 

Okay, I took a look at that post, and saw the file you attached, but was not sure where you added those new fields products_issues and Products_retail_price.

 

Also, it did not appear to be a full file. Can you point me to a link, or a sample file with new fields added. I can then just replace those new fields with mine..

 

I hope..

Link to comment
Share on other sites

Add Product Sort v1.4 (14 Sep 2004) to Easy Populate v2.76 (15 Apr 2005)

 

When I installed Product Sort it inserted a products_sort_order field into my database, and Easy Populate doesn't download this field automatically.

 

Will using the following code from ?New Fields with Easy Populate (4 Mar 2005 ? Update)? add products_sort_order and allow download and upload?

 

I have tried it and it downloads without a problem, but when I upload some fields upload properly and some fields are out of order.

 

Is there anything else that I need to modify or update?

 

File to modify: /admin/easypopulate.php

Find the line, approx 991: 

$filelayout  = array_merge($filelayout , array(
'v_tax_class_title'  => $iii++,
'v_status'  => $iii++,

Below it add:
'v_products_sort_order'  => $iii++,
---------------------------------------------------------------------------------------------

Find the line, approx 997:
$filelayout_sql = "SELECT

Below it add:
p.products_sort_order as v_products_sort_order,
---------------------------------------------------------------------------------------------

Find the line, approx 1295:
$sql = "SELECT


Below it add:
p.products_sort_order as v_products_sort_order,
---------------------------------------------------------------------------------------------

Find the line, approx 1678: $query = "INSERT INTO " . TABLE_PRODUCTS . " (

Below it add:
products_sort_order,
---------------------------------------------------------------------------------------------

Find the line, approx 1678: $query .="'$v_products_model',

Find the line a couple lines down, '$v_products_quantity',

Below that line add: '$v_products_sort_order'
---------------------------------------------------------------------------------------------

Find the line, approx 1744: $query .= '", products_weight="'.$v_products_weight .

Find the line a couple lines down, , products_quantity="' . $v_products_quantity .

Below it add:
'", products_sort_order="' . $v_products_sort_order .

 

Thanks in advance for any help or insights.

Link to comment
Share on other sites

When I import my txt file, my new field doesn't import even though it shows all the data when I'm importing. When I export the complete list I see the header for my new field but theres no data in it. What am I doing wrong?

 

I had to downgrade my version of easypopulate to make it work with this without an error from 2.7x to 2.64 I think. I made the appropriate changes, and I've double checked it a thousand times. It worked before I downgraded.

Edited by yatahaze
Link to comment
Share on other sites

Time to edit is waaay to short. I've already found the solution. It appears that I have stupidly missed other steps for editing easypopulate.php. I guess it was late in the day yesterday when I made the change and I was a little brain fried :)

Link to comment
Share on other sites

Add Product Sort v1.4 (14 Sep 2004) to Easy Populate v2.76 (15 Apr 2005)

 

When I installed Product Sort it inserted a products_sort_order field into my database, and Easy Populate doesn't download this field automatically.

 

Will using the following code from ?New Fields with Easy Populate (4 Mar 2005 ? Update)? add products_sort_order and allow download and upload?

 

I have tried it and it downloads without a problem, but when I upload some fields upload properly and some fields are out of order.

 

Is there anything else that I need to modify or update?

 

Finally fixed! I finally got this to work by using user Pura Vida's suggestion at: http://www.oscommerce.com/forums/index.php?sho...20entry615220

 

Thanks again Pura Vida!

Link to comment
Share on other sites

After I went and finished the extra steps in editing easypopulate.php that I missed, this problem came back again that I had with 2.7x. I still havent seen a solution!! :(

 

Error:

1136 - Column count doesn't match value count at row 1

INSERT INTO products ( products_unitms, products_image, products_model, products_price, products_status, products_last_modified, products_date_added, products_date_available, products_tax_class_id, products_weight, products_quantity, manufacturers_id) VALUES ( 'storepics/JP-5122G.jpg', 'JP-5122G', '1.5', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, '', '', '1', 'Per 6/Pkg' '9')

 

products_unitms is my new field. This error only started after I edited my easypopulate.php (not including the first step).

 

Simplified Info:

INSERT INTO products  (12 Values, 9 without the dates)
------------------------------------------------------
products_unitms, 
products_image, 
products_model, 
products_price, 
products_status, 
products_last_modified, 
products_date_added, 
products_date_available, 
products_tax_class_id, 
products_weight, 
products_quantity, 
manufacturers_id

VALUES  (12 Values, 9 without the dates)
----------------------------------------
'storepics/JP-5122G.jpg', 
'JP-5122G', 
'1.5', 
'1', 
CURRENT_TIMESTAMP, 
CURRENT_TIMESTAMP, 
CURRENT_TIMESTAMP, 
'', 
'', 
'1', 
'Per 6/Pkg' 
'9'

The row it showed above the error  (9 Values)
---------------------------------------------
| JP-5122G 
| storepics/ 
| Spring Con 
| Per 6/Pkg 
| 1.5 
| Jewelry 
| 
| Jewelry 
| Active 

Headers in my tab delimited txt file (9 Values, not including EOREOR)
---------------------------------------------------------------------
v_products_model	
v_products_image	
v_products_name_1	
v_products_unitms	
v_products_price	
v_categories_name_1	
v_categories_name_2	
v_manufacturers_name	
v_status	
EOREOR

 

PLEASE! Can someone help me? On an earlier post someone got it working because they downgraded, and I've just tried that and I get the same problem. I'm under pressure to my store running and online. Thanks so much.

Edited by yatahaze
Link to comment
Share on other sites

I had that same error. There is a certain way that new fields must be entered into Easy Populate.

 

Try the suggestion here: http://www.oscommerce.com/forums/index.php?sho...20entry615220 and it should work.

Link to comment
Share on other sites

Wow. There wasn't a comma there. I found the line stuck it in and now it works. Thanks!!!!! :)

 

I wonder if theres an error in the help file that tells you to paste it without the comma, or if I just missed it. Because this has happened twice, I had a newer version before that didnt work as well.

Edited by yatahaze
Link to comment
Share on other sites

Looks like there is a problem. Look at this guys post from a long time ago about the same issue:

 

VALUES ( '808', 'no.gif', 'PORTER HALL' 'Ten Month Soundtrack' 'LP' '8', '0.70', "2004-04-27 20:15:26", "2004-04-27 20:15:26", '1', '', '1', '78')

 

His new fields have no commas. Maybe I'll fix the contribution and repost it if I have time.

Link to comment
Share on other sites

  • 2 weeks later...

For anybody who has problems like those previous posters:

miss_coded wrote

I had no trouble adding new fields to easy populate (well, not much) thing is the new fields do not appearin thefile when Icreate & download. If I add the fields to the file and upload it updates everything fine. Any clues?

 

UnqlPhriek wrote

I followed the instructions exactly step by step but nothing happened - the new fields aren't included in the easypopulate txt-files.

 

importhookup wrote

I just followed all the directions to add the products_retail_price field. After testing it I found out that the information doesn't get downloaded. Then I entered in some sample retail prices and that doesn't get uploaded.... any idea why this would happen and how I can fix this? Thanks.

 

Paulie wrote

I am using Easy Populate with EZ New Fields, and everything is working fine except for one problem. When I add a value to the products_retail_price field in Excel and upload the file through EP, it works fine. However, when I download a complete tab delimited text file and open it, the field products_retail_price is blank. Any ideas why the content in this field is blank after downloading it?

 

You have to do the insertation mentioned in installation instructions after

$filelayout_sql = "SELECT

5 times, not only one time around line 1014 and everything will work!

Edited by Ala
Link to comment
Share on other sites

yes, as most dont think about the insert, however it is detailed in the file and the instructions. most do not want to open the easypopulate.php file.

Link to comment
Share on other sites

  • 4 weeks later...

Hi there, finally figured out how to add a new field & properly upload EP & insert data in the correct spot.

 

Now, final piece of the puzzle :D...

 

The new field i'm using is product_cost, what i'd like to do is take product_cost & times it by 1.10 or 1.15 etc (10%, 15%, etc. profit) & output to product_price.

 

I know this doesn't belong in this post, as it concerns the categories.php file, but this post has helped me alot so I figure someone might know how to do this?

 

TIA!

Link to comment
Share on other sites

Hai,

My first time in this OSC forum.

I'm currently configurating stuff. I tried to implement a new field in the product table and used this contribution. I double checked all codes for mistakes but could not find any.

 

I need some help.

 

In OSC admin I get the following error message:

 

Categorie?n / Artikelen

1054 - Unknown column 'p.products_age' in 'field list'

 

select p.products_id, pd.products_name, p.products_quantity, p.products_age, p.products_image, p.products_price, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status from products p, products_description pd, products_to_categories p2c where p.products_id = pd.products_id and pd.language_id = '4' and p.products_id = p2c.products_id and p2c.categories_id = '0' order by pd.products_name

 

[TEP STOP]

 

 

I changed all files as mentioned in contribution and changed the product table via PHPmyAdmin. (age is the new field).

I do not get products_age in the product listing in the OSC admin. What do I do wrong?

 

Who can give me some advise on this matter?

 

cheers

Gauthier

Link to comment
Share on other sites

Hai,

My first time in this OSC forum.

I'm currently configurating stuff. I tried to implement a new field in the product table and used this contribution. I double checked all codes for mistakes but could not find any.

 

I need some help.

 

In OSC admin I get the following error message:

 

Categorie?n / Artikelen     

1054 - Unknown column 'p.products_age' in 'field list'

 

select p.products_id, pd.products_name, p.products_quantity, p.products_age, p.products_image, p.products_price, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status from products p, products_description pd, products_to_categories p2c where p.products_id = pd.products_id and pd.language_id = '4' and p.products_id = p2c.products_id and p2c.categories_id = '0' order by pd.products_name

 

[TEP STOP]

 

 

I changed all files as mentioned in contribution and changed the product table via PHPmyAdmin. (age is the new field).

I do not get products_age in the product listing in the OSC admin. What do I do wrong?

 

Who can give me some advise on this matter?

 

cheers

Gauthier

 

 

 

Problem solved. Configure files where routed to old databases.

 

Gauthier

Link to comment
Share on other sites

Hi all

Added the code done by sparkin in April to integrate the Product Extra Fields contribution with easy populate and everything was working perfectly (loved it - thank you!!).

 

Now all of a sudden, the file is taking forever to download and often brings down an empty file. Otherwise it seems to just hang - doesn't through any errors either. It was uploading fine as well but now has also fallen over.

 

Has anyone experienced this before - I was so happy that it was all working!! All I did was add the extra code.

 

Thanks!

Link to comment
Share on other sites

Hi all

I am in all sorts of problems with the Easy Populate file. Has anyone had trouble downloading a large complete file (approx 4000 products) - I added the Product Extra Fields code and it was working fine. I added data and it would upload but not download. Tried to download again today and eventually it timed out.

 

I took the code out and returned to the original file and it worked fine again but of course didn't get the extra fields.

 

I have now created more categories and divided the products up further which mean I have approx 2000 products listed in at least 2 categories (ie by brand and by colour). Now it will download all files except for the complete one (which is the one which should have the extra fields in it if it was all working!

 

Is there by any chance anyone could set up a piece of code which would create a download that just has the Product Name and the Product Extra Fields?

 

I have been informed by my host that I am creating too much of a drain on the servers trying to solve this so need a solution quick!!! :'(

 

I love Easypopulate and it has made my life so much easier but the last two days have been hell as I have been trying to solve this issue!!

 

Any help or advice would be appreciated

 

Thanks!!

Link to comment
Share on other sites

what is the purpose of downloading, you already have the upload file? usually they are done to upload new or changes.

 

i keep all my ep files separated by manufacturer, and when they reach 1500, i break them out even more . .. i never download the sheets, as i keep them all locally.

 

you can edit your easypopulate.php file to download by category, however trying to download 4000 products with that much data, you will need to have control over your ep file, and it will take awhile to get accomplished.

 

again, i find it unnecessary to download after i have uploaded.

 

Hi all

Added the code done by sparkin in April to integrate the Product Extra Fields contribution with easy populate and everything was working perfectly (loved it - thank you!!).

 

Now all of a sudden, the file is taking forever to download and often brings down an empty file. Otherwise it seems to just hang - doesn't through any errors either. It was uploading fine as well but now has also fallen over.

 

Has anyone experienced this before - I was so happy that it was all working!! All I did was add the extra code.

 

Thanks!

Edited by Mibble
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...