Jump to content
Sign in to follow this  
lessliquidation

[Contribution] Adding new fields to Easy Populate

Recommended Posts

I can not get this to work!

 

Main problem is when I upload it looks to work, but all the tables get the wrong info.

 

Is there any kind soul out there that could e-mal me a correct working file of the easypopulate.php and a sql export of the products table.

 

PLEASE!

 

Spent hours and hours trying and trying, with no good results!

 

patrik@mtnprod.se

 

Thanks

Edited by mtnprod

Share this post


Link to post
Share on other sites

you have to make sure when you add fields, that the insert is in the same place in relation to the field, etc., else things will get thrown way off. as i have stated to others before, pick a spot, where you want to add the field, and then look in easy populate for the field right before, for where you want to insert data. i did mine after products_image, so if you search for that, then add the fields, follow products_image all the way thru the ep file and you will get it to work.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Is it important to put it inte right place in the products table?

The instructions does not say anyting about that....

:blush:

Share this post


Link to post
Share on other sites

been trying to do that, but cant get iot to work!

 

Any kind soul out there taht could e-mail the files?

 

PLEASE!! :'( :blush:

Share this post


Link to post
Share on other sites

Hi all,

 

I have an OSC SHop with EP 2.74 installed. EP works fine and there is no doubt on that.

 

But the problem I face is :

 

I have TWO EXTRA fields on the DB - Market Price, Delivery Time

 

and also my categories level (depth) goes upto 7 levels

 

eg..

 

office > essentials > paper > envelope > f4 > Color >

 

something like that.

 

the thing with EP is - the TAB LIMITED file that is downloaded only has the default format and it does not have the additional FIELDS that are in the DB and also category level is only THREE.

 

Please help me to sort out this.

 

Awaiting reply

 

Thanks

 

Venkat

Share this post


Link to post
Share on other sites

you need to read thru the easypopulate.php file and you can change your category level based upon the # you have. for extra fields, you need to add those fields to easypopulate.php and they will show up. there is plenty of info in this thread for doing so. also the support thread for easypopulate has many references on how to add additional fields.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Ok, as many of you others I'm stuck on a common problem. I have read through everything concerning Products Extra Fields and Easy Populate. But no luck so far...

 

My problem is getting the Product Extra Fields contribution to work with Easy Populate.

 

I have read all the posts in this thread, and the big easy populate thread, but there are no answers there to this exact problem.

 

Mibble has kindly posted his easypopulate file to show how to add the new fields. But this only works if the new fields are hard coded or added with EZ new fields. The problem with Product Extra Fields is that the new fields doesn't get a name that I can use to call them up. If I add a new field like Author, it does't show up as v_products_author. It is just added as products_extra_fields_id with a value of 1 (if its the first new field you have created using this contribution).

 

As far as I can understand the Product Extra Fields contribution consists of 5 values:

 

 

products_extra_fields_id = gives each new field a numbered id

products_extra_fields_name = the name you give the field

products_extra_fields_order = determines which order the fields are presented in on the page

products_extra_fields_status = sets the field active/inactive

products_extra_fields_value = The value of the field (this is the value I want)

 

So far so good. The problem is that I can't just call up the products_extra_fields_value without calling the products_extra_fields_id first. Since products_extra_fields_value will be different for each new field I have created.

 

 

 

So my big question is, can you still add it to easy populate?

 

Somehow I must first call up the first field with products_extra_fields_id = 1, and then get the products_extra_fields_value from that field. THEN I must call products_extra_fields_id = 2 and get the products_extra_fields_value from that field. And so on....

 

I hope one or more of you clever people can help out on this. It is obvious that there are many more people than me that has this problem. And there are probably more to come. I'm also pretty new at php, so it would not hurt if you explained it so I understand it.

 

The Products Extra Fields contribution has the great advantage of not showing the extra fields when they are empty.

 

Any help would be grately appreciated.

 

 

Fredrik

Share this post


Link to post
Share on other sites

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

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

 

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

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


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

I have done what you suggested Mibble. And just want to thank you for your help.

 

I think I'll be gratefull for doing it manually in the future, as it opens more possibilities for future functions.

 

Thanks for taking the time to help.

 

Fredrik

Share this post


Link to post
Share on other sites
Hi!

 

I was thinking (since it's been a couple months since I've addressed the 1136 error problem and still haven't been able to find a solution to it) that the instructions/contribution for adding new fields to easy populate should be updated.

 

Many people are having trouble adding new products to their oscommerce store and they're not being helped. I think an update to the contribution would help us all.

 

Thanks!

 

Did you ever find out the cause of the error in easy populate new fields when adding new products?

If you did can you let me know what it was as I am having the same problem

Thanks

Share this post


Link to post
Share on other sites

Hello all. I have added extra field acording to the latest listnings.

 

Now, Can anyone help me on how to get a extra field to display in the product listning (lets see what we got here...). And in the search result?

 

As for now, the extra field is only visible in the product detail screen...

Share this post


Link to post
Share on other sites

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

 

Thanks,

Paul

Share this post


Link to post
Share on other sites

Hi Dave,

 

Was wondering if you could help me with an issue I am having with the checkout process. I wanted to add a delivery date and delivery phone number. I have extended the database and started working on some files, but I am not sure how the fields are placed into the db during the checkout process. I just started on this and thought maybe you could point me to specific areas to look at.

 

TIA,

 

John

 

your contribution is great btw....


--

 

John Cannon

Share this post


Link to post
Share on other sites

Hello, I'm hoping to find a little advice. I've installed the NewFields-march-5.txt files to use with Easy Populate, and have succeeded in adding 5 new fields to my database and the admin section of OSCommerce. I can add new fields to my product pages from Admin, but if I download an Easy Populate file and add new products from there, when I upload the tab delimited file, I get the following error:

 

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

Easy Populate 2.74-MS2 - Default Language : English(1)

 

File uploaded.

Temporary filename: C:\PHP\uploadtemp\php73.tmp

User filename: easter2.txt

Size:

| 33093 | watersport | Turner Jac | descriptio | | 299.99 | 0 | | 3/27/2005 | 4 | Helly Hans | Mens | Boating | Jackets, C | | | | | --none-- | Active | fabric Updated

| 34567 | watersport | Turner Jac | descriptio | | 399.99 | | | | 5 | Helly Hans | Mens | Boating | Jackets, C | | | | | --none-- | Active | fabric !New Product!

1048 - Column 'products_date_added' cannot be null

 

INSERT INTO products ( products_fabric, products_image, products_model, products_price, products_status, products_last_modified, products_date_added, products_date_available, products_tax_class_id, products_weight, products_quantity, manufacturers_id) VALUES ( 'watersports/31041514s.jpg', '34567', '399.99', '1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, '', '', '5', 'fabric', '11')

 

[TEP STOP]

 

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

 

This is my txt file:

 

v_products_model v_products_image v_products_name_1 v_products_description_1 v_products_url_1 v_products_price v_products_weight v_date_avail v_date_added v_products_quantity v_manufacturers_name v_categories_name_1 v_categories_name_2 v_categories_name_3 v_categories_name_4 v_categories_name_5 v_categories_name_6 v_categories_name_7 v_tax_class_title v_status v_products_fabric EOREOR

33093 watersports/31041514s.jpg Turner Jacket description 299.99 0 3/27/2005 8:58 4 Helly Hansen Mens Boating "Jackets, Coats" --none-- Active fabric EOREOR

34567 watersports/31041514s.jpg Turner Jacket 2 description 399.99 5 Helly Hansen Mens Boating "Jackets, Coats" --none-- Active fabric EOREOR

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

 

 

I'm assuming the problem is in the easypopulate.php file. I've been working on this quite a bit, and was able to upload successfully on one of my tries, however, the fields were in in the wrong place, the products_model came through blank, and the status came in inactive. If I upload the default version of easypopulate.php, the system uploads correctly, but I don't get to use my new fields! Can anybody point me to my error here? I've searched the forums but haven't found this issue replicated. Many thanks! :blink:

 

Here is my easypopulate.php text:

 

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

<?php

 

// Current EP Version

$curver = '2.74-MS2';

 

/*

$Id: easypopulate.php,v 2.74 2004/05/03 VJ Exp $

*/

 

//

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

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

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

// V A R I A B L E S

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

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

 

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

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

//

$tempdir = "/temp/";

$tempdir2 = "/temp/";

 

// fix by jb 20040815 set the strings to http post/request, since they don't seem to work on the new server, with register globals=off...

$dltype=$_REQUEST['dltype'];

$download=$_REQUEST['download'];

 

global $HTTP_POST_FILES;

 

foreach( $HTTP_POST_FILES as $varname => $fileinfo ){

$GLOBALS[$varname] = $fileinfo["tmp_name"];

$GLOBALS[$varname.'_name'] = $fileinfo["name"];

}

// end fix jb

 

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

 

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

// Set the v_price_with_tax to

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

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

global $price_with_tax;

$price_with_tax =true;

 

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

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

// set to 1 = replace quotes with escape characters

// set to 0 = no quote replacement

global $replace_quotes;

$replace_quotes = true;

 

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

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

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

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

global $separator;

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

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

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

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

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

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

 

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

// change this if you need more or fewer categories

global $max_categories;

$max_categories = 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://209.200.107.219/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://209.200.107.219/catalog/images/";

 

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

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

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

// that are defined in other places.

global $froogle_SEF_urls;

$froogle_SEF_urls = false;

 

 

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

// End Froogle configuration variables

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

 

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

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

// E N D

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

// V A R I A B L E S

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

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

 

 

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

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

// S T A R T

// INITIALIZATION

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

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

 

 

require('includes/application_top.php');

require('includes/database_tables.php');

 

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

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

// errors like:

// undefined function tep_get_uploaded_file

if (!function_exists(tep_get_uploaded_file)){

include ('easypopulate_functions.php');

}

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

 

// VJ product attributes begin

global $attribute_options_array;

$attribute_options_array = array();

 

if ($products_with_attributes == true) {

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

foreach ($attribute_options_select as $value) {

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

 

$attribute_options_values = tep_db_query($attribute_options_query);

 

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

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

}

}

} else {

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

 

$attribute_options_values = tep_db_query($attribute_options_query);

 

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

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

}

}

}

// VJ product attributes end

 

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

 

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

global $default_these;

$default_these = array(

'v_products_image',

#'v_products_mimage',

#'v_products_bimage',

#'v_products_subimage1',

#'v_products_bsubimage1',

#'v_products_subimage2',

#'v_products_bsubimage2',

#'v_products_subimage3',

#'v_products_bsubimage3',

'v_categories_id',

'v_products_price',

'v_products_quantity',

'v_products_weight',

'v_date_avail',

'v_instock',

'v_tax_class_title',

'v_manufacturers_name',

'v_manufacturers_id',

'v_products_dim_type',

'v_products_length',

'v_products_width',

'v_products_height'

);

 

//elari check default language_id from configuration table DEFAULT_LANGUAGE

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

if (tep_db_num_rows($epdlanguage_query)) {

$epdlanguage = tep_db_fetch_array($epdlanguage_query);

$epdlanguage_id = $epdlanguage['languages_id'];

$epdlanguage_name = $epdlanguage['name'];

} else {

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

}

 

$langcode = ep_get_languages();

 

if ( $dltype != '' ){

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

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

}

 

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

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

// E N D

// INITIALIZATION

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

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

 

 

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

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

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

// DOWNLOAD FILE

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

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

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

 

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

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

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

if ($request_type== 'NONSSL'){

header("Pragma: no-cache");

} else {

header("Pragma: ");

}

header("Expires: 0");

echo $filestring;

die();

} else {

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

// PUT FILE IN TEMP DIR

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

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

//unlink($tmpfname);

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

fwrite($fp, $filestring);

fclose($fp);

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

die();

}

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

?>

 

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

<html <?php echo HTML_PARAMS; ?>>

<head>

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

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

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

</head>

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

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

 

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

<tr>

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

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

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

</table></td>

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

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

?>

 

<p class="smallText">

 

<?php

 

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

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

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

// UPLOAD AND INSERT FILE

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

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

 

if ($usrfl){

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

$file = tep_get_uploaded_file('usrfl');

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

echo "<p class=smallText>";

echo "File uploaded. <br>";

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

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

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

 

// get the entire file into an array

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

}

if ($localfile){

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

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

 

$attribute_options_values = tep_db_query($attribute_options_query);

 

$attribute_options_count = 1;

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

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

echo "<p class=smallText>";

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

 

// get the entire file into an array

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

}

 

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

$newreaded = "";

foreach ($readed as $read){

$newreaded .= $read;

}

 

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

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

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

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

 

 

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

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

$lll = 0;

$filelayout = array();

foreach( $theheaders_array as $header ){

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

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

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

}

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

 

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

array_walk($readed, 'walk');

 

}

 

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

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

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

// UPLOAD AND SPLIT FILE

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

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

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

$file = tep_get_uploaded_file('usrfl');

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

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

tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

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

 

//toprow has the field headers

$toprow = fgets($infp,32768);

 

$filecount = 1;

 

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

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

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

fwrite($fp, $toprow);

 

$linecount = 0;

$line = fgets($infp,32768);

while ($line){

// walking the entire file one row at a time

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

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

fwrite($fp, $line);

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

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

$linecount++; // increment our line counter

if ($linecount >= $maxrecs){

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

$linecount = 0; // reset our line counter

// close the existing file and open another;

fclose($fp);

// increment filecount

$filecount++;

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

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

//Open next file name

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

fwrite($fp, $toprow);

}

}

$line=fgets($infp,32768);

}

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

fclose($fp);

fclose($infp);

 

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

 

}

 

?>

</p>

 

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

<tr>

<td width="75%">

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

<p>

<div align = "left">

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

<p>

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

<p></p>

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

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

<br>

</p>

</div>

 

</form>

 

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

<p>

<div align = "left">

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

<p>

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

<p></p>

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

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

<br>

</p>

</div>

 

</form>

 

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

<p>

<div align = "left">

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

<p class="smallText">

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

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

<br>

</p>

</div>

 

</form>

 

 

 

 

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

 

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

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

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

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

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

 

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

<?php

if ($products_with_attributes == true) {

?>

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

<?php

}

?>

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

 

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

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

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

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

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

 

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

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

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

 

</td>

</tr>

</table>

</td>

</tr>

</table>

 

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

 

<p>?</p>

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

</p></body>

</html>

 

<?php

 

function ep_get_languages() {

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

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

$ll =1;

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

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

$ep_languages_array[$ll++] = array(

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

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

);

}

return $ep_languages_array;

};

 

function tep_get_tax_class_rate($tax_class_id) {

$tax_multiplier = 0;

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

if (tep_db_num_rows($tax_query)) {

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

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

}

}

return $tax_multiplier;

};

 

function tep_get_tax_title_class_id($tax_class_title) {

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

$tax_class_array = tep_db_fetch_array($classes_query);

$tax_class_id = $tax_class_array['tax_class_id'];

return $tax_class_id ;

}

 

function print_el( $item2 ) {

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

};

 

function print_el1( $item2 ) {

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

};

function ep_create_filelayout($dltype){

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

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

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

switch( $dltype ){

case 'full':

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

$iii = 0;

$filelayout = array(

'v_products_model' => $iii++,

'v_products_image' => $iii++,

);

 

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

$l_id = $lang['id'];

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

// Linda's Header Tag Controller 2.0

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

$filelayout = array_merge($filelayout , array(

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

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

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

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

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

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

));

}

 

 

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

 

// VJ product attribs begin

$header_array = array(

'v_products_price' => $iii++,

'v_products_weight' => $iii++,

'v_date_avail' => $iii++,

'v_date_added' => $iii++,

'v_products_quantity' => $iii++,

);

 

$languages = tep_get_languages();

 

global $attribute_options_array;

 

$attribute_options_count = 1;

foreach ($attribute_options_array as $attribute_options_values) {

$key1 = 'v_attribute_options_id_' . $attribute_options_count;

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

 

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

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

 

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

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

}

 

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

 

$attribute_values_values = tep_db_query($attribute_values_query);

 

$attribute_values_count = 1;

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

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

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

 

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

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

 

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

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

 

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

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

}

 

$attribute_values_count++;

}

 

$attribute_options_count++;

}

 

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

 

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

// VJ product attribs end

 

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

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

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

}

 

$filelayout = array_merge($filelayout, array(

'v_tax_class_title' => $iii++,

'v_status' => $iii++,

'v_products_fabric' => $iii++,

));

 

$filelayout_sql = "SELECT

p.products_fabric as v_products_fabric,

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

 

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

}

 

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

Share this post


Link to post
Share on other sites

if you read your insert statement, you have products fabric as the first field however the first field you are inserting is the products image. fix that portion and you should be good to go


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites
if you read your insert statement, you have products fabric as the first field however the first field you are inserting is the products image.  fix that portion and you should be good to go

 

John, thank you very much! IT worked! This will be a great timesaver in getting all the products into the new store. Thanks! :lol:

 

I edited this section, putting the new field below the products_quantity, instead of right under the TABLE_PRODUCTS."( (as indicated in the instructions):

 

$query = "INSERT INTO ".TABLE_PRODUCTS." (

products_image,

products_model,

products_price,

products_status,

products_last_modified,

products_date_added,

products_date_available,

products_tax_class_id,

products_weight,

products_quantity,

products_fabric,

manufacturers_id)

VALUES (

 

and it fixed the problem. The instructions for the edits to the easypopulate.php page say the following, and it might be helpful for somebody else to see this thread, if they find it confusing too:

 

 

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

 

Below it add:

 

products_artist,

 

Actually, it goes below the products_quantity line.

 

Thanks,

Janet

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

STEP 1: Find the following on approx. line 423

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

 

Add the following immediately below this line:

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

 

STEP 2: Find the following on approx. line 1047

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

 

Add the following immediately below:

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

 

STEP 3: Find the following on approx. line 2072

// VJ product attribs end

 

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

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

 

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

 

Cheers, Scott

Share this post


Link to post
Share on other sites

Hello Scott, thanks for the extrafields addition to easy populate it works like a charm.

I have copied your code and tried to add "Attribute Sets" contributions fields to easy populate. So far successful in getting the attribute set id with download but unable to upload the file, easypopulate is throwing errors, I am pasting the code below, i,e modiefied from your version for extra fields, this code may be truly horrible but I sincerely request knowledgable persons to have a look in order to get it to work.

 

STEP 1: Find the following on approx. line 423
CODE
// If you have other modules that need to be available, put them here


Add the following immediately below this line:
CODE

// START: Attributes Sets Contribution v2.0a
  $attributes_sets_query = tep_db_query("
                      SELECT pas.products_attributes_sets_name as name, pts.products_attributes_sets_value as value
                      FROM ". TABLE_PRODUCTS_ATTRIBUTES_SETS ." pas
             LEFT JOIN  ". TABLE_PRODUCTS_ATTRIBUTES_SETS_TO_PRODUCTS ." pts
            ON pts.products_attributes_sets_id=pas.products_attributes_sets_id
            WHERE pts.products_id=".$row['v_products_id']." and pts.products_attributes_sets_value<>'' and (pas.languages_id='0' or pas.languages_id='".$languages_id."')
            ORDER BY products_attributes_sets_id");

  while ($attributes_sets = tep_db_fetch_array($attributes_sets_query)) {
        $row['v_pas_'.$attributes_sets['name']] = $attributes_sets['value'];
  }
// END: Attributes Sets Contribution


STEP 2: Find the following on approx. line 1047
CODE

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


Add the following immediately below:
CODE

//START: Attributes Sets Contribution v2.0a
 $attributes_sets_query = tep_db_query("
                      SELECT pas.products_attributes_sets_name as name
                      FROM ". TABLE_PRODUCTS_ATTRIBUTES_SETS ." pas
                ORDER BY products_attributes_sets_id");
  
    while ($attributes_sets = tep_db_fetch_array($attributes_sets_query)) {
          $filelayout = array_merge($filelayout, array('v_pas_'.$attributes_sets['name']  => $iii++));
    
    }
    // END: Attributes Sets Contribution v2.0a


STEP 3: Find the following on approx. line 2072
CODE

// VJ product attribs end


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

// START: Attributes Sets Contribution
// Get current list of extra fields
        $attributes_sets_query = tep_db_query("
                      SELECT pas.products_attributes_sets_name as name
                      FROM ". TABLE_PRODUCTS_ATTRIBUTES_SETS ." pas
                ORDER BY products_attributes_sets_id");
  
    while ($attributes_sets = tep_db_fetch_array($attributes_sets_query)) {
    
      $v_current_pas_name = $attributes_sets['name'];
    $v_current_pas_value = $items[$filelayout['v_pas_' . $v_current_pas_name]];
              
    //if row value is not null  update, else delete the current entry if value is now null
    if(isset($filelayout['v_pas_' . $v_current_pas_name])) { // Check to see if this entry has not been added since download
     //Find key value for this extra field
     $attributes_sets_id_query = tep_db_query("SELECT pas.products_attributes_sets_id as pasid, pas.products_attributes_sets_name
                            FROM ". TABLE_PRODUCTS_ATTRIBUTES_SETS ." pas
                      WHERE pas.products_attributes_sets_name = '".$v_current_pas_name."'");
  
       $result = tep_db_fetch_array($attributes_sets_id_query);
       $pas_id = $result['pasid'];
      
       //Check if we are inserting, updating or deleting
       $attributes_sets_exist_query = tep_db_query("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES_SETS_TO_PRODUCTS . " WHERE products_id = " . $v_products_id. " AND products_attributes_sets_id = ".$pas_id);
             while ($products_attributes_sets_exist = tep_db_fetch_array($attributes_sets_exist_query)) {
               $extra_product_value_exist = True; //found an entry
             }
      
     if ($extra_product_value_exist) { // an entry exists
      if ($v_current_pas_value == '') tep_db_query("DELETE FROM " . TABLE_PRODUCTS_ATTRIBUTES_SETS_TO_PRODUCTS . " where products_id = " . $v_products_id . " AND  products_attributes_sets_id = " . $pas_id);
                  else tep_db_query("UPDATE " . TABLE_PRODUCTS_ATTRIBUTES_SETS_TO_PRODUCTS . " SET products_attributes_sets_id = '" . tep_db_input($v_current_pas_value) . "' WHERE products_id = " . $v_products_id . " AND  products_attributes_sets_id = " . $pas_id);
     }else { // an entry does not exist
                  if ($v_current_pas_value != '') tep_db_query("INSERT INTO " . TABLE_PRODUCTS_ATTRIBUTES_SETS_TO_PRODUCTS . " (products_id, products_attributes_sets_id) VALUES ('" . $v_products_id . "', '" . $pas_id . "', '" . tep_db_input($v_current_pas_value) . "')");
     }
    }
    }
        // END: Attributes Sets Contribution

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
Sign in to follow this  

×