Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Easy Populate & Products Attributes


VJ

Recommended Posts

THANK YOU pixclinic!! :D

 

You were right! Just to make sure again...

 

v_categories_name_1_ <== I looked at the header of my file and finally see a trailing space!! I was sure it was ok...

 

Next thing to make sure, if it is possible, is to lock the header fields in excel or filemaker... Probably someone changed it by mistake.

 

Thanks again! I'm so happy!

 

Plascual

 

You're welcome. It's amazing teh number of people being sure that they didn't do anything wrong in this OsCommerce world ;)

Link to comment
Share on other sites

Hello i need your help .

 

Few days ago the hosting company decided to change the server.

 

The personnel of the hosting company did some changes and as a result the contributioν EasyPopulate has problems that never before had.

 

To be more precise.

 

When i try to split a file i receive the message "The page not found"

 

 

Do you have what may be the cause?

 

It worked absolutely perfect before the changes to the server!!!!

Link to comment
Share on other sites

thank you to everyone for the prior help....

 

all seems to be working just fine now, except that when i enter in a price on taxable goods, it places that price in the "Gross Price" area instead of it being the price before taxes. any idea how to fix this ?

 

 

thank you in advance

Link to comment
Share on other sites

thank you to everyone for the prior help....

 

all seems to be working just fine now, except that when i enter in a price on taxable goods, it places that price in the "Gross Price" area instead of it being the price before taxes. any idea how to fix this ?

thank you in advance

 

there is a tax setting at teh begining of your easy populate file, in the configuration section

Link to comment
Share on other sites

there is a tax setting at teh begining of your easy populate file, in the configuration section

 

 

Yes I see that, what should it be set to ?

 

Here is what I currently have in place....

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

Link to comment
Share on other sites

Yes I see that, what should it be set to ?

 

Here is what I currently have in place....

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

 

Try 0, and if you don't get the expected results, put 1, that's shoudn't take too long to get an answer :-)

Edited by pixclinic
Link to comment
Share on other sites

Try 0, and if you don't get the expected results, put 1, that's shoudn't take too long to get an answer :-)

 

 

that worked perfectly pixclinic, just replaced "true" with "0" and it took correctly.

 

 

thank you very much !!

Link to comment
Share on other sites

Can someone give me some advice about the attribute part of this? I have several colors, sizes, and other defined as attributes. Most of my products don't use attributes, and some use a couple.

 

The problem is I need to add some new products with attributes and all other info, and when I download a "complete" file, it lists every attribute as a series of like 3 or 4 columns, so that the spreadsheet maxes out long before the attributes do. How do people with hundreds of attributes use this?

Link to comment
Share on other sites

Ok, call me dumb but... I've been searching and searching through easypopulate.php for the $tempdir setting but can't find it. I am using Dreamweaver and the search function in it cannot find it either. Can someone tell me what line it's on? I'm using 2.9.

Link to comment
Share on other sites

Hello i would like to ask you about PHP timeout issues.

 

I am trying to split a file which is 1.060kb

 

but after i click on split button i receive

 

the message Page not Found.

 

 

When i tried to split a smaller file than 1.060kb

 

i had no problem.

 

The split function worked great.

 

Do you think that i run into PHP timeout issues?

 

Do you think that i have to ask my hosting company make some changes in php.ini

 

Do i have to change the maximum time that a script runs?

 

What do you Think?

Link to comment
Share on other sites

Hi,

 

sorry for the perhaps very basic question...

 

I'm trying to use Easypopulate with Seperate Pricing Per Customer, but I can't export the multiple prices!

 

I've uncommented the extra lines as per manual, but it seems to ignore it.

 

I'm trying this with version 2.76c ...

 

Could anyone show me their EP code that successfully works with SPPC? and perhaps give me some hints of other contribs I need to install?

Link to comment
Share on other sites

If you upload a new tab delimited file that does contain exisiting products that are already in your store does it leave the products in your store unchaged or does it delete them?

For instance...if I made a tab delimited file with just one product to add to my DB will it just add the one or erase the rest?

Link to comment
Share on other sites

Ok, call me dumb but... I've been searching and searching through easypopulate.php for the $tempdir setting but can't find it. I am using Dreamweaver and the search function in it cannot find it either. Can someone tell me what line it's on? I'm using 2.9.

 

 

search for

 

$tmpfname = DIR_FS_DOCUMENT_ROOT . EP_TEMP_DIR .

Link to comment
Share on other sites

search for

 

$tmpfname = DIR_FS_DOCUMENT_ROOT . EP_TEMP_DIR .

 

 

Ok, what should that be changed to? I'm still getting the hang of this programming. My store is set up in this directory: public_html/shop/

 

Also, the dir should be called temp still, right? Or am I supposed to call it EP_TEMP_DIR???

Link to comment
Share on other sites

Ok, what should that be changed to? I'm still getting the hang of this programming. My store is set up in this directory: public_html/shop/

 

Also, the dir should be called temp still, right? Or am I supposed to call it EP_TEMP_DIR???

 

Look in your your admin section: your should have an easyppulate panel, and the first line is Temp diretory: this is where you can change your path. No need to go in the code!

Link to comment
Share on other sites

Look in your your admin section: your should have an easyppulate panel, and the first line is Temp diretory: this is where you can change your path. No need to go in the code!

 

 

Where is this? All I have is the Easy Populate tab in the catalog section. It doesn't have anything other than options to upload or download the cat.

 

Forgive me if I'm misunderstanding you. I'm learning here.

Link to comment
Share on other sites

Hi,

 

I'm trying to use EP 2.76c with Seperate Pricing Per Customer (SPPC) Version 4.1.5, but EP isn't exporting the multiple pricing... can you see any problems in my code?

 

 

<?php

 

// Current EP Version

$curver = '2.76c-MS2';

 

/*

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

*/

 

//

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

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

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

// V A R I A B L E S

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

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

 

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

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

//

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

$tempdir = "/catalog/temp/";

$tempdir2 = "/catalog/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 = false;

 

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

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

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

global $modelsize;

$modelsize = 25;

 

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

// Set the v_price_with_tax to

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

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

global $price_with_tax;

$price_with_tax =true;

 

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

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

// set to 1 = replace quotes with escape characters

// set to 0 = no quote replacement

global $replace_quotes;

$replace_quotes = false;

 

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

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

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

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

global $separator;

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

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

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

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

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

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

 

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

// change this if you need more or fewer categories

global $max_categories;

$max_categories = 3; // 7 is default

 

// VJ product attributes begin

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

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

global $products_with_attributes;

$products_with_attributes = true;

 

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

global $products_attributes_stock;

$products_attributes_stock = false;

 

 

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

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

global $attribute_options_select;

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

// VJ product attributes end

 

 

 

 

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

// Froogle configuration variables

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

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

 

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

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

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

global $froogle_product_info_path;

$froogle_product_info_path = "http://www.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',

'v_products_upc'

);

 

//elari check default language_id from configuration table DEFAULT_LANGUAGE

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

if (tep_db_num_rows($epdlanguage_query)) {

$epdlanguage = tep_db_fetch_array($epdlanguage_query);

$epdlanguage_id = $epdlanguage['languages_id'];

$epdlanguage_name = $epdlanguage['name'];

} else {

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

}

 

$langcode = ep_get_languages();

 

if ( $dltype != '' ){

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

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

}

 

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

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

// E N D

// INITIALIZATION

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

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

 

 

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

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

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

// DOWNLOAD FILE

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

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

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

$result = tep_db_query($filelayout_sql);

$row = tep_db_fetch_array($result);

 

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

// default to all headers named like the internal ones

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

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

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

} else {

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

}

//We prepare the table heading with layout values

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

$filestring .= $key . $separator;

}

// now lop off the trailing tab

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

 

// set the type

if ( $dltype == 'froogle' ){

$endofrow = "\n";

} else {

// default to normal end of row

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

}

$filestring .= $endofrow;

 

$num_of_langs = count($langcode);

while ($row){

 

 

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

// build the long full froogle image path

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

// Other froogle defaults go here for now

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

$row['v_froogle_shipping'] = '';

$row['v_froogle_upc'] = '';

$row['v_froogle_color'] = '';

$row['v_froogle_size'] = '';

$row['v_froogle_quantitylevel'] = '';

$row['v_froogle_manufacturer_id'] = '';

$row['v_froogle_exp_date'] = '';

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

$row['v_froogle_delete'] = '';

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

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

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

 

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

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

$lid = $lang['id'];

 

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

$sql2 = "SELECT *

FROM ".TABLE_PRODUCTS_DESCRIPTION."

WHERE

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

language_id = '" . $lid . "'

";

$result2 = tep_db_query($sql2);

$row2 = tep_db_fetch_array($result2);

 

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

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

if ($froogle_SEF_urls){

// if only one language

if ($num_of_langs == 1){

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

} else {

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

}

} else {

if ($num_of_langs == 1){

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

} else {

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

}

}

 

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

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

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

 

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

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

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

 

// support for Linda's Header Controller 2.0 here

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

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

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

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

}

// end support for Header Controller 2.0

}

 

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

 

// start with v_categories_id

// Get the category description

// set the appropriate variable name

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

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

$thecategory_id = $row['v_categories_id'];

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

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

if ($thecategory_id){

$sql2 = "SELECT categories_name

FROM ".TABLE_CATEGORIES_DESCRIPTION."

WHERE

categories_id = " . $thecategory_id . " AND

language_id = " . $epdlanguage_id ;

 

$result2 = tep_db_query($sql2);

$row2 = tep_db_fetch_array($result2);

// only set it if we found something

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

// now get the parent ID if there was one

$sql3 = "SELECT parent_id

FROM ".TABLE_CATEGORIES."

WHERE

categories_id = " . $thecategory_id;

$result3 = tep_db_query($sql3);

$row3 = tep_db_fetch_array($result3);

$theparent_id = $row3['parent_id'];

if ($theparent_id != ''){

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

$thecategory_id = $theparent_id;

} else {

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

$thecategory_id = false;

}

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

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

} else {

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

}

}

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

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

 

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

$newlevel = 1;

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

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

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

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

}

}

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

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

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

$sql2 = "SELECT manufacturers_name

FROM ".TABLE_MANUFACTURERS."

WHERE

manufacturers_id = " . $row['v_manufacturers_id']

;

$result2 = tep_db_query($sql2);

$row2 = tep_db_fetch_array($result2);

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

}

}

 

 

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

 

// VJ product attribs begin

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

$languages = tep_get_languages();

 

$attribute_options_count = 1;

foreach ($attribute_options_array as $attribute_options) {

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

 

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

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

 

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

 

$attribute_options_languages_values = tep_db_query($attribute_options_languages_query);

 

$attribute_options_languages = tep_db_fetch_array($attribute_options_languages_values);

 

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

}

 

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

 

$attribute_values_values = tep_db_query($attribute_values_query);

 

$attribute_values_count = 1;

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

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

 

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

 

$attribute_values_price_values = tep_db_query($attribute_values_price_query);

 

$attribute_values_price = tep_db_fetch_array($attribute_values_price_values);

 

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

 

//// attributes stock add start

if ( $products_attributes_stock == true ) {

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

 

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

$stock_quantity = tep_db_fetch_array($stock_quantity_query);

 

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

}

//// attributes stock add end

 

 

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

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

 

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

 

$attribute_values_languages_values = tep_db_query($attribute_values_languages_query);

 

$attribute_values_languages = tep_db_fetch_array($attribute_values_languages_values);

 

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

}

 

$attribute_values_count++;

}

 

$attribute_options_count++;

}

}

// VJ product attribs end

 

// this is for the separate price per customer module

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

$sql2 = "SELECT

customers_group_price,

customers_group_id

FROM

".TABLE_PRODUCTS_GROUPS."

WHERE

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

ORDER BY

customers_group_id"

;

$result2 = tep_db_query($sql2);

$ll = 1;

$row2 = tep_db_fetch_array($result2);

while( $row2 ){

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

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

$row2 = tep_db_fetch_array($result2);

$ll++;

}

}

if ($dltype == 'froogle'){

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

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

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

$sql2 = "SELECT

specials_new_products_price

FROM

".TABLE_SPECIALS."

WHERE

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

status = 1 and

expires_date < CURRENT_TIMESTAMP

ORDER BY

specials_id DESC"

;

$result2 = tep_db_query($sql2);

$ll = 1;

$row2 = tep_db_fetch_array($result2);

if( $row2 ){

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

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

}

}

 

//elari -

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

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

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

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

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

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

 

 

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

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

$row['v_status'] = $active;

} else {

$row['v_status'] = $inactive;

}

 

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

$therow = '';

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

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

 

$thetext = $row[$key];

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

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

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

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

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

$therow .= $thetext . $separator;

}

 

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

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

 

$filestring .= $therow;

// grab the next row from the db

$row = tep_db_fetch_array($result);

}

 

#$EXPORT_TIME=time();

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

if ($dltype=="froogle"){

$EXPORT_TIME = "FroogleEP" . $EXPORT_TIME;

} else {

$EXPORT_TIME = "EP" . $EXPORT_TIME;

}

 

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

if ($download == 'stream'){

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

// STREAM FILE

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

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

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

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

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

if ($request_type== 'NONSSL'){

header("Pragma: no-cache");

} else {

header("Pragma: ");

}

header("Expires: 0");

echo $filestring;

die();

} else {

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

// PUT FILE IN TEMP DIR

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

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

//unlink($tmpfname);

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

fwrite($fp, $filestring);

fclose($fp);

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

die();

}

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

?>

 

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

<html <?php echo HTML_PARAMS; ?>>

<head>

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

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

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

</head>

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

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

 

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

<tr>

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

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

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

</table></td>

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

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

?>

 

<p class="smallText">

 

<?php

 

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

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

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

// UPLOAD AND INSERT FILE

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

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

 

if ($usrfl){

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

$file = tep_get_uploaded_file('usrfl');

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

echo "<p class=smallText>";

echo "File uploaded. <br>";

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

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

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

 

// get the entire file into an array

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

}

if ($localfile){

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

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

 

$attribute_options_values = tep_db_query($attribute_options_query);

 

$attribute_options_count = 1;

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

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

echo "<p class=smallText>";

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

 

// get the entire file into an array

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

}

 

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

$newreaded = "";

foreach ($readed as $read){

$newreaded .= $read;

}

 

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

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

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

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

 

 

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

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

$lll = 0;

$filelayout = array();

foreach( $theheaders_array as $header ){

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

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

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

}

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

 

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

array_walk($readed, 'walk');

 

}

 

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

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

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

// UPLOAD AND SPLIT FILE

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

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

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

$file = tep_get_uploaded_file('usrfl');

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

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

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

 

//toprow has the field headers

$toprow = fgets($infp,32768);

 

$filecount = 1;

 

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

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

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

fwrite($fp, $toprow);

 

$linecount = 0;

$line = fgets($infp,32768);

while ($line){

// walking the entire file one row at a time

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

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

fwrite($fp, $line);

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

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

$linecount++; // increment our line counter

if ($linecount >= $maxrecs){

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

$linecount = 0; // reset our line counter

// close the existing file and open another;

fclose($fp);

// increment filecount

$filecount++;

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

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

//Open next file name

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

fwrite($fp, $toprow);

}

}

$line=fgets($infp,32768);

}

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

fclose($fp);

fclose($infp);

 

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

 

}

 

?>

</p>

 

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

<tr>

<td width="75%">

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

<p>

<div align = "left">

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

<p>

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

<p></p>

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

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

<br>

</p>

</div>

 

</form>

 

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

<p>

<div align = "left">

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

<p>

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

<p></p>

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

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

<br>

</p>

</div>

 

</form>

 

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

<p>

<div align = "left">

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

<p class="smallText">

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

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

<br>

</p>

</div>

 

</form>

 

 

 

 

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

 

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

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

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

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

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

 

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

<?php

if ($products_with_attributes == true) {

?>

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

<?php

}

?>

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

 

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

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

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

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

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

 

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

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

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

 

</td>

</tr>

</table>

</td>

</tr>

</table>

 

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

 

<p> </p>

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

</p></body>

</html>

 

<?php

 

function ep_get_languages() {

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

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

$ll =1;

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

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

$ep_languages_array[$ll++] = array(

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

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

);

}

return $ep_languages_array;

};

 

function tep_get_tax_class_rate($tax_class_id) {

$tax_multiplier = 0;

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

if (tep_db_num_rows($tax_query)) {

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

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

}

}

return $tax_multiplier;

};

 

function tep_get_tax_title_class_id($tax_class_title) {

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

$tax_class_array = tep_db_fetch_array($classes_query);

$tax_class_id = $tax_class_array['tax_class_id'];

return $tax_class_id ;

}

 

function print_el( $item2 ) {

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

};

 

function print_el1( $item2 ) {

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

};

function ep_create_filelayout($dltype){

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

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

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

switch( $dltype ){

case 'full':

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

$iii = 0;

$filelayout = array(

'v_products_model' => $iii++,

'v_products_image' => $iii++,

);

 

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

$l_id = $lang['id'];

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

// Linda's Header Tag Controller 2.0

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

$filelayout = array_merge($filelayout , array(

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

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

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

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

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

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

));

}

 

 

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

 

// VJ product attribs begin

$header_array = array(

'v_products_price' => $iii++,

'v_products_weight' => $iii++,

'v_date_avail' => $iii++,

'v_date_added' => $iii++,

'v_products_quantity' => $iii++,

);

 

$languages = tep_get_languages();

 

global $attribute_options_array;

 

$attribute_options_count = 1;

foreach ($attribute_options_array as $attribute_options_values) {

$key1 = 'v_attribute_options_id_' . $attribute_options_count;

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

 

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

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

 

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

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

}

 

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

 

$attribute_values_values = tep_db_query($attribute_values_query);

 

$attribute_values_count = 1;

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

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

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

 

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

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

 

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

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

}

 

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

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

 

//// attributes stock add start

if ( $products_attributes_stock == true ) {

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

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

}

//// attributes stock add end

 

$attribute_values_count++;

}

 

$attribute_options_count++;

}

 

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

 

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

// VJ product attribs end

 

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

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

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

}

 

$filelayout = array_merge($filelayout, array(

'v_tax_class_title' => $iii++,

'v_status' => $iii++,

));

 

$filelayout_sql = "SELECT

p.products_id as v_products_id,

p.products_model as v_products_model,

p.products_image as v_products_image,

p.products_price as v_products_price,

p.products_weight as v_products_weight,

p.products_date_available as v_date_avail,

p.products_date_added as v_date_added,

p.products_tax_class_id as v_tax_class_id,

p.products_quantity as v_products_quantity,

p.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++,

'v_froogle_manufacturer_id' => $iii++,

'v_froogle_exp_date' => $iii++,

'v_froogle_product_type' => $iii++,

'v_froogle_delete' => $iii++,

'v_froogle_currency' => $iii++,

));

$iii=0;

$fileheaders = array(

'product_url' => $iii++,

'name' => $iii++,

'description' => $iii++,

'price' => $iii++,

'image_url' => $iii++,

'category' => $iii++,

'offer_id' => $iii++,

'instock' => $iii++,

'shipping' => $iii++,

'brand' => $iii++,

'upc' => $iii++,

'color' => $iii++,

'size' => $iii++,

'quantity' => $iii++,

'product_id' => $iii++,

'manufacturer_id' => $iii++,

'exp_date' => $iii++,

'product_type' => $iii++,

'delete' => $iii++,

'currency' => $iii++,

);

$filelayout_sql = "SELECT

p.products_id as v_products_id,

p.products_model as v_products_model,

p.products_image as v_products_image,

p.products_price as v_products_price,

p.products_weight as v_products_weight,

p.products_date_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,

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;

 

// VJ product attributes begin

case 'attrib':

$iii = 0;

$filelayout = array(

'v_products_model' => $iii++

);

 

$header_array = array();

 

$languages = tep_get_languages();

 

global $attribute_options_array;

 

$attribute_options_count = 1;

foreach ($attribute_options_array as $attribute_options_values) {

$key1 = 'v_attribute_options_id_' . $attribute_options_count;

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

 

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

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

 

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

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

}

 

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

 

$attribute_values_values = tep_db_query($attribute_values_query);

 

$attribute_values_count = 1;

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

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

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

 

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

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

 

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

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

}

 

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

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

 

//// attributes stock add start

if ( $products_attributes_stock == true ) {

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

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

}

//// attributes stock add end

 

$attribute_values_count++;

}

 

$attribute_options_count++;

}

 

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

 

$filelayout_sql = "SELECT

p.products_id as v_products_id,

p.products_model as v_products_model

FROM

".TABLE_PRODUCTS." as p

";

 

break;

// VJ product attributes end

}

$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 charact

Link to comment
Share on other sites

Where is this? All I have is the Easy Populate tab in the catalog section. It doesn't have anything other than options to upload or download the cat.

 

Forgive me if I'm misunderstanding you. I'm learning here.

 

That's OK, I'm learninh here too :-)

If you installed version 9 correctly, you should have a configuration>easypopulate link actually, the 2.9 version is the only one that has admin SETTINGS, not just a page that import/exports

 

this series of settings looks like the "my store" or the "maximum values" with an edit save boutton on the right

 

for example, my settings are:

 

Temp Directory temp/

Set Time Limt false

Max Split Records 300

Default Category Image

Default Manufacturer Image

Default Products Image

Zero Qty Behavior false

Price Includes Tax false

Replace Quotes true

Delimiter

Maximum Categories 7

Products With Attributes false

Froogle Product Info URL

Froogle Images URL

Froogle SEF URLs false

Value of "v_status" field for Active product`s Active

Value of "v_status" field for InActive product`s InActive

Value for "v_status" field to Delete product Delete

Use Easypopulate Attributes Optimization? false

Prevent EP from duplicate products in different subcategories? true

Activate support for separate prices per customer module? false

Activate support for Quantity Tracking Professional? false

Temp Directory

 

if you don't see that link, be sure that you ran the sql file that was with the package, that injects in your mysql the proper data that appears in that section.

Link to comment
Share on other sites

That's OK, I'm learninh here too :-)

If you installed version 9 correctly, you should have a configuration>easypopulate link actually, the 2.9 version is the only one that has admin SETTINGS, not just a page that import/exports

 

this series of settings looks like the "my store" or the "maximum values" with an edit save boutton on the right

 

for example, my settings are:

 

Temp Directory temp/

Set Time Limt false

Max Split Records 300

Default Category Image

Default Manufacturer Image

Default Products Image

Zero Qty Behavior false

Price Includes Tax false

Replace Quotes true

Delimiter

Maximum Categories 7

Products With Attributes false

Froogle Product Info URL

Froogle Images URL

Froogle SEF URLs false

Value of "v_status" field for Active product`s Active

Value of "v_status" field for InActive product`s InActive

Value for "v_status" field to Delete product Delete

Use Easypopulate Attributes Optimization? false

Prevent EP from duplicate products in different subcategories? true

Activate support for separate prices per customer module? false

Activate support for Quantity Tracking Professional? false

Temp Directory

 

if you don't see that link, be sure that you ran the sql file that was with the package, that injects in your mysql the proper data that appears in that section.

 

 

Ummm...I didn't get a sql file in my package. Nor do I have the link...hmmm...guess I need to start over huh? LOL

Link to comment
Share on other sites

Sorry about all the replies.It won't let me delete them after I've figured something out. Anyway...I was trying to use an xls file instead of a txt. I forgot to save it as a delimited file. But here's the thing. I saved it as TAB delimited and tried to insert it into the db, but I keep getting the following:

 

 

***********************************************************

 

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

SELECT p.products_id as v_products_id, p.products_model as v_products_model, p.products_image as v_products_image, p.products_price as v_products_price, p.products_price1_qty as v_products_price1_qty, p.products_price1 as v_products_price1, p.products_price2_qty as v_products_price2_qty, p.products_price2 as v_products_price2, p.products_price3_qty as v_products_price3_qty, p.products_price3 as v_products_price3, p.products_price4_qty as v_products_price4_qty, p.products_price4 as v_products_price4, p.products_price5_qty as v_products_price5_qty, p.products_price5 as v_products_price5, p.products_price6_qty as v_products_price6_qty, p.products_price6 as v_products_price6, p.products_price7_qty as v_products_price7_qty, p.products_price7 as v_products_price7, p.products_price8_qty as v_products_price8_qty, p.products_price8 as v_products_price8, 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, subc.categories_id as v_categories_id, p.products_status as v_status FROM products as p, categories as subc, products_to_categories as ptoc WHERE p.products_id = ptoc.products_id AND ptoc.categories_id = subc.categories_id

[TEP STOP]

 

**********************************************************

 

I don't know what that means. I used TAB as the manual says that's the default. Should I change the setting in the configuration? If so, what should I set it to? I'm sorry guys, I really don't know enough about this. I'm learning as I go...

Link to comment
Share on other sites

Let me try this another way...the store's opening in a couple weeks and I'm desperate! I haven't really created too many attributes yet. There is COLOR and SIZE so far. I have about 20 colors listed. Sizes I have S, M, L, etc. as well as a range of numbers for sizes that cover men (32, 34...) women (2, 4, 6...) and shoes. So, right now about 40-50 values.

 

If I tell Easy Populate to include attributes (which I assume I need to in order to then add new products at the bottom of the spreadsheet and send them back with attributes), instead of having maybe 30 columns of Attribute 1, Attribute 1 Value, Attribute 1 Price and filliing in the attribute that that particular row (item) uses, it tries to list EVERY attribute. With two languages, that is more than 5 columns per attribute, so it gives up at something like column IE, or 256 columns.

 

How do I use this then? I'm sure most up and running stores have more values defined in attributes than I do.

Link to comment
Share on other sites

Sorry about all the replies.It won't let me delete them after I've figured something out. Anyway...I was trying to use an xls file instead of a txt. I forgot to save it as a delimited file. But here's the thing. I saved it as TAB delimited and tried to insert it into the db, but I keep getting the following:

***********************************************************

 

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

SELECT p.products_id as v_products_id, p.products_model as v_products_model, p.products_image as v_products_image, p.products_price as v_products_price, p.products_price1_qty as v_products_price1_qty, p.products_price1 as v_products_price1, p.products_price2_qty as v_products_price2_qty, p.products_price2 as v_products_price2, p.products_price3_qty as v_products_price3_qty, p.products_price3 as v_products_price3, p.products_price4_qty as v_products_price4_qty, p.products_price4 as v_products_price4, p.products_price5_qty as v_products_price5_qty, p.products_price5 as v_products_price5, p.products_price6_qty as v_products_price6_qty, p.products_price6 as v_products_price6, p.products_price7_qty as v_products_price7_qty, p.products_price7 as v_products_price7, p.products_price8_qty as v_products_price8_qty, p.products_price8 as v_products_price8, 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, subc.categories_id as v_categories_id, p.products_status as v_status FROM products as p, categories as subc, products_to_categories as ptoc WHERE p.products_id = ptoc.products_id AND ptoc.categories_id = subc.categories_id

[TEP STOP]

 

**********************************************************

 

 

 

Check that the MOD price quantity discount in installed correctly (I'm suspecting you also forgot to inject the sql file that came with that mod )

Link to comment
Share on other sites

I'm having a little trouble with Easy Populate (2.76c-MS2) too.

 

First, I installed the Add Fields contribution (several times), following the instuctions VERY carefully.

 

The file exports fine, but, when I go to import the editted file, I get the following

 

Easy Populate 2.76c-MS2 - Default Language : English(1) 

File uploaded. 
Temporary filename: /tmp/phpQ6JBvW
User filename: Inventory1.txt
Size: 45403
| 8865 | | 8865 | IC,CMOS,8 | | 3.99 | 0.05 | 0000-00-00 | | 1 | various | Parts | Integrated | Other Seri | GST/HST/PS | Active | KGS | CM | 2 | 1 | 0.5 | 0 Updated
| 9216 92 | 9636 96 | 9639 96 | 40001 4 | 40002 4 | 40007 4 | 40008 4 | 40011 4 | 40012 4 | 40013 4 | 40015 4 | 40016 4 | 40017 4 | 40020 4 | 40022 4 | 40023 4 | 40024 4 | 40025 4 | 40028 4 | 40030 4 | 40040 4 | 40042 4 | 40043 4 | 40044 4 | 40046 4 | 40050 4 | 40052 4 | 40053 4 | 40066 4 | 40069 4 | 40082 4 | 40099 4 | 40106 4 | 45003 4 | 45011 4 | 45017 4 | 45028 4 | 45058 4 | 74000 7 | 74002 7 | 74004 7 | 74006 7 | 74007 7 | 74008 7 | 74010 7 | 74011 7 | 74014 7 | 74016 7 | 74017 7 | 74025 7 | 74028 7 | 74030 7 | 74032 7 | 74037 7 | 74038 7 | 74040 7 | 74042 7 | 74046 7 | 74047 7 | 74048 7 | 74053 7 | 74054 7 | 74074 7 | 74076 7 | 74086 7 | 74090 7 | 74093 7 | 74107 7 | 74112 7 | 74116 7 | 74121 7 | 74123 7 | 74143 7 | 74148 7 | 74150 7 | 74150 7 | 74151 7 | 74166 7 | 74175 7 | 74191 7 | 74192 7 | 74193 7 | 74367 7 | 74368 7 | 75462 7 | 75463 7 | 75472 7 | 75477 7 |

 

 

No errors at all, but, it will only update the first item. If I go into the file I'm uploading, and delete the first entry, it will install the next item correctly as a new product and will continue adding entries as new products as long as I delete the previous item in the upload file, but, just the first one.

 

If you'll notice on the items that don't get uploaded (this is a partial list, but all the other items look the same) the first or first and second numbers of the item are duplicated after a space (depending on the item number length).

 

I've gone through the process, from scratch, of installing EP and the Add Fields contributions, several times and it's becoming somewhat annoying. The result is always exactly the same.

 

Anyone a) seen this before and b) know how to fix it?

 

Thank you.

No Good Deed EVER Goes Unpunished

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