Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

VJ

Easy Populate & Products Attributes

Recommended Posts

Guest

when you create the product, it goes into the database as a normal product.

then use your easy populate menu to download a text file.

 

you should open the docs which come with easy populate.

Share this post


Link to post
Share on other sites
when you create the product, it goes into the database as a normal product.

then use your easy populate menu to download a text file.

 

you should open the docs which come with easy populate.

where is the database to get that file?

 

I might be using a different version of EP i dont have an option to download a text file with EP menu, only upload.

 

As I understand i can download this file and see how the categories are set up and then follow the format to create a file upload into DB with all of my products? do i understand you correctly?

Share this post


Link to post
Share on other sites

John,

 

I tried to download the categories in .txt from EP and it did not let me, gave me this error:

1054 - Unknown column 'p.products_mediumimage' 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_mediumimage as v_products_mimage, p.products_largeimage as v_products_bimage, 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 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]

 

So i went into EP.php and took out two fields:

 

p.products_mediumimage as v_products_mimage,

p.products_largeimage as v_products_bimage,

 

After that it let me download the file.

 

I changed the price in one of the products and saved it as .txt (tab) to see if anychanges will occur. Tryed to upload and it gave me this error:

 

 

File uploaded.

Temporary filename: C:\Program Files\EasyPHP1-7\tmp\php4F.tmp

User filename: try3.txt

Size: 81220

1054 - Unknown column 'p.products_mediumimage' 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_mediumimage as v_products_mimage, p.products_largeimage as v_products_bimage, 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 products as p, categories as subc, products_to_categories as ptoc WHERE p.products_id = ptoc.products_id AND p.products_model = 'MG200MMS' AND ptoc.categories_id = subc.categories_id

 

I tried to upload with a few combinations:

 

1. added back the fields i eraised earlier (still same error)

2. Eraised the columns in .txt file (still same error)

v_products_mimage

v_products_bimage

 

3. eraised the columns:

v_products_mimage

v_products_bimage

 

and eraised the fields:

p.products_mediumimage as v_products_mimage,

p.products_largeimage as v_products_bimage,

 

still same error....

 

 

I know it might be silly but for me it is trial and error... i solved some problems this way.

 

This time it didnt....

 

help me if you can.

 

 

Thanks.

 

<_<

Share this post


Link to post
Share on other sites

Sorry I fixed the earlier problem. ( i had to get rid of those fileds throughout the EP.php)

 

so not i changed the price and i get this.

 

File uploaded.

Temporary filename: C:\Program Files\EasyPHP1-7\tmp\php54.tmp

User filename: try3.txt

Size: 81219

| MG200MMS | matrox/mg2 | Matrox G20 | Reinforcin | www.matrox | Matrox G20 | Unterst?tz | www.matrox | Matrox G20 | Reinforcin | www.matrox | 33.99 | 23 | 0000-00-00 | 6/28/2004 | 32 | 1 | Color | Farbe | Color | 2 | Size | Gr??e | Talla | 3 | Model | Modell | Modelo | 5 | 0 | Value | Value Ausg | Value | 6 | 100 | Premium | Premium Au | Premium | 7 | | Deluxe | Deluxe Aus | Deluxe | 8 | | PS/2 | PS/2 Ansch | PS/2 | 9 | | USB | USB Anschl | USB | 4 | Memory | Speicher | Memoria | 1 | 0 | 4 mb | 4 MB | 4 mb | 2 | 50 | 8 mb | 8 MB | 8 mb | 3 | 70 | 16 mb | 16 MB | 16 mb | 4 | | 32 mb | 32 MB | 32 mb | 5 | Version | Version | Version | 10 | | Download: | Download: | Download: | 13 | | Box: Windo | Box: Windo | Box: Windo | Matrox | Hardware | Graphics C | | Taxable Go | Active Updated

1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE products SET products_price="33.99" ,product

 

UPDATE products SET products_price="33.99" ,products_image="matrox/mg200mms.gif", products_weight="23", products_tax_class_id="1", products_date_available= "0000-00-00 00:00:00", products_date_added= "6/28/2004 12:58", products_last_modified=CURRENT_TIMESTAMP , products_quantity="32" ,manufacturers_id=1 , products_status=1 WHERE (products_id = "1")UPDATE products SET products_price="33.99" ,products_image="matrox/mg200mms.gif", products_weight="23", products_tax_class_id="1", products_date_available= "0000-00-00 00:00:00", products_date_added= "6/28/2004 12:58", products_last_modified=CURRENT_TIMESTAMP , products_quantity="32" ,manufacturers_id=1 , products_status=1 WHERE (products_id = "1")

 

 

 

what could be the problem?

Share this post


Link to post
Share on other sites
Guest

it sounds like you modified the easy populate file from the original. copy a generic easypopulate.php file and then download and see what happens. do not make any changes to it.

Share this post


Link to post
Share on other sites

i get this when i try to download the "Download Complete tab-delimited .txt file to edit"

 

1054 - Unknown column 'p.products_mediumimage' 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_mediumimage as v_products_mimage, p.products_largeimage as v_products_bimage, 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 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]

Share this post


Link to post
Share on other sites

NEED Help to properly add "products_retail_price" & products_cost" fields to easy populate.

 

I followed the instructions for this from http://www.oscommerce.com/community/contributions,1717

 

However when I upload my data the price is being uploaded under the images column and many other columns are messed up as well.

 

Could someone please help me add these fields to easypopulate.php so that they import and export correctly. The columns are not matching up properly.

 

Any help would be most appreciated. I will pay for work if need be.

 

Thank you

Edited by magicproshop

Share this post


Link to post
Share on other sites
NEED Help to properly add "products_retail_price" & products_cost" fields to easy populate.

 

I followed the instructions for this from http://www.oscommerce.com/community/contributions,1717

 

However when I upload my data the price is being uploaded under the images column and many other columns are messed up as well.

 

Could someone please help me add these fields to easypopulate.php so that they import and export correctly. The columns are not matching up properly.

 

Any help would be most appreciated. I will pay for work if need be.

 

Thank you

just search for "New Fields with Easy Populate" in contributions.... gives you step by step instructions on how to add fields properly.

 

hope that helps.

Share this post


Link to post
Share on other sites

John,

 

i found my problem! thanks for the help! next time before i post i should spend some time playing around with it. :D

Share this post


Link to post
Share on other sites

HAKAPAT,

 

I have used that contribution to to install the new fields but I am having problems with the columns matching up.

 

For example, the image field is being populated with the price field data. Anyone know how to fix it?

Share this post


Link to post
Share on other sites
HAKAPAT,

 

I have used that contribution to to install the new fields but I am having problems with the columns matching up.

 

For example, the image field is being populated with the price field data. Anyone know how to fix it?

looks like the order of fields is the problem... make sure they are in correct order.

 

meaning in the file uploaded and in EP.

 

as i read the order is important maybe i am mistaken... <_<

Share this post


Link to post
Share on other sites
Guest

use this as an example, this is a working ep file with additional fields, i have move fields in the database but some i did not want to download.

 

you can see where i have added additional fields.

<?php

 

// Current EP Version

$curver = '2.72-MS2';

 

/*

 $Id: easypopulate.php,v 2.72 2003/12/28 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 = "/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 = 15;

 

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

 

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

 

 

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

// 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_categories_id',

'v_products_price',

'v_products_quantity',

'v_products_weight',

'v_dvd_star',

'v_dvd_director',

'v_dvd_release_date',

'v_dvd_type',

'v_dvd_features',

'v_dvd_studio',

'v_dvd_categories',

'v_dvd_movie_length',

'v_dvd_also_available',

'v_products_bimage',

'v_products_subimage1',

'v_products_bsubimage1',

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

);

//       $new_fields_dvd = ", p.dvd_star, p.dvd_director, p.dvd_release_date, p.dvd_type, p.dvd_features, p.dvd_categories, p.dvd_studio, p.dvd_movie_length, p.dvd_also_available";

//     $new_fields_mo_pics=", p.products_bimage, p.products_subimage1, p.products_subimage2, p.products_subimage3, p.products_subimage4, p.products_subimage5, p.products_subimage6";

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

 

 

 // 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");

// 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++,

  'v_dvd_star'   => $iii++,

  'v_dvd_director'  => $iii++,

  'v_dvd_release_date' => $iii++,

  'v_dvd_type'   => $iii++,

  'v_dvd_features'  => $iii++,

  'v_dvd_studio'   => $iii++,

  'v_dvd_categories'  => $iii++,

  'v_dvd_movie_length' => $iii++,

  'v_dvd_also_available' => $iii++,

  'v_products_bimage'  => $iii++,

  'v_products_subimage1' => $iii++,

  'v_products_bsubimage1' => $iii++,

  );

 

  $languages = tep_get_languages();

 

     global $attribute_options_array;

 

     $attribute_options_count = 1;

     foreach ($attribute_options_array as $attribute_options_values) {

   $key1 = 'v_attribute_options_id_' . $attribute_options_count;

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

 

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

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

 

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

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

   }

 

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

 

   $attribute_values_values = tep_db_query($attribute_values_query);

 

   $attribute_values_count = 1;

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

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

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

 

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

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

 

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

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

 

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

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

    }

 

    $attribute_values_count++;

   }

 

   $attribute_options_count++;

    }

 

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

 

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

   // VJ product attribs end

 

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

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

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

 }

 

 $filelayout = array_merge($filelayout, array(

  'v_tax_class_title'  => $iii++,

  'v_status'   => $iii++,

  ));

 

 $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.dvd_star as v_dvd_star,

  p.dvd_director as v_dvd_director,

  p.dvd_release_date as v_dvd_release_date,

  p.dvd_type as v_dvd_type,

  p.dvd_features as v_dvd_features,

  p.dvd_studio as v_dvd_studio,

  p.dvd_categories as v_dvd_categories,

  p.dvd_movie_length as v_dvd_movie_length,

  p.dvd_also_available as v_dvd_also_available,

  p.products_bimage as v_products_bimage,

  p.products_subimage1 as v_products_subimage1,

  p.products_bsubimage1 as v_products_bsubimage1,

  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'

Share this post


Link to post
Share on other sites
HAKAPAT,

 

I have used that contribution to to install the new fields but I am having problems with the columns matching up. 

 

For example,  the image field is being populated with the price field data.  Anyone know how to fix it?

looks like the order of fields is the problem... make sure they are in correct order.

 

meaning in the file uploaded and in EP.

 

as i read the order is important maybe i am mistaken... <_<

HAKAPAT,

 

Yes, that is preciesly the problem, I just don't know how to match everything up. Do you have any suggestions or would you be willing to help. You can PM me if you are interested in helping.

 

Thanks

Share this post


Link to post
Share on other sites
Guest

read the post a few threads up for an example file of how/where i added additional fields. this file works.

Share this post


Link to post
Share on other sites

I have solved one problem thanks to your help :D

 

I got the file to upload, all the products show up in Admin, everyhtng is cool, except when I choose a category, i get thie error:

 

Parse error: parse error in /home/dcgtest2/public_html/catalog/includes/modules/product_listing.php on line 144

 

Here is the file product_listing.php:

 

<?php

/*

$Id: product_listing.php,v 1.44 2003/06/09 22:49:59 hpdl Exp $

 

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

 

Copyright © 2003 osCommerce

 

Released under the GNU General Public License

*/

 

$listing_split = new splitPageResults($listing_sql, MAX_DISPLAY_SEARCH_RESULTS, 'p.products_id');

 

if ( ($listing_split->number_of_rows > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) {

?>

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

<tr>

<td class="smallText"><?php echo $listing_split->display_count(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td>

<td class="smallText" align="right"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td>

</tr>

</table>

<?php

}

 

$list_box_contents = array();

 

for ($col=0, $n=sizeof($column_list); $col<$n; $col++) {

switch ($column_list[$col]) {

case 'PRODUCT_LIST_MODEL':

$lc_text = TABLE_HEADING_MODEL;

$lc_align = '';

break;

case 'PRODUCT_LIST_NAME':

$lc_text = TABLE_HEADING_PRODUCTS;

$lc_align = '';

break;

case 'PRODUCT_LIST_MANUFACTURER':

$lc_text = TABLE_HEADING_MANUFACTURER;

$lc_align = '';

break;

case 'PRODUCT_LIST_PRICE':

$lc_text = TABLE_HEADING_PRICE;

$lc_align = 'right';

break;

case 'PRODUCT_LIST_QUANTITY':

$lc_text = TABLE_HEADING_QUANTITY;

$lc_align = 'right';

break;

case 'PRODUCT_LIST_WEIGHT':

$lc_text = TABLE_HEADING_WEIGHT;

$lc_align = 'right';

break;

case 'PRODUCT_LIST_IMAGE':

$lc_text = TABLE_HEADING_IMAGE;

$lc_align = 'center';

break;

case 'PRODUCT_LIST_BUY_NOW':

$lc_text = TABLE_HEADING_BUY_NOW;

$lc_align = 'center';

break;

}

 

if ( ($column_list[$col] != 'PRODUCT_LIST_BUY_NOW') && ($column_list[$col] != 'PRODUCT_LIST_IMAGE') ) {

$lc_text = tep_create_sort_heading($HTTP_GET_VARS['sort'], $col+1, $lc_text);

}

 

$list_box_contents[0][] = array('align' => $lc_align,

'params' => 'class="productListing-heading"',

'text' => ' ' . $lc_text . ' ');

}

 

if ($listing_split->number_of_rows > 0) {

$rows = 0;

$listing_query = tep_db_query($listing_split->sql_query);

while ($listing = tep_db_fetch_array($listing_query)) {

$rows++;

 

if (($rows/2) == floor($rows/2)) {

$list_box_contents[] = array('params' => 'class="productListing-even"');

} else {

$list_box_contents[] = array('params' => 'class="productListing-odd"');

}

 

$cur_row = sizeof($list_box_contents) - 1;

 

for ($col=0, $n=sizeof($column_list); $col<$n; $col++) {

$lc_align = '';

 

switch ($column_list[$col]) {

case 'PRODUCT_LIST_MODEL':

$lc_align = '';

$lc_text = ' ' . $listing['products_model'] . ' ';

break;

case 'PRODUCT_LIST_NAME':

$lc_align = '';

if (isset($HTTP_GET_VARS['manufacturers_id'])) {

$lc_text = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing['products_id']) . '">' . $listing['products_name'] . '</a>';

} else {

$lc_text = ' <a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing['products_id']) . '">' . $listing['products_name'] . '</a> ';

}

break;

case 'PRODUCT_LIST_MANUFACTURER':

$lc_align = '';

$lc_text = ' <a href="' . tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $listing['manufacturers_id']) . '">' . $listing['manufacturers_name'] . '</a> ';

break;

case 'PRODUCT_LIST_PRICE':

$lc_align = 'right';

if (tep_not_null($listing['specials_new_products_price'])) {

$lc_text = ' <s>' . $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</s>  <span class="productSpecialPrice">' . $currencies->display_price($listing['specials_new_products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</span> ';

} else {

$lc_text = ' ' . $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . ' ';

}

break;

case 'PRODUCT_LIST_QUANTITY':

$lc_align = 'right';

$lc_text = ' ' . $listing['products_quantity'] . ' ';

break;

case 'PRODUCT_LIST_WEIGHT':

$lc_align = 'right';

$lc_text = ' ' . $listing['products_weight'] . ' ';

break;

case 'PRODUCT_LIST_IMAGE':

$lc_align = 'center';

if (isset($HTTP_GET_VARS['manufacturers_id'])) {

$lc_text = '<a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing['products_image'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a>';

} else {

$lc_text = ' <a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing['products_image'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a> ';

}

break;

// Begin Buy Now button mod

case 'PRODUCT_LIST_BUY_NOW':

$lc_align = 'center';

$lc_text = '<form name="buy_now_' . $listing['products_id'] . '" method="post" action="' . tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=buy_now', 'NONSSL') . '"><input type="hidden" name="products_id" value="' . $listing['products_id'] . '">' . tep_image_submit('button_buy_now.gif', TEXT_BUY . $listing_values['products_name'] . TEXT_NOW) . '</form> ';

break;

// End Buy Now button mod

$list_box_contents[$cur_row][] = array('align' => $lc_align,

'params' => 'class="productListing-data"',

'text' => $lc_text);

}

}

 

new productListingBox($list_box_contents);

} else {(line 141)

$list_box_contents = array();

 

$list_box_contents[0] = array('params' => 'class="productListing-odd"');

$list_box_contents[0][] = array('params' => 'class="productListing-data"',

'text' => TEXT_NO_PRODUCTS);

 

new productListingBox($list_box_contents);

}

 

if ( ($listing_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3')) ) {

?>

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

<tr>

<td class="smallText"><?php echo $listing_split->display_count(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td>

<td class="smallText" align="right"><?php echo TEXT_RESULT_PAGE . ' ' . $listing_split->display_links(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('page', 'info', 'x', 'y'))); ?></td>

</tr>

</table>

<?php

}

?>

 

TIA


Learning is not attained by chance, it must be sought for with ardor and attended to with diligence.

Share this post


Link to post
Share on other sites
Guest

what is it you are trying to add at the top of your product listing, from what contribution? try putting in a generic product_listing.php and see what you get, then go back thru the contribution you got this from and go through the instructions.

Share this post


Link to post
Share on other sites
HAKAPAT,

 

I have used that contribution to to install the new fields but I am having problems with the columns matching up. 

 

For example,  the image field is being populated with the price field data.  Anyone know how to fix it?

looks like the order of fields is the problem... make sure they are in correct order.

 

meaning in the file uploaded and in EP.

 

as i read the order is important maybe i am mistaken... <_<

HAKAPAT,

 

Yes, that is preciesly the problem, I just don't know how to match everything up. Do you have any suggestions or would you be willing to help. You can PM me if you are interested in helping.

 

Thanks

Alrite Pete,

 

try this...

 

http://forums.oscommerce.com/index.php?showtopic=87832

 

there is another contribution if you want to do something like this:

 

==========================

contribution name: EZ new fields

 

Easy way add retail price in the product_info.php

 

or some fields like this:

 

retail price: 89.99

our price: 45.00

you save: 44.99 or 50%

==========================

 

hopefully you did back up your stuff....

 

good luck!

Share this post


Link to post
Share on other sites

I was not trying to add anything, this came about as a result of uploading the file.

 

 

This was from Easy Poplute contribution.


Learning is not attained by chance, it must be sought for with ardor and attended to with diligence.

Share this post


Link to post
Share on other sites

Problem solved with replacement of file.

 

 

Don't know how that happened!


Learning is not attained by chance, it must be sought for with ardor and attended to with diligence.

Share this post


Link to post
Share on other sites

Hi All,

I had been meaning to install EP for months now but never did thinking it was a very complicated mod to add, but after taking some time to read into I find it is so easy. Overall great contribution.

 

Now to my issue:

Everything is working fine for me except that when I modified the file and uploaded it it made duplicates of every item in my catalog, so now instead of 800+ items I have over 1600.

 

The only thing I did was add the v_products_model too all the items since I had read that EP would not work without them.

 

To fix it I tried downloading the csv file again with all the dups and then deleted the dups then proceeded to upload but it did not work.

 

Is there an easy way to delete all the dups with out doing it one by one in the admin?


Samuel Mateo, Jr.

osC 2.2 MS2

Installed Mods:

WYSIWYG HTMLArea 1.7 | Basic Template System 1.0 | osC-Affiliate | OSC-SupportTicket

Featured Products 1.3 | LoginBox 5.2 | LatestNews 1.1.3 | Extras for IE

Share this post


Link to post
Share on other sites

Hi all,

 

I've installed EP and tested it successfully (phew!)

Now I'm trying to import my own stock (around 5000 items) and have run into a problem which I cannot figure out.

I split my files - no problem

I upload my files - seems to work ok

BUT

1. info is only added to my german version

2. my main categories are duplicated which is really wierd plus I can't see the added products in the categories

 

can someone help me out? you can check out my shop at www.macle.de/catalog to see what I mean about the duplication.

 

would be fantastic if someone could point me in the right direction quickly.

Thanks in advance

Share this post


Link to post
Share on other sites
Guest

Sharon, you will need to read through the last 10 pages or so, there is something about how someone dealt with a language other than English (instructions state only supports English), however someone has been able to get it to work.

 

Prop, what is it you were doing? you had all your products uploaded already? if you downloaded the original data, you would have seen the v_products_model would have come with them. if you were not using model numbers with the original site, then EP would think they are new products, as it didnt find the model # in the file.

 

you can go through the database and delete things, just be careful,

 

BACK IT UP FIRST!

Share this post


Link to post
Share on other sites
Prop, what is it you were doing? you had all your products uploaded already? if you downloaded the original data, you would have seen the v_products_model would have come with them. if you were not using model numbers with the original site, then EP would think they are new products, as it didnt find the model # in the file.

 

you can go through the database and delete things, just be careful,

 

BACK IT UP FIRST!

Thanks for the quick response Mibble.

 

What did I do wrong? To my understanding you have to have the product model or EP would not have worked. Was this supposed to happen since I did not use the product model originally?


Samuel Mateo, Jr.

osC 2.2 MS2

Installed Mods:

WYSIWYG HTMLArea 1.7 | Basic Template System 1.0 | osC-Affiliate | OSC-SupportTicket

Featured Products 1.3 | LoginBox 5.2 | LatestNews 1.1.3 | Extras for IE

Share this post


Link to post
Share on other sites
Guest

yes, this is true. if you had no product model, then it goes that way. dont know which way you want to go, to keep or not to keep, that is the question

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

×