Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

VJ

Easy Populate & Products Attributes

Recommended Posts

Dear netters,

 

Thank you for all your replies. What a relief ;-) After all; at least it is not my fault (What all beginners assume!)

 

An SQL-Query (for phpMyAdmin) that simply deletes all the prefixes off the prices itself, but reaves the price_prefix-field untouched would be pretty helpful.

 

Otherwise I could easily afford to simply wait for an update before I start importing products with attributes and go ahead with the more simple task adding products without any...

 

Looking forward...

 

By the way: If you are ever in Hamburg let me invite you to a beer. That is all I can spend but it would be a pleasure!

 

Joachim Kleinhans

Share this post


Link to post
Share on other sites

Mibble,

 

Neither. I don't want to touch the price_prefix column, I want the query to REMOVE all " - ' from the options_values_price column. The problem is that EP updates the price_prefix properly, AND keeps a negative sign in the options_values_price column - I want the price_prefix to stay however it is, just remove the minus sign from options_values_price, without disturbing the other values in the fields.

 

Jacob

 

are you wanting the table to be + or -

 

update products_attributes set price_prefix='-'; or update products_attributes set price_prefix='+';

Share this post


Link to post
Share on other sites
Guest

if the price prefix is empty, then osCommerce sees the price as a negative price (test it and see what you get) thus you need to have a value in there. i proved that this weekend to another customer.

Share this post


Link to post
Share on other sites
scratchin my ...... here, what does your post answer in here berkedam?  or did i miss a post somewhere . . .

 

John, i really don't know :'(

why it landed in this thread totally beats me.

 

now i will have to find the right thread in order to see if it landed there also, if not i will post again there.


"If you're working on something new, then you are necessarily an amateur."

Share this post


Link to post
Share on other sites

John,

 

The price prefix wouldn't be empty, it would have a negative sign in it. I want to remove the negative sign from the OPTIONS_VALUES_PRICE column - I do not want to touch the PRICE_PREFIX column at all.

 

Again, the only thing I want to do is remove every instance of a negative sign from the OPTIONS_VALUES_PRICE column - price_prefix is just fine and dandy how it is and doesn't need to be touched.

 

I do not remove instances of a negative sign from price_prefix and leave them in options_value_price, because then on my product_info page in the options drop down the formatting looks weird, turning the price into something like

 

 $-100.50

 

as opposed to

 

 -$100.50

 

which is what I want.

 

Sorry if I am explaining this backwards, as we seemed to be having a miscommunication. Hopefully somebody else can help explain what I am trying to accomplish?

 

Jacob

 

 

if the price prefix is empty, then osCommerce sees the price as a negative price (test it and see what you get) thus you need to have a value in there.  i proved that this weekend to another customer.

Share this post


Link to post
Share on other sites
Guest

i just looked at the table for options_values_price all it is is #'s no - or + sign.

Share this post


Link to post
Share on other sites

John,

 

In my table, there are - signs after I run EP that has attributes with negative values. That's why I'm trying to get rid of them.

 

Jacob

 

i just looked at the table for options_values_price all it is is #'s no - or + sign.

Share this post


Link to post
Share on other sites

Ok, here's the fix for those who want to get rid of every instance of a - sign from the options_values_price column without touching the price_prefix column (leaving the negative sign EP plugs in there intact)

 

 

update products_attributes set options_values_price = ABS(options_values_price)

 

This query will cause options_values_price to be set to the absolute value of whatever number is there - so the absolute value of -43 is... <drum roll> 43!

 

Which of course, when combined with the - sign in the price_prefix column gives you a product attribute that subtracts the value from the product price properly, and follows the standard for how you display negative monetary values.

 

All credit for the query goes to wizardsandwars - huge thanks to him!

 

Jacob

Share this post


Link to post
Share on other sites
Hi,

Hope it's ok to jump in here.

I need to get 1,000's of items into Osc (actually about 20,000 - 2,000 of which will have attributes). I think that Easypopulate is the only option - but the limit of about 300 records per import file, would make this a fiddle. I guess the timeout value cannot be increased easily on a shared server for the import process alone. This is not likely to be a one off process and maybe required weekly.

I'm sure plenty of sites have had to do this. Any suggestions would be greatly appreciated.

Thanks, Antony

Share this post


Link to post
Share on other sites

300 records per import file? Are you sure thats right, I imported about 5000 items from one big csv into my shop. The only thing i had to change was the maximum execution time that was default to 60 secs to like 5 mins.

 

A question I have is, in my huge .csv file, I have mutiple entries for items that have different sizes. I want instead to have the different sizes merged into one item and have them as attribute options. Is there a way to do this without having to go and do each entry by hand? I would prefer to do this in excel because having to edit thousands of items in sql seems like a pain to me. Also, is having tons of attributes more efficient then having tons of items? I would appreciate any help with this issue. Thanks!

Edited by Konquest

Share this post


Link to post
Share on other sites
Guest

a lot of it depends upon the server AND the amount of attributes. if no attributes, then 5000 items is nothing to upload.

 

some people do not have control over their php.ini to increase the timeout setting.

 

splitting the files doesnt take much time, in fact you can split locally then upload to the temp directory, then run a cron job to put the files into the database or key them in manually via the upload from temp dir, which should take hardly any time at all, if you have them named 1.txt, 2.txt, and so on

Edited by Mibble

Share this post


Link to post
Share on other sites

need help with seperate price per customer contrid, uploading to EP.

 

I have installed EP and moded the file to download the fields customer_price_1 and customer_group_id_1

 

On downloading the DB Complete puts the values in correctly and all is good.

 

The problem happens when I want to update. The screen shows all items updated but the last item wich is the one with the customer pricing difference, says :

 

1062 - Duplicate entry '1' for key 1

 

INSERT INTO products_groups VALUES ( 1, 185, 29, 100 )

 

1 is the group IDfor #1, 185 is the price for #1 and I have no idea what 29 and 100 are.

 

Here is the item from the tab deliniated file:

testing2 testing2 100 185 1 99.99 2 0 10/28/2004 0:00 10/20/2004 20:29 9 10 5 Hardware CDROM Drives --none-- Active EOREOR

 

Here is the code from my EP.

 

Can someone help me get this litle issue resolved? I'm not very good with php but I can get around. Now there seems to be something screwy but I cannot figure out what...

<?php

 

// Current EP Version

$curver = '2.74-MS2';

// With Price Break, removed local paths from 7 Aug version, these are now correct.

/*

 $Id: easypopulate.php,v 2.74 2004/05/03 VJ 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 = 'blank.gif';

$default_image_product = 'no_pic.gif';

$default_image_category = 'blank.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 = 50;

 

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

 

// **** 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 = 5; // 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 = 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://shop.ott-motorcycles.ca/product_info.php";

 

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

// Set this to the path to your images directory

global $froogle_image_path;

$froogle_image_path = "http://shop.ott-motorcycles.ca/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_price1',

//        'v_products_price2',

//        'v_products_price3',

//        'v_products_price4',

//        'v_products_price1_qty',

//        'v_products_price2_qty',

//        'v_products_price3_qty',

//        'v_products_price4_qty',

//        'v_products_qty_blocks',

       '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

 

       if ( $dltype=='froogle' ){

               // set the things froogle wants at the top of the file

               $filestring .= "# html_escaped=YES\n";

               $filestring .= "# updates_only=NO\n";

               $filestring .= "# product_type=OTHER\n";

               $filestring .= "# quoted=YES\n";

       }

 

       $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);

//                $row['v_products_price1']         = round($row['v_products_price1'] +

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

//                $row['v_products_price2']         = round($row['v_products_price2'] +

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

//                $row['v_products_price3']         = round($row['v_products_price3'] +

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

//                $row['v_products_price4']         = round($row['v_products_price4'] +

//                                ($price_with_tax * $row['v_products_price4'] * $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)) {

Share this post


Link to post
Share on other sites

Continued...

 

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

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

   $header_array['v_products_ship_price_two'] = $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++,

                       ));

 

               $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_bimage as v_products_bimage, */

                       p.products_price as v_products_price,

/*                        p.products_price1 as v_products_price1, */

/*                        p.products_price2 as v_products_price2, */

/*                        p.products_price3 as v_products_price3, */

/*                        p.products_price4 as v_products_price4, */

/*                        p.products_price1_qty as v_products_price1_qty, */

/*                        p.products_price2_qty as v_products_price2_qty, */

/*                        p.products_price3_qty as v_products_price3_qty, */

/*                        p.products_price4_qty as v_products_price4_qty, */

/*                        p.products_qty_blocks as v_products_qty_blocks, */

                       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,

                       p.products_ship_price as v_products_ship_price,

                       p.products_ship_price_two as v_products_ship_price_two,

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

//                        'v_products_price2' => $iii++,

//                        'v_products_price3' => $iii++,

//                        'v_products_price4' => $iii++,

//                        'v_products_price1_qty' => $iii++,

//                        'v_products_price2_qty' => $iii++,

//                        'v_products_price3_qty' => $iii++,

//                        'v_products_price4_qty' => $iii++,

//                        'v_products_qty_blocks' => $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;

 

 

       }

       $filelayout_count = count($filelayout);

 

}

 

 

function walk( $item1 ) {

       global $filelayout, $filelayout_count, $modelsize;

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

       global $epdlanguage_id, $price_with_tax, $replace_quotes;

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

       global $separator, $max_categories;

       // first we clean up the row of data

 

       // chop blanks from each end

       $item1 = ltrim(rtrim($item1));

 

       // blow it into an array, splitting on the tabs

       $items = explode($separator, $item1);

 

       // make sure all non-set things are set to '';

       // and strip the quotes from the start and end of the stings.

       // escape any special chars for the database.

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

               $i = $filelayout[$key];

               if (isset($items[$i]) == false) {

                       $items[$i]='';

               } else {

                       // Check to see if either of the magic_quotes are turned on or off;

                       // And apply filtering accordingly.

                       if (function_exists('ini_get')) {

                               //echo "Getting ready to check magic quotes<br>";

                               if (ini_get('magic_quotes_runtime') == 1){

                                       // The magic_quotes_runtime are on, so lets account for them

                                       // check if the last character is a quote;

                                       // if it is, chop off the quotes.

                                       if (substr($items[$i],-1) == '"'){

                                               $items[$i] = substr($items[$i],2,strlen($items[$i])-4);

                                       }

                                       // now any remaining doubled double quotes should be converted to one doublequote

                                       $items[$i] = str_replace('\"\"',""",$items[$i]);

                                       if ($replace_quotes){

                                               $items[$i] = str_replace('\"',""",$items[$i]);

                                               $items[$i] = str_replace("\'","'",$items[$i]);

                                       }

                               } else { // no magic_quotes are on

                                       // check if the last character is a quote;

                                       // if it is, chop off the 1st and last character of the string.

                                       if (substr($items[$i],-1) == '"'){

                                               $items[$i] = substr($items[$i],1,strlen($items[$i])-2);

                                       }

                                       // now any remaining doubled double quotes should be converted to one doublequote

                                       $items[$i] = str_replace('""',""",$items[$i]);

                                       if ($replace_quotes){

                                               $items[$i] = str_replace('"',""",$items[$i]);

                                               $items[$i] = str_replace("'","'",$items[$i]);

                                       }

                               }

                       }

               }

       }

/*

       if ( $items['v_status'] == $deleteit ){

               // they want to delete this product.

               echo "Deleting product " . $items['v_products_model'] . " from the database<br>";

               // Get the ID

 

               // kill in the products_to_categories

 

               // Kill in the products table

 

               return; // we're done deleteing!

       }

*/

       // now do a query to get the record's current contents

       $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_bimage as v_products_bimage, */

               p.products_price as v_products_price,

/*                p.products_price1 as v_products_price1, */

/*                p.products_price2 as v_products_price2, */

/*                p.products_price3 as v_products_price3, */

/*                p.products_price4 as v_products_price4, */

/*                p.products_price1_qty as v_products_price1_qty, */

/*                p.products_price2_qty as v_products_price2_qty, */

/*                p.products_price3_qty as v_products_price3_qty, */

/*                p.products_price4_qty as v_products_price4_qty, */

/*                p.products_qty_blocks as v_products_qty_blocks, */

               p.products_weight as v_products_weight,

               p.products_date_added as v_date_avail,

               p.products_tax_class_id as v_tax_class_id,

               p.products_quantity as v_products_quantity,

               p.manufacturers_id as v_manufacturers_id,

               p.products_ship_price as v_products_ship_price,

               p.products_ship_price_two as v_products_ship_price_two,

               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

               p.products_model = '" . $items[$filelayout['v_products_model']] . "' AND

               ptoc.categories_id = subc.categories_id

               ";

 

       $result = tep_db_query($sql);

       $row =  tep_db_fetch_array($result);

 

 

       while ($row){

               // OK, since we got a row, the item already exists.

               // Let's get all the data we need and fill in all the fields that need to be defaulted to the current values

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

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

                       //echo "Inside defaulting loop";

                       //echo "key is $key<br>";

                       //echo "langid is " . $lang['id'] . "<br>";

//                        $sql2 = "SELECT products_name, products_description

//                                FROM ".TABLE_PRODUCTS_DESCRIPTION."

//                                WHERE

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

//                                        language_id = '" . $lang['id'] . "'

//                                ";

                       $sql2 = "SELECT *

                               FROM ".TABLE_PRODUCTS_DESCRIPTION."

                               WHERE

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

                                       language_id = '" . $lang['id'] . "'

                               ";

                       $result2 = tep_db_query($sql2);

                       $row2 =  tep_db_fetch_array($result2);

                       // Need to report from ......_name_1 not ..._name_0

                       $row['v_products_name_' . $lang['id']]                 = $row2['products_name'];

                       $row['v_products_description_' . $lang['id']]         = $row2['products_description'];

                       $row['v_products_url_' . $lang['id']]                 = $row2['products_url'];

 

                       // support for Linda's Header Controller 2.0 here

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

                               $row['v_products_head_title_tag_' . $lang['id']]         = $row2['products_head_title_tag'];

                               $row['v_products_head_desc_tag_' . $lang['id']]         = $row2['products_head_desc_tag'];

                               $row['v_products_head_keywords_tag_' . $lang['id']]         = $row2['products_head_keywords_tag'];

                       }

                       // end support for Header Controller 2.0

               }

 

               // start with v_categories_id

               // Get the category description

               // set the appropriate variable name

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

               $thecategory_id = $row['v_categories_id'];

 

               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;

                               }

                       } else {

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

                       }

               }

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

               $newlevel = 1;

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

               for( $categorylevel=$max_categories+1; $categorylevel>0; $categorylevel--){

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

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

                       }

               }

 

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

               }

 

               //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 true

               $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']);

               if ($price_with_tax){

                       $row['v_products_price'] = round($row['v_products_price'] + ($row['v_products_price'] * $row_tax_multiplier / 100),2);

//                        $row['v_products_price1'] = round($row['v_products_price1'] + ($row['v_products_price1'] * $row_tax_multiplier / 100),2);

//                        $row['v_products_price2'] = round($row['v_products_price2'] + ($row['v_products_price2'] * $row_tax_multiplier / 100),2);

//                        $row['v_products_price3'] = round($row['v_products_price3'] + ($row['v_products_price3'] * $row_tax_multiplier / 100),2);

//                        $row['v_products_price4'] = round($row['v_products_price4'] + ($row['v_products_price4'] * $row_tax_multiplier / 100),2);

               }

 

               // now create the internal variables that will be used

               // the $$thisvar is on purpose: it creates a variable named what ever was in $thisvar and sets the value

               foreach ($default_these as $thisvar){

                       $$thisvar        = $row[$thisvar];

               }

 

               $row =  tep_db_fetch_array($result);

       }

 

       // this is an important loop.  What it does is go thru all the fields in the incoming file and set the internal vars.

       // Internal vars not set here are either set in the loop above for existing records, or not set at all (null values)

       // the array values are handled separatly, although they will set variables in this loop, we won't use them.

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

               $$key = $items[ $value ];

       }

 

       // so how to handle these?  we shouldn't built the array unless it's been giving to us.

       // The assumption is that if you give us names and descriptions, then you give us name and description for all applicable languages

       foreach ($langcode as $lang){

               //echo "Langid is " . $lang['id'] . "<br>";

               $l_id = $lang['id'];

               if (isset($filelayout['v_products_name_' . $l_id ])){

                       //we set dynamically the language values

                       $v_products_name[$l_id]         = $items[$filelayout['v_products_name_' . $l_id]];

                       $v_products_description[$l_id]         = $items[$filelayout['v_products_description_' . $l_id ]];

                       $v_products_url[$l_id]                 = $items[$filelayout['v_products_url_' . $l_id ]];

                       // support for Linda's Header Controller 2.0 here

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

                               $v_products_head_title_tag[$l_id]         = $items[$filelayout['v_products_head_title_tag_' . $l_id]];

                               $v_products_head_desc_tag[$l_id]         = $items[$filelayout['v_products_head_desc_tag_' . $l_id]];

                               $v_products_head_keywords_tag[$l_id]         = $items[$filelayout['v_products_head_keywords_tag_' . $l_id]];

                       }

                       // end support for Header Controller 2.0

               }

       }

       //elari... we get the tax_clas_id from the tax_title

       //on screen will still be displayed the tax_class_title instead of the id....

       if ( isset( $v_tax_class_title) ){

               $v_tax_class_id          = tep_get_tax_title_class_id($v_tax_class_title);

       }

       //we check the tax rate of this tax_class_id

       $row_tax_multiplier = tep_get_tax_class_rate($v_tax_class_id);

 

       //And we recalculate price without the included tax...

       //Since it seems display is made before, the displayed price will still include tax

       //This is same problem for the tax_clas_id that display tax_class_title

       if ($price_with_tax){

               $v_products_price        = round( $v_products_price / (1 + ( $row_tax_multiplier * $price_with_tax/100) ), 4);

//                $v_products_price1        = round( $v_products_price1 / (1 + ( $row_tax_multiplier * $price_with_tax/100) ), 4);

//                $v_products_price2        = round( $v_products_price2 / (1 + ( $row_tax_multiplier * $price_with_tax/100) ), 4);

//                $v_products_price3        = round( $v_products_price3 / (1 + ( $row_tax_multiplier * $price_with_tax/100) ), 4);

//                $v_products_price4        = round( $v_products_price4 / (1 + ( $row_tax_multiplier * $price_with_tax/100) ), 4);

       }

 

       // if they give us one category, they give us all 6 categories

       unset ($v_categories_name); // default to not set.

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

               $newlevel = 1;

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

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

                               $v_categories_name[$newlevel++] = $items[$filelayout['v_categories_name_' . $categorylevel]];

                       }

               }

               while( $newlevel < $max_categories+1){

                       $v_categories_name[$newlevel++] = ''; // default the remaining items to nothing

               }

       }

 

       if (ltrim(rtrim($v_products_quantity)) == '') {

               $v_products_quantity = 1;

       }

       if ($v_date_avail == '') {

//                $v_date_avail = "CURRENT_TIMESTAMP";

               $v_date_avail = "NULL";

       } else {

               // we put the quotes around it here because we can't put them into the query, because sometimes

               //   we will use the "current_timestamp", which can't have quotes around it.

               $v_date_avail = '"' . $v_date_avail . '"';

       }

 

       if ($v_date_added == '') {

               $v_date_added = "CURRENT_TIMESTAMP";

       } else {

               // we put the quotes around it here because we can't put them into the query, because sometimes

               //   we will use the "current_timestamp", which can't have quotes around it.

               $v_date_added = '"' . $v_date_added . '"';

       }

 

 

       // default the stock if they spec'd it or if it's blank

       $v_db_status = '1'; // default to active

       if ($v_status == $inactive){

               // they told us to deactivate this item

               $v_db_status = '0';

       }

       if ($zero_qty_inactive && $v_products_quantity == 0) {

               // if they said that zero qty products should be deactivated, let's deactivate if the qty is zero

               $v_db_status = '0';

       }

 

       if ($v_manufacturer_id==''){

               $v_manufacturer_id="NULL";

       }

 

       if ($v_products_ship_price==''){

               $v_products_ship_price = '0.00';

       } else {

               $v_products_ship_price = '' . $v_products_ship_price . '';

       }

 

       if ($v_products_ship_price_two==''){

               $v_products_ship_price_two = '0.00';

       } else {

               $v_products_ship_price_two = '' . $v_products_ship_price_two . '';

       }

 

       if (trim($v_products_image)==''){

               $v_products_image = $default_image_product;

       }

 

       if (strlen($v_products_model) > $modelsize ){

               echo "<font color='red'>" . strlen($v_products_model) . $v_products_model . "... ERROR! - Too many characters in the model number.<br>

                       12 is the maximum on a standard OSC install.<br>

                       Your maximum product_model length is set to $modelsize<br>

                       You can either shorten your model numbers or increase the size of the field in the database.</font>";

               die();

       }

 

       // OK, we need to convert the manufacturer's name into id's for the database

       if ( isset($v_manufacturers_name) && $v_manufacturers_name != '' ){

               $sql = "SELECT man.manufacturers_id

                       FROM ".TABLE_MANUFACTURERS." as man

                       WHERE

                               man.manufacturers_name = '" . $v_manufacturers_name . "'";

               $result = tep_db_query($sql);

               $row =  tep_db_fetch_array($result);

               if ( $row != '' ){

                       foreach( $row as $item ){

                               $v_manufacturer_id = $item;

                       }

               } else {

                       // to add, we need to put stuff in categories and categories_description

                       $sql = "SELECT MAX( manufacturers_id) max FROM ".TABLE_MANUFACTURERS;

                       $result = tep_db_query($sql);

                       $row =  tep_db_fetch_array($result);

                       $max_mfg_id = $row['max']+1;

                       // default the id if there are no manufacturers yet

                       if (!is_numeric($max_mfg_id) ){

                               $max_mfg_id=1;

                       }

 

                       // Uncomment this query if you have an older 2.2 codebase

                       /*

                       $sql = "INSERT INTO ".TABLE_MANUFACTURERS."(

                               manufacturers_id,

                               manufacturers_name,

                               manufacturers_image

                               ) VALUES (

                               $max_mfg_id,

                               '$v_manufacturers_name',

                               '$default_image_manufacturer'

                               )";

                       */

 

                       // Comment this query out if you have an older 2.2 codebase

                       $sql = "INSERT INTO ".TABLE_MANUFACTURERS."(

                               manufacturers_id,

                               manufacturers_name,

                               manufacturers_image,

                               date_added,

                               last_modified

                               ) VALUES (

                               $max_mfg_id,

                               '$v_manufacturers_name',

                               '$default_image_manufacturer',

                               CURRENT_TIMESTAMP,

                               CURRENT_TIMESTAMP

                               )";

                       $result = tep_db_query($sql);

                       $v_manufacturer_id = $max_mfg_id;

               }

       }

       // if the categories names are set then try to update them

       if ( isset($v_categories_name_1)){

               // start from the highest possible category and work our way down from the parent

               $v_ca

Share this post


Link to post
Share on other sites

Hi !

 

EP installed just fine and it'll download the smaller category file into my /temp folder - but - I can't get it to download anything else - the "complete" one, for instance... I have the php.ini set as 20 minutes for the maximum allowable time. Using IE, I get 5 bars which is about half-way through done and then it seems to conk out and I get the 'page cannot be displayed error" in my browser. Checking the server, no new file :(

 

I have a few thousand products with attributes, the database was originally built or made with/from the MS1 version of OSC I think, though I even think it may have been even earlier version originally. I decided it best to modify that database than start all fresh. Now, attributes... alot of attributes, though I'm desiring to modify that to have more products instead... This thread has a strong attribute flair to it - SHOULD I DOWNLOAD VJ's attribute files and add that and see if that solves my download problem ? Or, is my problem first to be solved with just getting it to download all the files (not just the small one) ?

 

I've upgraded the database to MS2 when I installed the MS2 software (that file according to instructions) and therefore, have the MS2 shop working fine with that database in every other conceivable way. It's not live yet, am adding contribs and really need a friendly way to edit the products and add new ones, etc.

 

Nearly all the contribs I've added went smoothly except a few big monster ones that require tons of file changes (WishList and Purchase without Account)... I tried them but half way through decided too many changes as well as looked like would obviously conflict with other contribs that I had installed and were keeping forever :o).

 

Please help!!

Share this post


Link to post
Share on other sites
Guest

double check the database table to make sure the group id is not an autoincrement field

Share this post


Link to post
Share on other sites
Guest

Is there a way to have my products_id match my products_model?

 

For example I want them to be both 219997.

 

 

Thank You

Share this post


Link to post
Share on other sites
double check the database table to make sure the group id is not an autoincrement field

 

 

Hmmm... Not sure .... here is the DB for the products_groups

 

-- 
-- Table structure for table `products_groups`
-- 

CREATE TABLE `products_groups` (
 `customers_group_id` int(11) NOT NULL default '0',
 `customers_group_price` decimal(15,4) NOT NULL default '0.0000',
 `products_id` int(11) NOT NULL default '0',
 `products_price` decimal(15,4) NOT NULL default '0.0000',
 PRIMARY KEY  (`customers_group_id`)
) TYPE=MyISAM;

-- 
-- Dumping data for table `products_groups`
-- 

INSERT INTO `products_groups` VALUES (1, 185.0000, 31, 299.0654);
INSERT INTO `products_groups` VALUES (2, 99.9900, 31, 100.0000);
INSERT INTO `products_groups` VALUES (3, 49.9900, 31, 100.0000);

Share this post


Link to post
Share on other sites

Mibble,

 

Were you referring to nperiera's post or to mine?

 

If so, I don't seem to have that table... where would it be using phpmyadmin?

I don't see group_id anywhere offhand by looking at properties underneath specific tables...

Share this post


Link to post
Share on other sites

Here is another example:

 

When executing the "Download Model/Price/Qty tab-delimited .txt file to edit

" in the Easy Populate (which runs the priceqty dltype function), I get the pricing for the different groups.

 

Where the problem relies is when I try to update the DB using Easy Populate "Upload EP File". The screen comes back and gives me

File uploaded. 
Temporary filename: /tmp/phpgM0x1y
User filename: priceqty.txt
Size: 1079
| MG200MMS | 299.99 | 32 | 185 | 1 Updated
1062 - Duplicate entry '1' for key 1

INSERT INTO products_groups VALUES ( 1, 185, 1, 299.99 )

[TEP STOP]

 

What does this realy mean?

 

From what I can understand, and I am far from being a PHP wiz, is that there should be some kind of function running during an upload that looks at the "table_products_groups" and looks to see if there is an entry at "v_customer_price_1 and v_customer_group_id_1" and if there is, it should delete it from the table and insert the info in the uploaded file to the table.

 

Am I far away from the actual issue?

Share this post


Link to post
Share on other sites

Is the the actual thread for the EP contribution or no? Where are the questions and answers regarding the regular non-attribute installation issues?

 

Cheers...

Share this post


Link to post
Share on other sites
Guest

the only way to have them match is from the origilan load of the database, from it being totally empty and the counters reset.

 

Is there a way to have my products_id match my products_model?

 

For example I want them to be both 219997.

Thank You

Share this post


Link to post
Share on other sites
Guest
Here is another example:

easy populate does not delete any data, it only uploads what you tell it to.  if you want to delete data prior to uploading, you must do so.

 

 

 

 

When executing the "Download Model/Price/Qty tab-delimited .txt file to edit

" in the Easy Populate (which runs the priceqty dltype function), I get the pricing for the different groups.

 

Where the problem relies is when I try to update the DB using Easy Populate "Upload EP File". The screen comes back and gives me

File uploaded. 
Temporary filename: /tmp/phpgM0x1y
User filename: priceqty.txt
Size: 1079
| MG200MMS | 299.99 | 32 | 185 | 1 Updated
1062 - Duplicate entry '1' for key 1

INSERT INTO products_groups VALUES ( 1, 185, 1, 299.99 )

[TEP STOP]

 

What does this realy mean?

 

From what I can understand, and I am far from being a PHP wiz, is that there should be some kind of function running during an upload that looks at the "table_products_groups" and looks to see if there is an entry at "v_customer_price_1 and v_customer_group_id_1" and if there is, it should delete it from the table and insert the info in the uploaded file to the table.

 

Am I far away from the actual issue?

Share this post


Link to post
Share on other sites
Guest

how many products attributes do you have? you may want to turn off the attribute download in the easypopulate.php file.

 

 

Hi !

 

EP installed just fine and it'll download the smaller category file into my /temp folder - but - I can't get it to download anything else - the "complete" one, for instance...  I have the php.ini set as 20 minutes for the maximum allowable time.  Using IE, I get 5 bars which is about half-way through done and then it seems to conk out and I get the 'page cannot be displayed error" in my browser.  Checking the server, no new file :(

 

I have a few thousand products with attributes, the database was originally built or made with/from the MS1 version of OSC I think, though I even think it may have been even earlier version originally.  I decided it best to modify that database than start all fresh.  Now, attributes... alot of attributes, though I'm desiring to modify that to have more products instead... This thread has a strong attribute flair to it - SHOULD I DOWNLOAD VJ's attribute files and add that and see if that solves my download problem ?  Or, is my problem first to be solved with just getting it to download all the files (not just the small one) ?

 

I've upgraded the database to MS2 when I installed the MS2 software (that file according to instructions) and therefore, have the MS2 shop working fine with that database in every other conceivable way.  It's not live yet, am adding contribs and really need a friendly way to edit the products and add new ones, etc. 

 

Nearly all the contribs I've added went smoothly except a few big monster ones that require tons of file changes (WishList and Purchase without Account)... I tried them but half way through decided too many changes as well as looked like would obviously conflict with other contribs that I had installed and were keeping forever :o).

 

Please help!!

Share this post


Link to post
Share on other sites

Hi John,

Thank you, that worked to get things rolling. I downloaded and then reuploaded, which went fine. So I then modified the txt file by adding model numbers to products that didn't have any, added some products, changed some model numbers on others.

 

Funny thing is, I uploaded that new file, but noticed that i have duplicates (2 or 3 instead of one of each product, well, not sure if all products, but some duplication overall). Well, like if i changed the model number, it created that one but kept the old one and make a copy of the old one. In some case just one copy.

 

I found the post with someone here who was instructed to get rid of the " and ' in his file... using the &amp - I will try that... will get rid of those characters entirely...

 

Question, does the model number have to be all numbers or can it be like dg2238-pt2 for example? all mine have letters first, then numbers, with dashes, often...

 

Should i change the modifed file I just uploaded which caused dups and simply re-upload that... would that reverse the dups? or should i restore my backup database and then reupload a fixed changed txt file?

 

what'd be the easiest way to do this?

 

Thank you...

This will be extremely helpful contrib to have found... :o)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×