Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Automatically send data feed to Froogle


gottaloveit

Recommended Posts

  • Replies 3.7k
  • Created
  • Last Reply

Just installed this feed and it works well except for one thing. Availability is not displaying in the output. I checked and it is in output string itself but when it write the output string to the file it disappears. Anyone has any ideas why?

 

Thank you!

Link to comment
Share on other sites

Okay Jack, here are my options; is this correct?

define('SEO_ENABLED','true'); //Change to 'false' to disable if Ultimate SEO URLs is not installed

define('FEEDNAME', 'savingshubfeed.txt'); //from your googlebase account

define('DOMAIN_NAME', 'www.savingshub.com'); //your correct domain name (don't include www unless it is used)

define('FTP_USERNAME', ''); //created from within your googlebase account

define('FTP_PASSWORD', ''); //created from within your googlebase account

define('FTP_ENABLED', '1'); //set to 0 to disable

define('CONVERT_CURRENCY', '0'); //set to 0 to disable - only needed if a feed in a difference currecny is required

define('CURRENCY_TYPE', 'USD'); //(eg. USD, EUR, GBP)

define('DEFAULT_LANGUAGE', 1); //Change this to the id of your language. BY default 1 is english

define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here

 

define('OPTIONS_ENABLED', 1);

define('OPTIONS_ENABLED_AGE_RANGE', 0);

define('OPTIONS_ENABLED_ATTRIBUTES', 1);

define('OPTIONS_ENABLED_BRAND', 1);

define('OPTIONS_ENABLED_CONDITION', 1);

define('OPTIONS_ENABLED_CURRENCY', 0);

define('OPTIONS_ENABLED_EXPIRATION', 0);

define('OPTIONS_ENABLED_FEED_LANGUAGE', 0);

define('OPTIONS_ENABLED_FEED_QUANTITY', 1);

define('OPTIONS_ENABLED_GTIN', 0);

define('OPTIONS_ENABLED_GOOGLE_UTM', 0);

define('OPTIONS_ENABLED_ISBN', 0);

define('OPTIONS_ENABLED_MADE_IN', 0);

define('OPTIONS_ENABLED_MANUFACTURER', 1); //displays the manufacturer name

define('OPTIONS_ENABLED_PAYMENT_ACCEPTED', 1);

define('OPTIONS_ENABLED_PRODUCT_MODEL', 1); //displays the product model

define('OPTIONS_ENABLED_PRODUCT_TYPE', 1);

define('OPTIONS_ENABLED_SHIPPING', 0);

define('OPTIONS_ENABLED_INCLUDE_TAX', 0);

define('OPTIONS_ENABLED_UPC', 0);

define('OPTIONS_ENABLED_WEIGHT', 0);

 

//the following only matter if the matching option is enabled above.

define('OPTIONS_AGE_RANGE', '18-90 years');

define('OPTIONS_BRAND', '1');

define('OPTIONS_CONDITION', 'New'); //possible entries are New, Refurbished, Used

define('OPTIONS_DEFAULT_CURRENCY', 'USD');

define('OPTIONS_DEFAULT_FEED_LANGUAGE', 'en');

define('OPTIONS_DEFAULT_GOOGLE_UTM', ''); //see http://www.google.com/support/googleanalytics/bin/answer.py?hl=en&answer=55578

define('OPTIONS_GTIN', '');

define('OPTIONS_ISBN', '');

define('OPTIONS_MADE_IN', '');

define('OPTIONS_MANUFACTURERS_NAME_IGNORE', 'Baume and Mercier, Casio, Gucci, MontBlanc, Omega, Rolex, Tag Heuer, Bvlgari, Chanel, Chopard, Christian Dior, Escada, Fendi, Maui Jim, Ray-Ban, Roberto Cavalli, Tiffany & Company, Tom Ford, Guess, Kenneth Cole, Nautica, Tommy Hilfiger, Apple, BlackBerry, Bose, HTC, JVC, Motorola, Samsung, Bailey of Hollywood, Brixton'); //list if comma separated manufacturer names to be skipped - e.g. Matrox,Fox

define('OPTIONS_PAYMENT_ACCEPTED_METHODS', 'Cash, Check, GoogleCheckout, Visa, MasterCard, AmericanExpress, Discover, wiretransfer'); //Acceptable values: Cash, Check, GoogleCheckout, Visa, MasterCard, AmericanExpress, Discover, wiretransfer

define('OPTIONS_PRODUCT_TYPE', 'full'); //full means the full category path (i.e., hardware,printers), anything else, or blank, means just the products category (i.e., printers)

 

//the following is for the shipping override option - enter multiple values separated by a comma

//Format entries follow. A colon must be present for each field, whether it is entered or not.

// COUNTRY - OPTIONAL - If country isn't included, we'll assume the shipping price applies to the target country of the item. If region isn't included, the shipping price will apply across the entire country.

// REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)

// SERVICE - OPTIONAL - The service class or delivery speed, i.e. ground

// PRICE - REQUIRED - Fixed shipping price (assumes the same currency as the price attribute)

define('OPTIONS_SHIPPING_STRING', ''); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping

 

//the following is for the tax override option - enter multiple values separated by a comma

//Format entries follow. A colon must be present for each field, whether it is entered or not.

// COUNTRY - OPTIONAL - country the tax applies to - only US for now

// REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)

// TAX - REQUIRED - default = 0 (e.g. for 5.76% tax use 5.76)

// SHIPPING - OPTIONAL - do you charge tax on shipping - choices are y or n

define('OPTIONS_TAX_STRING', ''); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping

 

define('OPTIONS_UPC', '');

define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'lb'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram.

 

//the following allow skipping certain items

define('OPTIONS_IGNORE_PRODUCT_ZERO', 1); //0 = include products with qty of 0 in output, 1 = ignore products with qty of 0

Link to comment
Share on other sites

Ignore the paste above; Below is the upgraded version 2.9: I get the delimiter error still on all my items;

 

Here is one item feed:

link title description price image_link id availability brand condition expiration_date model product_type c:color c:size c:version

http://www.savingshub.com/heuer-kirium-wl1314ba0709-p-51.html TAG Heuer Kirium WL1314.BA0709 Apparel & Accessories > Watches FREE OVERNIGHT SHIPPING SHIPS WITHIN 24 HOURS Condition New Model # WL1314.BA0709 Brand Name: TAG Heuer Line: Kirium Gender: Womens Dial Color: Silver Movement: Swiss Quartz Functions: Hours, Minutes, Seconds, Date Case Material: Stainless Steel Bracelet Material: Stainless Steel Crystal Material: Sapphire Scratch-Resistant Case Diameter: 29mm Case Back: Solid Steel - Screw Down Bezel Material: Stainless Steel Bezel Function: Unidirectional Crown: Screw Down Buckle: Folding Clasp Water Resistance: 200 Meters (660 Feet) YOUR PURCHASE INCLUDES: MANUFACTURER BOX & MANUAL COMPLIMENTARY BRACELET SIZING 2 YEAR WARRANTY CERTIFICATE OF AUTHENTICITY MODEL # VARIATIONS: WL1314 BA0709, WL1314BA0709 899.99 http://www.savingshub.com/images/WL1314BA0709-1.jpg 51 in stock TAG Heuer Kirium WL1314.BA0709 new 09-11-2011 WL1314.BA070 TAG Heuer Watches

 

 

What is wrong with my feeds? Please let me know.

Link to comment
Share on other sites

I went ahead and corrected some of the problems; there are 3 errors coming up now only:

Missing 'age group' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

1371408987-v2-blank.gif Missing 'gender' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

1371408987-v2-blank.gif Missing 'color' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

 

Where can I find these options in feeder? Or should I add them?

Link to comment
Share on other sites

I went ahead and corrected some of the problems; there are 3 errors coming up now only:

Missing 'age group' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

1371408987-v2-blank.gif Missing 'gender' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

1371408987-v2-blank.gif Missing 'color' attribute. (91 errors, only affecting Product Search, Search API for Shopping)

 

Where can I find these options in feeder? Or should I add them?

The age group is an option. The other two are attributes. If you have those setup in your shop, then use the attributes option in the settings.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Just installed this feed and it works well except for one thing. Availability is not displaying in the output. I checked and it is in output string itself but when it write the output string to the file it disappears. Anyone has any ideas why?

 

Thank you!

 

Hello again.

 

After running the script from admin tools i keep getting these headings and i do not see AVAILABILITY in them:

link title description expiration_date price image_link genre id weight manufacturer mpn payment_accepted product_type currency location tax quantity brand condition age_range made_in

 

I dumped the whole $output string to the screen before writing it to the file to see what it is and availability is there, but what gets written into the txt file is different then what $output has. These are the headings i see in the output string: link title description price image_link id availability condition product_type

 

 

Any ideas, why? and how to fix it?

Thank you.

Link to comment
Share on other sites

 

Hello again.

 

After running the script from admin tools i keep getting these headings and i do not see AVAILABILITY in them:

link title description expiration_date price image_link genre id weight manufacturer mpn payment_accepted product_type currency location tax quantity brand condition age_range made_in

 

I dumped the whole $output string to the screen before writing it to the file to see what it is and availability is there, but what gets written into the txt file is different then what $output has. These are the headings i see in the output string: link title description price image_link id availability condition product_type

 

 

Any ideas, why? and how to fix it?

Thank you.

You have to setup the options in the googlefeeder file.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

You have to setup the options in the googlefeeder file.

Jack, thank you for fast response.

 

I checked options again and again, and still get the same result.

Here are my options from googlfeeder.php, if it's not too much trouble, can you please take a look and let me know if i'm missing something?

Because i still can't get availability to show and i still can't seem to control what columns i can display.

 

 

/*************** BEGIN MASTER SETTINGS ******************/

 

define('SEO_ENABLED','true');

define('FEEDNAME', 'data_feed.txt');

define('DOMAIN_NAME', 'www.mysitedomain.com');

define('FTP_USERNAME', '');

define('FTP_PASSWORD', '');

define('FTP_ENABLED', 0);

define('CONVERT_CURRENCY', 0); /

define('CURRENCY_TYPE', 'USD');

define('DEFAULT_LANGUAGE_ID', 1);

define('QUOTES_CATEGORY_NAME','');

 

/*************** OPTIONS - IF ENABLED, ALSO SET THE SIMILAR OPTION FARTHER DOWN ******************/

define('OPTIONS_ENABLED', 1);

define('OPTIONS_ENABLED_AGE_RANGE', 0);

define('OPTIONS_ENABLED_ATTRIBUTES', 0);

define('OPTIONS_ENABLED_BRAND', 1);

define('OPTIONS_ENABLED_CONDITION', 1);

define('OPTIONS_ENABLED_CURRENCY', 1);

define('OPTIONS_ENABLED_EXPIRATION', 0);

define('OPTIONS_ENABLED_FEED_LANGUAGE', 1);

define('OPTIONS_ENABLED_GTIN', 0);

define('OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY', 0);

define('OPTIONS_ENABLED_GOOGLE_UTM', 0);

define('OPTIONS_ENABLED_ISBN', 0);

define('OPTIONS_ENABLED_MADE_IN', 0);

define('OPTIONS_ENABLED_MPN', 0);

define('OPTIONS_ENABLED_PRODUCT_MODEL', 0);

define('OPTIONS_ENABLED_PRODUCT_TYPE', 1);

define('OPTIONS_ENABLED_SHIPPING', 0);

define('OPTIONS_ENABLED_INCLUDE_TAX', 0);

define('OPTIONS_ENABLED_UPC', 0);

define('OPTIONS_ENABLED_WEIGHT', 0);

 

define('OPTIONS_AGE_RANGE', '15-90 years');

 

define('OPTIONS_AVAILABILITY', 'status');

 

define('OPTIONS_BRAND', 'manu');

define('OPTIONS_CONDITION', 'new');

define('OPTIONS_CURRENCY', 'USD');

define('OPTIONS_CURRENCY_THOUSANDS_POINT', ',');

define('OPTIONS_DATE_FORMAT', 'Y-m-d');

define('OPTIONS_FEED_LANGUAGE', 'en');

define('OPTIONS_GOOGLE_UTM', '?utm_source=GoogleBase1&utm_medium=BaseFeed1&utm_campaign=products');

define('OPTIONS_GOOGLE_PRODUCT_CATEGORY', '');

define('OPTIONS_GTIN', '');

define('OPTIONS_ISBN', '');

define('OPTIONS_MADE_IN', '');

define('OPTIONS_MPN', 'model');

define('OPTIONS_PRODUCT_TYPE', 'full');

define('OPTIONS_SHIPPING_STRING', 'US:FL:Ground:7.00');

define('OPTIONS_TAX_RATE' , '20.0');

define('OPTIONS_TAX_CALC', (OPTIONS_ENABLED_INCLUDE_TAX == 2 ? (OPTIONS_TAX_RATE/100) + 1 : '1'));

define('OPTIONS_TAX_STRING', 'US:FL:5.00:n');

define('OPTIONS_UPC', '');

define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'lb');

define('OPTIONS_IGNORE_PRODUCT_PRICE', 0);

define('OPTIONS_IGNORE_PRODUCT_ZERO', 1);

 

THANK YOU!

Link to comment
Share on other sites

The age group is an option. The other two are attributes. If you have those setup in your shop, then use the attributes option in the settings.

 

Jack when I enable attributes options; I get 1 error stating this: Too few column delimiters (89 errors)

 

 

 

 

Your items contain fewer attributes than those specified in the header row. Learn more.

Examples: Line Nr. 2 3 4 5 6

 

 

Before, when it disabled the color, age, and gender options come up... whats the best fix?

Link to comment
Share on other sites

 

Jack when I enable attributes options; I get 1 error stating this: Too few column delimiters (89 errors)

 

 

 

 

Your items contain fewer attributes than those specified in the header row. Learn more.

Examples: Line Nr. 2 3 4 5 6

 

 

Before, when it disabled the color, age, and gender options come up... whats the best fix?

I don't know. It works fine for me. I can only assume your attributes are not setup correctly. If they are, it would require troubleshooting, which I can't do in a support thread.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Hey Jack,

 

Thanks I tried to message you however it seems like your message inbox is full. I need this feed figured out, I am pasting my email; please email me if you can I want to discuss some work, which off course I will compensate. Please let me know.

Thanks for mentioning that my mailbox is full. I always forget to check it. I have responded to you via email.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Jack, I really appreciate this contribution and all of the work that goes into it. It seems that no matter which contribution my site needs, most of the favorites have your hand in them, which speaks volumes of your talent and gives me added confidence.

 

One little suggestion I'd like to make for this (and other) ReadMe files is when referencing version numbers, if the Add-on version number has crossed the 2.2 - 2.3 threshold, the description should specify whether the author is referring to the Add-on or OSC version. Otherwise, it gets confusing to the person implementing the modification.

 

If there's a better place to post this suggestion, let me know.

Link to comment
Share on other sites

Jack, I really appreciate this contribution and all of the work that goes into it. It seems that no matter which contribution my site needs, most of the favorites have your hand in them, which speaks volumes of your talent and gives me added confidence.

 

One little suggestion I'd like to make for this (and other) ReadMe files is when referencing version numbers, if the Add-on version number has crossed the 2.2 - 2.3 threshold, the description should specify whether the author is referring to the Add-on or OSC version. Otherwise, it gets confusing to the person implementing the modification.

 

If there's a better place to post this suggestion, let me know.

I understand what you are saying and have ran into myself. But there's really no fix for it that I can see. It is just another little annoyance due to how the contributions section is setup. Instead of having the dropdown for the different versions, there should be a radio button selection on each contribution stating which version that contribution works with. But that is not under my control. You could try mentioning it, or any other suggestions you have for it, to Harold though.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Jack,

I think you need to review the new guidelines for Google's feed submission. They have changed a few of the requirements and have obsoleted a few others. I got several warnings from them concerning missing required data and also some that they have no attribute for. For example: they now require an option for link, id, image link.....

These are not included options in the googlefeeder file. There are also outdated options such as:ShippingWeight, made_in, ProductURL, ImageURL...

 

The bingfeeder file is really off as it submits to google but is missing many of the required options for a google feed. I believe that Bing has their own feed submital.

 

Anyway if you have some time you might want to look these files over. Thanks,

Matt

Link to comment
Share on other sites

Got this today

In reviewing the items you are submitting through the Google Merchant

Center, we have found some issues with the information submitted. Because

of the issues listed below, all of your items for the indicated countries

are at risk of being suspended from Google Product Search. Please fix

these issues within 7 days to avoid suspension of all your items.

 

Account: Lyons Performance

Account ID: xxxxxxxx

Country: US

 

Missing or Invalid Unique Product Identifiers

 

Some or all of the items in your feed are missing unique product

identifiers, such as 'MPN', 'brand' and 'GTIN'. These values are very

important for matching users' queries to your products. It is required to

provide unique product identifiers for most product categories.

Link to comment
Share on other sites

Missing or Invalid Unique Product Identifiers

 

Some or all of the items in your feed are missing unique product

identifiers, such as 'MPN', 'brand' and 'GTIN'. These values are very

important for matching users' queries to your products. It is required to

provide unique product identifiers for most product categories.

You need to set those option in the googlefeeder file.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Here is my googlefeeder file

<?php
//  Title: Google Base Data Feeder
//  Last Update: 12/25/09 by Jack_mcs at oscommerce-solution.com
//  google feed requirements - http://www.google.com/support/merchants/bin/answer.py?hl=en&answer=188494
chdir('../');
include_once 'includes/application_top.php';
/*************** BEGIN MASTER SETTINGS ******************/
define('SEO_ENABLED','true');    //Change to 'false' to disable if Ultimate SEO URLs is not installed
define('FEEDNAME', 'xxxxxxx.txt');	   //from your googlebase account
define('DOMAIN_NAME', 'www.lyonsperformance.com'); //your correct domain name (don't include www unless it is used)
define('FTP_USERNAME', 'xxxxxxx'); //created from within your googlebase account
define('FTP_PASSWORD', 'xxxxxxx'); //created from within your googlebase account
define('FTP_ENABLED', (isset($_GET['noftp']) ? '1' : '1'));	  //set to 0 to disable
define('CONVERT_CURRENCY', '0'); //set to 0 to disable - only needed if a feed in a difference currecny is required
define('CURRENCY_TYPE', 'USD');  //(eg. USD, EUR, GBP)
define('DEFAULT_LANGUAGE_ID', 1);   //Change this to the id of your language.  BY default 1 is english
define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here
/*************** OPTIONS - IF ENABLED, ALSO SET THE SIMILAR OPTION FARTHER DOWN ******************/
define('OPTIONS_ENABLED', 1);
define('OPTIONS_ENABLED_AGE_RANGE', 0);
define('OPTIONS_ENABLED_ATTRIBUTES', 0);
define('OPTIONS_ENABLED_BRAND', 1);		    //if set, see options for this setting below
define('OPTIONS_ENABLED_CONDITION', 1);
define('OPTIONS_ENABLED_CURRENCY', 0);
define('OPTIONS_ENABLED_EXPIRATION', 1);
define('OPTIONS_ENABLED_FEED_LANGUAGE', 0);
define('OPTIONS_ENABLED_GTIN', 0);			  //if set, a database field named products_gtin must exist
define('OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY', 1); //http://www.google.com/support/merchants/bin/answer.py?answer=160081
define('OPTIONS_ENABLED_GOOGLE_UTM', 0);
define('OPTIONS_ENABLED_ISBN', 0);			  //if set, a database field named products_isbn must exist
define('OPTIONS_ENABLED_MADE_IN', 0);
define('OPTIONS_ENABLED_MPN', 1);			   //if set, see options for this setting below
define('OPTIONS_ENABLED_PRODUCT_MODEL', 1);	 //displays the product model
define('OPTIONS_ENABLED_PRODUCT_TYPE', 1);
define('OPTIONS_ENABLED_SHIPPING', 0);
define('OPTIONS_ENABLED_INCLUDE_TAX', 0);	   //0 = no tax, 1 = uses google method, 2 = UK Vat
define('OPTIONS_ENABLED_UPC', 0);			   //if set, a database field named products_upc must exist
define('OPTIONS_ENABLED_WEIGHT', 1);
//some of the following only work if the matching option is enabled above.
define('OPTIONS_AGE_RANGE', '20-90 years');
define('OPTIONS_AVAILABILITY', 'quantity');	 //in stock - Include this value if you are certain that it will ship (or be in-transit to the customer) in 3 business days or less.
										    //available for order - Include this value if it will take 4 or more business days to ship it to the customer.
										    //out of stock - You’re currently not accepting orders for this product.
										    //preorder - You are taking orders for this product, but it’s not yet been released.
										    //if empty (no entry), the data will be loaded from the database. A field in the products description table named products_availability is required
										    //if "quantity," the field will be popuplated via the quantity: 0 or less = out of stock, greater than 0 = in stock
										    //if "status," the field will be popuplated via the status field. in or out of stock
define('OPTIONS_BRAND', 'manu');			    //leave blank to load from the database field named products_brand, set to "name"  to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model
define('OPTIONS_CONDITION', 'new');			 //possible entries are New, Refurbished, Used or blank, which loads from the database field named products_condition
define('OPTIONS_CURRENCY', 'USD');
define('OPTIONS_CURRENCY_THOUSANDS_POINT', ','); //this is the thousands point as in $1,000.
define('OPTIONS_DATE_FORMAT', 'Y-m-d');		 //change how the date is formatted
define('OPTIONS_FEED_LANGUAGE', 'en');
define('OPTIONS_GOOGLE_UTM', '?utm_source=GoogleBase1&utm_medium=BaseFeed1&utm_campaign=products'); //see http://www.google.com/support/googleanalytics/bin/answer.py?hl=en&answer=55578
define('OPTIONS_GOOGLE_PRODUCT_CATEGORY', 'Vehicles & Parts');  //enter db to load from a database field named google_product_category enter or enter a specific google category - see taxomy - http://www.google.com/support/merchants/bin/answer.py?answer=160081
define('OPTIONS_GTIN', '');
define('OPTIONS_ISBN', '');
define('OPTIONS_MADE_IN', 'US');
define('OPTIONS_MPN', 'model');					   //leave blank to load from the database field named products_mpn, set to "name"  to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model
define('OPTIONS_PRODUCT_TYPE', 'full'); //full means the full category path (i.e., hardware,printers), anything else, or blank, means just the products category (i.e., printers)
//the following is for the shipping override option - enter multiple values separated by a comma
//Format entries follow. A colon must be present for each field, whether it is entered or not.
// COUNTRY - OPTIONAL - If country isn't included, we'll assume the shipping price applies to the target country of the item. If region isn't included, the shipping price will apply across the entire country.
// REGION  - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)
// SERVICE - OPTIONAL - The service class or delivery speed, i.e. ground
// PRICE   - REQUIRED - Fixed shipping price (assumes the same currency as the price attribute)
define('OPTIONS_SHIPPING_STRING', 'US:::6.35'); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping
define('OPTIONS_TAX_RATE' , '0'); //default = 0 (e.g. for 20.0% tax use "$taxRate = 20.0;")  //only used in the next line
define('OPTIONS_TAX_CALC', (OPTIONS_ENABLED_INCLUDE_TAX == 2 ? (OPTIONS_TAX_RATE/100) + 1 : '1')); //UK. US tax rate - US is ignorded since it is 1
//the following is for the tax override option - enter multiple values separated by a comma
//Format entries follow. A colon must be present for each field, whether it is entered or not.
// COUNTRY  - OPTIONAL - country the tax applies to - only US for now
// REGION   - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)
// TAX	  - REQUIRED - default = 0 (e.g. for 5.76% tax use 5.76)
// SHIPPING - OPTIONAL - do you charge tax on shipping - choices are y or n
define('OPTIONS_TAX_STRING', 'US:CT:6.35:y'); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping
define('OPTIONS_UPC', '');
define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'lb'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram.
//the following allow skipping certain items
define('OPTIONS_IGNORE_PRODUCT_PRICE', 0);  //0 = include products with price of 0 in output, 1 = ignore products with price of 0
define('OPTIONS_IGNORE_PRODUCT_ZERO', 0);  //0 = include products with qty of 0 in output, 1 = ignore products with qty of 0
/*************** END MASTER SETTINGS ******************/

/*************** NO EDITS NEEDED BELOW THIS LINE *****************/
//********************
//  Start TIMER
//  -----------
$stimer = explode( ' ', microtime() );
$stimer = $stimer[1] + $stimer[0];
//  -----------

$OutFile = "feeds/" . FEEDNAME;
$destination_file = FEEDNAME;
$source_file = $OutFile;
$imageURL = 'http://' . DOMAIN_NAME . '/images/';
if(SEO_ENABLED=='true'){
  $productURL = 'product_info.php'; // ***** Revised for SEO
  $productParam = "products_id=";   // ***** Added for SEO
}else{
  $productURL = 'http://' . DOMAIN_NAME . '/product_info.php?products_id=';
}
$already_sent = array();
if(CONVERT_CURRENCY)
{
  if(SEO_ENABLED=='true'){
   $productParam="currency=" . CURRENCY_TYPE . "&products_id=";
  }else{
   $productURL = "http://" . DOMAIN_NAME . "/product_info.php?currency=" . CURRENCY_TYPE . "&products_id=";  //where CURRENCY_TYPE is your currency type (eg. USD, EUR, GBP)
  }
}
$feed_exp_date = @date(OPTIONS_DATE_FORMAT, time() + 2419200 );
if (!($link=mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD))) {
   echo "Error when connecting itself to the data base";
   exit();
}
if (!mysql_select_db( DB_DATABASE , $link )) {
  echo "Error the data base does not exist";
  exit();
}
$quotes = '';
if (QUOTES_CATEGORY_NAME !== '') {
  $quotes = " and products.customers_email_address = '' and products.quotes_email_address = ''";
}
$extraFields = '';
if (OPTIONS_AVAILABILITY == '') {
  $extraFields .= ' products_description.products_availability as availability, ';
}
if (OPTIONS_ENABLED_BRAND == 1) {
  if (strlen(OPTIONS_BRAND) == 0) {
   $extraFields .= ' products.products_brand as brand, ';
  } else {
   switch (OPTIONS_BRAND) {
	   case 'name':   $extraFields .= ' products_description.products_name as brand, '; break;
	   case 'manu':   $extraFields .= ' manufacturers.manufacturers_name as brand, ';   break;
	   case 'model':  $extraFields .= ' products.products_model as brand, ';		    break;
	   default:	   $extraFields .= ' products_description.products_name as brand, ';
   }
  }
}
if (OPTIONS_ENABLED_CONDITION == 1 && strlen(OPTIONS_CONDITION) == 0) {
  $extraFields .= ' products.products_condition as pcondition, ';
}
if (OPTIONS_ENABLED_GTIN == 1  && strlen(OPTIONS_GTIN) == 0) {
  $extraFields .= ' products.products_gtin as gtin, ';
}
if (OPTIONS_ENABLED_ISBN == 1  && strlen(OPTIONS_ISBN) == 0) {
  $extraFields .= ' products.products_isbn as isbn, ';
}
if (OPTIONS_ENABLED_MPN == 1) {
  if (strlen(OPTIONS_MPN) == 0) {
   $extraFields .= ' products.products_mpn as mpn, ';
  } else {
   switch (OPTIONS_MPN) {
	   case 'name':   $extraFields .= ' products_description.products_name as mpn, '; break;
	   case 'manu':   $extraFields .= ' manufacturers.manufacturers_name as mpn, ';   break;
	   case 'model':  $extraFields .= ' products.products_model as mpn, ';		    break;
	   default:	   $extraFields .= ' products_description.products_name as mpn, ';
   }
  }
}
if (OPTIONS_ENABLED_UPC == 1  && strlen(OPTIONS_UPC) == 0) {
  $extraFields .= ' products.products_upc as upc, ';
}
if (OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1 && OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db') {
  $extraFields .= ' products_description.google_product_category as google_category, ';
}

$sql = "
SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url,
products_model AS prodModel,
manufacturers.manufacturers_id,
products.products_id AS id,
products_description.products_name AS name,
products_description.products_description AS description,
products.products_quantity AS quantity,
products.products_status AS prodStatus,
products.products_weight AS prodWeight, " . $extraFields . "
FORMAT( IFNULL(specials.specials_new_products_price, products.products_price) * " . OPTIONS_TAX_CALC . ",2) AS price,
CONCAT( '" . $imageURL . "' ,products.products_image) AS image_url,
products_to_categories.categories_id AS prodCatID,
categories.parent_id AS catParentID,
categories_description.categories_name AS catName
FROM (categories,
categories_description,
products,
products_description,
products_to_categories)
left join manufacturers on ( manufacturers.manufacturers_id = products.manufacturers_id )
left join specials on ( specials.products_id = products.products_id AND ( ( (specials.expires_date > CURRENT_DATE) OR (specials.expires_date is NULL) OR (specials.expires_date = 0) ) AND ( specials.status = 1 ) ) )
WHERE products.products_id=products_description.products_id
AND products.products_id=products_to_categories.products_id
AND products_to_categories.categories_id=categories.categories_id
AND categories.categories_id=categories_description.categories_id " . $quotes . "
AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "
AND products_description.language_id = " . DEFAULT_LANGUAGE_ID . "
ORDER BY
products.products_id ASC
";
$quotes = '';
if (QUOTES_CATEGORY_NAME !== '') {
   $quotes = " and categories_description.categories_name NOT LIKE '" . QUOTES_CATEGORY_NAME . "' ";
}
$catInfo = "
SELECT
categories.categories_id AS curCatID,
categories.parent_id AS parentCatID,
categories_description.categories_name AS catName
FROM
categories,
categories_description
WHERE categories.categories_id = categories_description.categories_id " . $quotes . "
AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "";
function findCat($curID, $catTempPar, $catTempDes, $catIndex) {
  if( (isset($catTempPar[$curID])) && ($catTempPar[$curID] != 0) ) {
   if(isset($catIndex[$catTempPar[$curID]])) {
	   $temp=$catIndex[$catTempPar[$curID]];
   } else {
	   $catIndex = findCat($catTempPar[$curID], $catTempPar, $catTempDes, $catIndex);
	   $temp = $catIndex[$catTempPar[$curID]];
   }
  }
  if( (isset($catTempPar[$curID])) && (isset($catTempDes[$curID])) && ($catTempPar[$curID] == 0) ) {
   $catIndex[$curID] = $catTempDes[$curID];
  } else {
   $catIndex[$curID] = $temp . ", " . $catTempDes[$curID];
  }
  return $catIndex;
}
$catIndex = array();
$catTempDes = array();
$catTempPar = array();
$processCat = mysql_query( $catInfo )or die( $FunctionName . ": SQL error " . mysql_error() . "| catInfo = " . htmlentities($catInfo) );
while ( $catRow = mysql_fetch_object( $processCat ) ) {
  $catKey = $catRow->curCatID;
  $catName = $catRow->catName;
  $catParID = $catRow->parentCatID;
  if($catName != "") {
  $catTempDes[$catKey]=$catName;
  $catTempPar[$catKey]=$catParID;
  }
}
foreach($catTempDes as $curID=>$des)  { //don't need the $des
  $catIndex = findCat($curID, $catTempPar, $catTempDes, $catIndex);
}
$_strip_search = array(
"![\t ]+$|^[\t ]+!m", // remove leading/trailing space chars
'%[\r\n]+%m'); // remove CRs and newlines
$_strip_replace = array(
'',
' ');
$_cleaner_array = array(">" => "> ", "®" => "", " " => " ", "®" => "", "™" => "", "™" => "", "\t" => "", " " => "", """ => "\"");

if ( file_exists( $OutFile ) ) {
  unlink( $OutFile );
}
$output = "link\ttitle\tdescription\tprice\timage_link\tid\tavailability";
$attributesColumns = array();
//create optional section
if(OPTIONS_ENABLED == 1) {
  if(OPTIONS_ENABLED_AGE_RANGE == 1)   $output .= "\tage_range";
  if(OPTIONS_ENABLED_BRAND == 1)			 $output .= "\tbrand";
  if(OPTIONS_ENABLED_CONDITION == 1)	    $output .= "\tcondition";
  if(OPTIONS_ENABLED_CURRENCY == 1)		 $output .= "\tcurrency";
  if(OPTIONS_ENABLED_EXPIRATION == 1)	   $output .= "\texpiration_date";
  if(OPTIONS_ENABLED_FEED_LANGUAGE == 1)    $output .= "\tlanguage";
  if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1) $output .= "\tgoogle product_category";
  if(OPTIONS_ENABLED_GTIN == 1)			 $output .= "\tgtin";
  if(OPTIONS_ENABLED_ISBN == 1)			 $output .= "\tisbn";
  if(OPTIONS_ENABLED_MADE_IN == 1)		  $output .= "\tmade_in";
  if(OPTIONS_ENABLED_MPN == 1)				 $output .= "\tmpn";
  if(OPTIONS_ENABLED_PRODUCT_MODEL == 1)    $output .= "\tmodel";
  if(OPTIONS_ENABLED_PRODUCT_TYPE == 1)	 $output .= "\tproduct_type";
  if(OPTIONS_ENABLED_SHIPPING == 1)		  $output .= "\tshipping";
  if(OPTIONS_ENABLED_INCLUDE_TAX == 1)		 $output .= "\ttax";
  if(OPTIONS_ENABLED_UPC == 1)			  $output .= "\tupc";
  if(OPTIONS_ENABLED_WEIGHT == 1)		   $output .= "\tweight";
  if (OPTIONS_ENABLED_ATTRIBUTES == 1)  {
   $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());
   while ($products_options_name = mysql_fetch_object($products_options_name_query)) {
	   $attributesColumns[] = $products_options_name->products_options_name;
	   $name = strtolower($products_options_name->products_options_name);
	   $name = str_replace(" ","_", $name);
	   $output .= "\tc:" . $name;
   }
   /*
   //If you want to only show particular attributes, comment out the above and uncomment this section.
   //Then enter two lines for each one you want to show. For example, if the atttributes you want to
   //show are named Color and Fabric, the entries would appear as follows:
   $attributesColumns[] = "Color";
   $attributesColumns[] = "Fabric";
   $output .= "\tc:" . strtolower("Color");
   $output .= "\tc:" . strtolower("Fabric");
   */
  }
}
$output .= "\n";

$result=mysql_query( $sql )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql = " . htmlentities($sql) );
//Currency Information
if(CONVERT_CURRENCY) {
  $sql3 = "
  SELECT
  currencies.value AS curUSD
  FROM
  currencies
  WHERE currencies.code = '" . CURRENCY_TYPE . "'";
  $result3=mysql_query( $sql3 )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql3 = " . htmlentities($sql3) );
  $row3 = mysql_fetch_object( $result3 );
}
$loop_counter = 0;
$statsArray = array();
while( $row = mysql_fetch_object( $result ) ) {
  if (isset($already_sent[$row->id])) continue; // if we've sent this one, skip the rest of the while loop
  if (OPTIONS_IGNORE_PRODUCT_PRICE > 0 && $row->price <= 0) continue; //skip products with 0 price
  if (OPTIONS_IGNORE_PRODUCT_ZERO > 0 && $row->quantity < 1) continue; //skip products with 0 qty
  if (OPTIONS_IGNORE_PRODUCT_PRICE < 1 && $row->price <= 0) $statsArray['price']++; //record for warning
  if (OPTIONS_IGNORE_PRODUCT_ZERO < 1 && $row->quantity < 1) $statsArray['qty']++; //record for warning
  $statsArray['total']++;
  if ( $row->prodStatus == 1 ) {
  if (CONVERT_CURRENCY) {
	  $row->price = preg_replace("/[^.0-9]/", "", $row->price);
	  $row->price = $row->price *  $row3->curUSD;
	  $row->price = number_format($row->price, 2, '.', OPTIONS_CURRENCY_THOUSANDS_POINT);
  }
  $availability = '';
  switch (OPTIONS_AVAILABILITY) {
	 case 'quantity': $availability = ($row->quantity > 0 ? 'in stock' : 'out of stock'); break;
	 case 'status':   $availability = ($row->prodStatus == 1 ? 'in stock' : 'out of stock'); break;
	 case '':		 $availability = $row->availability; break;
	 default:		 $availability = OPTIONS_AVAILABILITY;
  }
  $google_utm = (OPTIONS_ENABLED_GOOGLE_UTM ? OPTIONS_GOOGLE_UTM : '');
  if(SEO_ENABLED=='true'){
	  $output .= tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false) . $google_utm . "\t";
  } else {
	  $output .= $row->product_url . $google_utm . "\t";
  }
  $output .=
  preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->name, $_cleaner_array) ) ) . "\t" .
  preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->description, $_cleaner_array) ) ) . "\t" .
  $row->price . "\t" .
  $row->image_url . "\t" .
   //  $catIndex[$row->prodCatID] . "\t" .
  $row->id . "\t" .
  $availability;
  //optional values section
  if(OPTIONS_ENABLED == 1) {
	 if(OPTIONS_ENABLED_AGE_RANGE == 1)
	    $output .= "\t" . OPTIONS_AGE_RANGE;
	 if(OPTIONS_ENABLED_BRAND == 1)
	    $output .= "\t" . (isset($row->brand) ? $row->brand : (strlen(OPTIONS_BRAND) ? $row->name : "Not Supported"));
	 if(OPTIONS_ENABLED_CONDITION == 1)
	    $output .= "\t" . (isset($row->pcondition) ? $row->pcondition : OPTIONS_CONDITION);
	 if(OPTIONS_ENABLED_CURRENCY == 1)
	    $output .= "\t" . OPTIONS_CURRENCY;
	 if(OPTIONS_ENABLED_EXPIRATION == 1)
	    $output .= "\t" . $feed_exp_date;
	 if(OPTIONS_ENABLED_FEED_LANGUAGE == 1)
	    $output .= "\t" . OPTIONS_FEED_LANGUAGE;
	 if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1)
	    $output .= "\t" . (OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db' ? $row->google_category : OPTIONS_GOOGLE_PRODUCT_CATEGORY);
	 if(OPTIONS_ENABLED_GTIN == 1)
	    $output .= "\t" . (isset($row->gtin) ? $row->gtin : (strlen(OPTIONS_GTIN) ? OPTIONS_GTIN : "Not Supported"));
	 if(OPTIONS_ENABLED_ISBN == 1)
	    $output .= "\t" . (isset($row->isbn) ? $row->isbn : (strlen(OPTIONS_ISBN) ? OPTIONS_ISBN : "Not Supported"));
	 if(OPTIONS_ENABLED_MADE_IN == 1)
	    $output .= "\t" . OPTIONS_MADE_IN;
	 if(OPTIONS_ENABLED_MPN == 1)
	    $output .= "\t" . (isset($row->mpn) ? $row->mpn : (strlen(OPTIONS_MPN) ? OPTIONS_MPN : "Not Supported"));
	 if(OPTIONS_ENABLED_PRODUCT_MODEL == 1)
	    $output .= "\t" . (! empty($row->prodModel) ? $row->prodModel : $row->catName);
	 if(OPTIONS_ENABLED_PRODUCT_TYPE == 1)
	    $output .= "\t" . ((OPTIONS_PRODUCT_TYPE == strtolower('full')) ? $catIndex[$row->prodCatID] : $row->catName);
	 if(OPTIONS_ENABLED_SHIPPING == 1)
	    $output .= "\t" . OPTIONS_SHIPPING_STRING;
	 if(OPTIONS_ENABLED_INCLUDE_TAX == 1)
	    $output .= "\t" . OPTIONS_TAX_STRING;
	 if(OPTIONS_ENABLED_UPC == 1)
	    $output .= "\t" . (isset($row->upc) ? $row->upc : (strlen(OPTIONS_UPC) ? OPTIONS_UPC : "Not Supported"));
	 if(OPTIONS_ENABLED_WEIGHT == 1)
	    $output .= "\t" . $row->prodWeight . ' ' .OPTIONS_WEIGHT_ACCEPTED_METHODS;
	 /******************* BEGIN HANDLING THE ATTRIBUTES ********************/
	 if (OPTIONS_ENABLED_ATTRIBUTES == 1)
	 {
	    $products_attributes_query = mysql_query("select count(*) as total from products_options popt, products_attributes patrib where patrib.products_id='" . $row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "'");
	    $products_attributes = mysql_fetch_object($products_attributes_query);
	    if ($products_attributes->total > 0) {
		  $products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where patrib.products_id='" . (int)$row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());
		  $trackTabs = '';
		  while ($products_options_name = mysql_fetch_object($products_options_name_query)) {
		    $products_options_array = array();
		    $products_options_query = mysql_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from products_attributes pa, products_options_values pov where pa.products_id = '" . (int)$row->id . "' and pa.options_id = '" . $products_options_name->products_options_id . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)1 . "'");
		    while ($products_options = mysql_fetch_object($products_options_query)) {
			  $products_options_array[] = array('id' => $products_options->products_options_values_id, 'text' => $products_options->products_options_values_name);
		    }
		    for ($a = 0; $a < count($attributesColumns); ++$a)
		    {
			   if ($products_options_name->products_options_name == $attributesColumns[$a])
			   {
				 if ($a == 0)
				   $trackTabs = "\t";
				 else
				 {
				   if (empty($trackTabs))
					 $trackTabs = str_repeat("\t", $a);
				   $trackTabs .= "\t";
				 }
				 $output .= $trackTabs;
				 foreach ($products_options_array as $arr)
				   $output .=  $arr['text'] . ',';
				 $output = substr($output, 0, -1);
			   }
		    }
		  }
	    }
	 }
	 /******************* END HANDLING THE ATTRIBUTES ********************/
  }
  $output .= " \n";
  }
  $already_sent[$row->id] = 1;
  $loop_counter++;
  if ($loop_counter>750) {
  $fp = fopen( $OutFile , "a" );
  $fout = fwrite( $fp , $output );
  fclose( $fp );
  $loop_counter = 0;
  $output = "";
  }
}
$fp = fopen( $OutFile , "a" );
$fout = fwrite( $fp , $output );
fclose( $fp );
echo '<p style="margin:auto; text-align:left">';
printf( "Feed contains %d products.", $statsArray['total'] );
echo '</p>';
$warning = false;
if (count($statsArray['price']) > 0) {
 $warning = true;
 echo '<p style="margin:auto; text-align:left">';
 printf( "  ***Warning:*** There are %d products with a price of $0.", $statsArray['price'] );
 echo '</p>';
}
if (count($statsArray['qty']) > 0) {
 $warning = true;
 echo '<p style="margin:auto; text-align:left; padding-bottom:10px; ">';
 printf( "  ***Warning:*** There are %d products with a quantity of 0.", $statsArray['qty'] );
 echo '</p>';
}
$completed = 'File Completed' . ($warning ? ' (with warnings): ' : ':' );
echo "$completed <a href=\"../" . $OutFile . "\" target=\"_blank\">" . $destination_file . "</a><br>\n";
chmod($OutFile, 0777);

//Start FTP
function ftp_file( $ftpservername, $ftpusername, $ftppassword, $ftpsourcefile, $ftpdirectory, $ftpdestinationfile ) {
  // set up basic connection
  $conn_id = ftp_connect($ftpservername);
  if ( $conn_id == false ) {
  echo "FTP open connection failed to $ftpservername <BR>\n" ;
  return false;
  }
  // login with username and password
  $login_result = ftp_login($conn_id, $ftpusername, $ftppassword);
  // check connection
  if ((!$conn_id) || (!$login_result)) {
  echo "FTP connection has failed!<BR>\n";
  echo "Attempted to connect to " . $ftpservername . " for user " . $ftpusername . "<BR>\n";
  return false;
  } else {
  echo "Connected to " . $ftpservername . ", for user " . $ftpusername . "<BR>\n";
  }
  if ( strlen( $ftpdirectory ) > 0 ) {
  if (ftp_chdir($conn_id, $ftpdirectory )) {
	 echo "Current directory is now: " . ftp_pwd($conn_id) . "<BR>\n";
  } else {
	 echo "Couldn't change directory on $ftpservername<BR>\n";
	 return false;
  }
  }
  ftp_pasv ( $conn_id, true ) ;
  // upload the file
  $upload = ftp_put( $conn_id, $ftpdestinationfile, $ftpsourcefile, FTP_ASCII );
  // check upload status
  if (!$upload) {
  echo "$ftpservername: FTP upload has failed!<BR>\n";
  return false;
  } else {
  echo "Uploaded " . $ftpsourcefile . " to " . $ftpservername . " as " . $ftpdestinationfile . "<BR>\n";
  }
  // close the FTP stream
  ftp_close($conn_id);
  return true;
}
if (FTP_ENABLED)
  ftp_file( "uploads.google.com", FTP_USERNAME, FTP_PASSWORD, $source_file, "", $destination_file);
//End FTP

//  End TIMER
//  ---------
$etimer = explode( ' ', microtime() );
$etimer = $etimer[1] + $etimer[0];
echo '<p style="margin:auto; text-align:center">';
printf( "Script timer: <b>%f</b> seconds.", ($etimer-$stimer) );
echo '</p>';

//  ---------
?>

Link to comment
Share on other sites

I did. I don't have a GTIN, brand or MPN listing in my database.

Are you looking at the actual feed file in the feeds directory or are you using the link on the page where it says the file was created? They can be different if your shop is not setup correctly. The actual file is what you should be looking at.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

i have run into an issue with the new google feeder.

 

just to mention THANKS JACK!

 

: SQL error Unknown column 'DEFAULT_LANGUAGE_ID'in 'where clause'| catInfo = SELECT categories.categories_id AS curCatID, categories.parent_id AS parentCatID, categories_description.categories_name AS catName FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id AND categories_description.language_id = DEFAULT_LANGUAGE_ID

 

any ideas. ive changed the number that indicates the default language but it either dosnt like what i change it to or it has the same fault.

 

i have put an add-on on this. i re-added the ean addon but i shouldnt think it would affect it. it worked the first time round.

can somebody help please?

 

ive got the google feeder file below

 

<?php

// Title: Google Base Data Feeder

// Last Update: 12/25/09 by Jack_mcs at oscommerce-solution.com

// google feed requirements - http://www.google.co...n&answer=188494

 

chdir('../');

include_once 'includes/application_top.php';

 

/*************** BEGIN MASTER SETTINGS ******************/

 

define('SEO_ENABLED','false'); //Change to 'false' to disable if Ultimate SEO URLs is not installed

define('FEEDNAME', 'oscommerse_data_feed.txt'); //from your googlebase account

define('DOMAIN_NAME', 'www.vanity-flair-uk.com'); //your correct domain name (don't include www unless it is used)

define('FTP_USERNAME', 'xxxxxxxx'); //created from within your googlebase account

define('FTP_PASSWORD', 'xxxxxxxx'); //created from within your googlebase account

define('FTP_ENABLED', (isset($_GET['noftp']) ? '0' : '1')); //set to 0 to disable

define('CONVERT_CURRENCY', '0'); //set to 0 to disable - only needed if a feed in a difference currecny is required

define('CURRENCY_TYPE', 'GBP'); //(eg. USD, EUR, GBP)

define('DEFAULT_LANGUAGE', 0); //Change this to the id of your language. BY default 1 is english

define('QUOTES_CATEGORY_NAME',''); //if the Quotes contribution is installed, enter the name of the quotes category here

 

/*************** OPTIONS - IF ENABLED, ALSO SET THE SIMILAR OPTION FARTHER DOWN ******************/

define('OPTIONS_ENABLED', 1);

define('OPTIONS_ENABLED_AGE_RANGE', 0);

define('OPTIONS_ENABLED_ATTRIBUTES', 0);

define('OPTIONS_ENABLED_BRAND', 1); //if set, see options for this setting below

define('OPTIONS_ENABLED_CONDITION', 1);

define('OPTIONS_ENABLED_CURRENCY', 0);

define('OPTIONS_ENABLED_EXPIRATION', 1);

define('OPTIONS_ENABLED_FEED_LANGUAGE', 0);

define('OPTIONS_ENABLED_GTIN', 0); //if set, a database field named products_gtin must exist

define('OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY', 1); //http://www.google.com/support/merchants/bin/answer.py?answer=160081

define('OPTIONS_ENABLED_GOOGLE_UTM', 0);

define('OPTIONS_ENABLED_ISBN', 0); //if set, a database field named products_isbn must exist

define('OPTIONS_ENABLED_MADE_IN', 0);

define('OPTIONS_ENABLED_MPN', 1); //if set, see options for this setting below

define('OPTIONS_ENABLED_PRODUCT_MODEL', 0); //displays the product model

define('OPTIONS_ENABLED_PRODUCT_EAN', 1); //displays the products ean

define('OPTIONS_ENABLED_PRODUCT_TYPE', 1);

define('OPTIONS_ENABLED_SHIPPING', 0);

define('OPTIONS_ENABLED_INCLUDE_TAX', 0); //0 = no tax, 1 = uses google method, 2 = UK Vat

define('OPTIONS_ENABLED_UPC', 0); //if set, a database field named products_upc must exist

define('OPTIONS_ENABLED_WEIGHT', 0);

 

//some of the following only work if the matching option is enabled above.

define('OPTIONS_AGE_RANGE', '20-90 years');

 

define('OPTIONS_AVAILABILITY', 'in stock'); //in stock - Include this value if you are certain that it will ship (or be in-transit to the customer) in 3 business days or less.

//available for order - Include this value if it will take 4 or more business days to ship it to the customer.

//out of stock - You’re currently not accepting orders for this product.

//preorder - You are taking orders for this product, but it’s not yet been released.

//if empty (no entry), the data will be loaded from the database. A field in the products description table named products_availability is required

//if "quantity," the field will be popuplated via the quantity: 0 or less = out of stock, greater than 0 = in stock

//if "status," the field will be popuplated via the status field. in or out of stock

 

define('OPTIONS_BRAND', 'manu'); //leave blank to load from the database field named products_brand, set to "name" to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model

define('OPTIONS_CONDITION', 'new'); //possible entries are New, Refurbished, Used or blank, which loads from the database field named products_condition

define('OPTIONS_CURRENCY', 'USD');

define('OPTIONS_CURRENCY_THOUSANDS_POINT', ','); //this is the thousands point as in $1,000.

define('OPTIONS_DATE_FORMAT', 'Y-m-d'); //change how the date is formatted

define('OPTIONS_FEED_LANGUAGE', 'en');

define('OPTIONS_GOOGLE_UTM', '?utm_source=GoogleBase1&utm_medium=BaseFeed1&utm_campaign=products'); //see http://www.google.co...en&answer=55578

define('OPTIONS_GOOGLE_PRODUCT_CATEGORY', 'Health & Beauty > Personal Care'); //enter db to load from a database field named google_product_category enter or enter a specific google category - see taxomy - http://www.google.co...y?answer=160081

define('OPTIONS_GTIN', '');

define('OPTIONS_ISBN', '');

define('OPTIONS_MADE_IN', 'US');

define('OPTIONS_MPN', 'model'); //leave blank to load from the database field named products_mpn, set to "name" to substitute the products name, manu to substitute the manufactueres name or model to substitute the products model

define('OPTIONS_PRODUCT_TYPE', 'full'); //full means the full category path (i.e., hardware,printers), anything else, or blank, means just the products category (i.e., printers)

 

//the following is for the shipping override option - enter multiple values separated by a comma

//Format entries follow. A colon must be present for each field, whether it is entered or not.

// COUNTRY - OPTIONAL - If country isn't included, we'll assume the shipping price applies to the target country of the item. If region isn't included, the shipping price will apply across the entire country.

// REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)

// SERVICE - OPTIONAL - The service class or delivery speed, i.e. ground

// PRICE - REQUIRED - Fixed shipping price (assumes the same currency as the price attribute)

define('OPTIONS_SHIPPING_STRING', 'US:FL:Ground:7.00'); //says charge shipping to US for residents of Florida at 5% and don't apply tax to shipping

 

define('OPTIONS_TAX_RATE' , '20.0'); //default = 0 (e.g. for 20.0% tax use "$taxRate = 20.0;") //only used in the next line

define('OPTIONS_TAX_CALC', (OPTIONS_ENABLED_INCLUDE_TAX == 2 ? (OPTIONS_TAX_RATE/100) + 1 : '1')); //UK. US tax rate - US is ignorded since it is 1

//the following is for the tax override option - enter multiple values separated by a comma

//Format entries follow. A colon must be present for each field, whether it is entered or not.

// COUNTRY - OPTIONAL - country the tax applies to - only US for now

// REGION - OPTIONAL - blank for entire country, otherwise, us two-letter State (CA), full zip code (90210) or wildcard zip code (902*)

// TAX - REQUIRED - default = 0 (e.g. for 5.76% tax use 5.76)

// SHIPPING - OPTIONAL - do you charge tax on shipping - choices are y or n

define('OPTIONS_TAX_STRING', 'US:FL:5.00:n'); //says charge tax to US for residents of Florida at 5% and don't apply tax to shipping

 

define('OPTIONS_UPC', '');

define('OPTIONS_WEIGHT_ACCEPTED_METHODS', 'lb'); //Valid units include lb, pound, oz, ounce, g, gram, kg, kilogram.

 

//the following allow skipping certain items

define('OPTIONS_IGNORE_PRODUCT_PRICE', 1); //0 = include products with price of 0 in output, 1 = ignore products with price of 0

define('OPTIONS_IGNORE_PRODUCT_ZERO', 0); //0 = include products with qty of 0 in output, 1 = ignore products with qty of 0

 

/*************** END MASTER SETTINGS ******************/

 

 

/*************** NO EDITS NEEDED BELOW THIS LINE *****************/

 

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

// Start TIMER

// -----------

$stimer = explode( ' ', microtime() );

$stimer = $stimer[1] + $stimer[0];

// -----------

 

 

$OutFile = "feeds/" . FEEDNAME;

$destination_file = FEEDNAME;

$source_file = $OutFile;

$imageURL = 'http://' . DOMAIN_NAME . '/images/';

if(SEO_ENABLED=='true'){

$productURL = 'product_info.php'; // ***** Revised for SEO

$productParam = "products_id="; // ***** Added for SEO

}else{

$productURL = 'http://' . DOMAIN_NAME . '/product_info.php?products_id=';

}

 

$already_sent = array();

 

if(CONVERT_CURRENCY)

{

if(SEO_ENABLED=='true'){

$productParam="currency=" . CURRENCY_TYPE . "&products_id=";

}else{

$productURL = "http://" . DOMAIN_NAME . "/product_info.php?currency=" . CURRENCY_TYPE . "&products_id="; //where CURRENCY_TYPE is your currency type (eg. USD, EUR, GBP)

}

}

 

$feed_exp_date = @date(OPTIONS_DATE_FORMAT, time() + 2419200 );

 

if (!($link=mysql_connect(DB_SERVER,DB_SERVER_USERNAME,DB_SERVER_PASSWORD))) {

echo "Error when connecting itself to the data base";

exit();

}

if (!mysql_select_db( DB_DATABASE , $link )) {

echo "Error the data base does not exist";

exit();

}

 

$quotes = '';

if (QUOTES_CATEGORY_NAME !== '') {

$quotes = " and products.customers_email_address = '' and products.quotes_email_address = ''";

}

 

$extraFields = '';

if (OPTIONS_AVAILABILITY == '') {

$extraFields .= ' products_description.products_availability as availability, ';

}

if (OPTIONS_ENABLED_BRAND == 1) {

if (strlen(OPTIONS_BRAND) == 0) {

$extraFields .= ' products.products_brand as brand, ';

} else {

switch (OPTIONS_BRAND) {

case 'name': $extraFields .= ' products_description.products_name as brand, '; break;

case 'manu': $extraFields .= ' manufacturers.manufacturers_name as brand, '; break;

case 'model': $extraFields .= ' products.products_model as brand, '; break;

default: $extraFields .= ' products_description.products_name as brand, ';

}

}

}

if (OPTIONS_ENABLED_CONDITION == 1 && strlen(OPTIONS_CONDITION) == 0) {

$extraFields .= ' products.products_condition as pcondition, ';

}

if (OPTIONS_ENABLED_GTIN == 1 && strlen(OPTIONS_GTIN) == 0) {

$extraFields .= ' products.products_gtin as gtin, ';

}

if (OPTIONS_ENABLED_ISBN == 1 && strlen(OPTIONS_ISBN) == 0) {

$extraFields .= ' products.products_isbn as isbn, ';

}

if (OPTIONS_ENABLED_MPN == 1) {

if (strlen(OPTIONS_MPN) == 0) {

$extraFields .= ' products.products_mpn as mpn, ';

} else {

switch (OPTIONS_MPN) {

case 'name': $extraFields .= ' products_description.products_name as mpn, '; break;

case 'manu': $extraFields .= ' manufacturers.manufacturers_name as mpn, '; break;

case 'model': $extraFields .= ' products.products_model as mpn, '; break;

default: $extraFields .= ' products_description.products_name as mpn, ';

}

}

}

if (OPTIONS_ENABLED_UPC == 1 && strlen(OPTIONS_UPC) == 0) {

$extraFields .= ' products.products_upc as upc, ';

}

 

if (OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1 && OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db') {

$extraFields .= ' products_description.google_product_category as google_category, ';

}

 

 

$sql = "

SELECT concat( '" . $productURL . "' ,products.products_id) AS product_url,

products_model AS prodModel,

products_ean AS prodEAN,

manufacturers.manufacturers_id,

products.products_id AS id,

products_description.products_name AS name,

products_description.products_description AS description,

products.products_quantity AS quantity,

products.products_status AS prodStatus,

products.products_weight AS prodWeight, " . $extraFields . "

FORMAT( IFNULL(specials.specials_new_products_price, products.products_price) * " . OPTIONS_TAX_CALC . ",2) AS price,

CONCAT( '" . $imageURL . "' ,products.products_image) AS image_url,

products_to_categories.categories_id AS prodCatID,

categories.parent_id AS catParentID,

categories_description.categories_name AS catName

FROM (categories,

categories_description,

products,

products_description,

products_to_categories)

 

left join manufacturers on ( manufacturers.manufacturers_id = products.manufacturers_id )

left join specials on ( specials.products_id = products.products_id AND ( ( (specials.expires_date > CURRENT_DATE) OR (specials.expires_date is NULL) OR (specials.expires_date = 0) ) AND ( specials.status = 1 ) ) )

 

WHERE products.products_id=products_description.products_id

AND products.products_id=products_to_categories.products_id

AND products_to_categories.categories_id=categories.categories_id

AND categories.categories_id=categories_description.categories_id " . $quotes . "

AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "

AND products_description.language_id = " . DEFAULT_LANGUAGE_ID . "

ORDER BY

products.products_id ASC

";

 

$quotes = '';

if (QUOTES_CATEGORY_NAME !== '') {

$quotes = " and categories_description.categories_name NOT LIKE '" . QUOTES_CATEGORY_NAME . "' ";

}

 

$catInfo = "

SELECT

categories.categories_id AS curCatID,

categories.parent_id AS parentCatID,

categories_description.categories_name AS catName

FROM

categories,

categories_description

WHERE categories.categories_id = categories_description.categories_id " . $quotes . "

AND categories_description.language_id = " . DEFAULT_LANGUAGE_ID . "";

 

function findCat($curID, $catTempPar, $catTempDes, $catIndex) {

if( (isset($catTempPar[$curID])) && ($catTempPar[$curID] != 0) ) {

if(isset($catIndex[$catTempPar[$curID]])) {

$temp=$catIndex[$catTempPar[$curID]];

} else {

$catIndex = findCat($catTempPar[$curID], $catTempPar, $catTempDes, $catIndex);

$temp = $catIndex[$catTempPar[$curID]];

}

}

if( (isset($catTempPar[$curID])) && (isset($catTempDes[$curID])) && ($catTempPar[$curID] == 0) ) {

$catIndex[$curID] = $catTempDes[$curID];

} else {

$catIndex[$curID] = $temp . ", " . $catTempDes[$curID];

}

return $catIndex;

}

 

$catIndex = array();

$catTempDes = array();

$catTempPar = array();

$processCat = mysql_query( $catInfo )or die( $FunctionName . ": SQL error " . mysql_error() . "| catInfo = " . htmlentities($catInfo) );

 

while ( $catRow = mysql_fetch_object( $processCat ) ) {

$catKey = $catRow->curCatID;

$catName = $catRow->catName;

$catParID = $catRow->parentCatID;

if($catName != "") {

$catTempDes[$catKey]=$catName;

$catTempPar[$catKey]=$catParID;

}

}

 

foreach($catTempDes as $curID=>$des) { //don't need the $des

$catIndex = findCat($curID, $catTempPar, $catTempDes, $catIndex);

}

 

$_strip_search = array(

"![\t ]+$|^[\t ]+!m", // remove leading/trailing space chars

'%[\r\n]+%m'); // remove CRs and newlines

$_strip_replace = array(

'',

' ');

$_cleaner_array = array(">" => "> ", "®" => "", " " => " ", "®" => "", "™" => "", "™" => "", "\t" => "", " " => "", """ => "\"");

 

 

if ( file_exists( $OutFile ) ) {

unlink( $OutFile );

}

 

$output = "link\ttitle\tdescription\tprice\timage_link\tid\tavailability";

$attributesColumns = array();

 

//create optional section

if(OPTIONS_ENABLED == 1) {

if(OPTIONS_ENABLED_AGE_RANGE == 1) $output .= "\tage_range";

if(OPTIONS_ENABLED_BRAND == 1) $output .= "\tbrand";

if(OPTIONS_ENABLED_CONDITION == 1) $output .= "\tcondition";

if(OPTIONS_ENABLED_CURRENCY == 1) $output .= "\tcurrency";

if(OPTIONS_ENABLED_EXPIRATION == 1) $output .= "\texpiration_date";

if(OPTIONS_ENABLED_FEED_LANGUAGE == 1) $output .= "\tlanguage";

if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1) $output .= "\tgoogle product_category";

if(OPTIONS_ENABLED_GTIN == 1) $output .= "\tgtin";

if(OPTIONS_ENABLED_ISBN == 1) $output .= "\tisbn";

if(OPTIONS_ENABLED_MADE_IN == 1) $output .= "\tmade_in";

if(OPTIONS_ENABLED_MPN == 1) $output .= "\tmpn";

if(OPTIONS_ENABLED_PRODUCT_MODEL == 1) $output .= "\tmodel";

if(OPTIONS_ENABLED_PRODUCT_EAN == 1) $output .= "\tean";

if(OPTIONS_ENABLED_PRODUCT_TYPE == 1) $output .= "\tproduct_type";

if(OPTIONS_ENABLED_SHIPPING == 1) $output .= "\tshipping";

if(OPTIONS_ENABLED_INCLUDE_TAX == 1) $output .= "\ttax";

if(OPTIONS_ENABLED_UPC == 1) $output .= "\tupc";

if(OPTIONS_ENABLED_WEIGHT == 1) $output .= "\tweight";

 

if (OPTIONS_ENABLED_ATTRIBUTES == 1) {

$products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());

while ($products_options_name = mysql_fetch_object($products_options_name_query)) {

$attributesColumns[] = $products_options_name->products_options_name;

$name = strtolower($products_options_name->products_options_name);

$name = str_replace(" ","_", $name);

$output .= "\tc:" . $name;

}

 

/*

//If you want to only show particular attributes, comment out the above and uncomment this section.

//Then enter two lines for each one you want to show. For example, if the atttributes you want to

//show are named Color and Fabric, the entries would appear as follows:

 

$attributesColumns[] = "Color";

$attributesColumns[] = "Fabric";

 

$output .= "\tc:" . strtolower("Color");

$output .= "\tc:" . strtolower("Fabric");

*/

}

}

$output .= "\n";

 

 

$result=mysql_query( $sql )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql = " . htmlentities($sql) );

 

//Currency Information

if(CONVERT_CURRENCY) {

$sql3 = "

SELECT

currencies.value AS curUSD

FROM

currencies

WHERE currencies.code = '" . CURRENCY_TYPE . "'";

 

$result3=mysql_query( $sql3 )or die( $FunctionName . ": SQL error " . mysql_error() . "| sql3 = " . htmlentities($sql3) );

$row3 = mysql_fetch_object( $result3 );

}

 

$loop_counter = 0;

$statsArray = array();

 

while( $row = mysql_fetch_object( $result ) ) {

if (isset($already_sent[$row->id])) continue; // if we've sent this one, skip the rest of the while loop

if (OPTIONS_IGNORE_PRODUCT_PRICE > 0 && $row->price <= 0) continue; //skip products with 0 price

if (OPTIONS_IGNORE_PRODUCT_ZERO > 0 && $row->quantity < 1) continue; //skip products with 0 qty

if (OPTIONS_IGNORE_PRODUCT_PRICE < 1 && $row->price <= 0) $statsArray['price']++; //record for warning

if (OPTIONS_IGNORE_PRODUCT_ZERO < 1 && $row->quantity < 1) $statsArray['qty']++; //record for warning

 

$statsArray['total']++;

 

if ( $row->prodStatus == 1 ) {

if (CONVERT_CURRENCY) {

$row->price = preg_replace("/[^.0-9]/", "", $row->price);

$row->price = $row->price * $row3->curUSD;

$row->price = number_format($row->price, 2, '.', OPTIONS_CURRENCY_THOUSANDS_POINT);

}

 

$availability = '';

switch (OPTIONS_AVAILABILITY) {

case 'quantity': $availability = ($row->quantity > 0 ? 'in stock' : 'out of stock'); break;

case 'status': $availability = ($row->prodStatus == 1 ? 'in stock' : 'out of stock'); break;

case '': $availability = $row->availability; break;

default: $availability = OPTIONS_AVAILABILITY;

}

 

$google_utm = (OPTIONS_ENABLED_GOOGLE_UTM ? OPTIONS_GOOGLE_UTM : '');

 

if(SEO_ENABLED=='true'){

$output .= tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false) . $google_utm . "\t";

} else {

$output .= $row->product_url . $google_utm . "\t";

}

 

$output .=

preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->name, $_cleaner_array) ) ) . "\t" .

preg_replace($_strip_search, $_strip_replace, strip_tags( strtr($row->description, $_cleaner_array) ) ) . "\t" .

$row->price . "\t" .

$row->image_url . "\t" .

// $catIndex[$row->prodCatID] . "\t" .

$row->id . "\t" .

$availability;

 

//optional values section

if(OPTIONS_ENABLED == 1) {

if(OPTIONS_ENABLED_AGE_RANGE == 1)

$output .= "\t" . OPTIONS_AGE_RANGE;

if(OPTIONS_ENABLED_BRAND == 1)

$output .= "\t" . (isset($row->brand) ? $row->brand : (strlen(OPTIONS_BRAND) ? $row->name : "Not Supported"));

if(OPTIONS_ENABLED_CONDITION == 1)

$output .= "\t" . (isset($row->pcondition) ? $row->pcondition : OPTIONS_CONDITION);

if(OPTIONS_ENABLED_CURRENCY == 1)

$output .= "\t" . OPTIONS_CURRENCY;

if(OPTIONS_ENABLED_EXPIRATION == 1)

$output .= "\t" . $feed_exp_date;

if(OPTIONS_ENABLED_FEED_LANGUAGE == 1)

$output .= "\t" . OPTIONS_FEED_LANGUAGE;

if(OPTIONS_ENABLED_GOOGLE_PRODUCT_CATEGORY == 1)

$output .= "\t" . (OPTIONS_GOOGLE_PRODUCT_CATEGORY == 'db' ? $row->google_category : OPTIONS_GOOGLE_PRODUCT_CATEGORY);

if(OPTIONS_ENABLED_GTIN == 1)

$output .= "\t" . (isset($row->gtin) ? $row->gtin : (strlen(OPTIONS_GTIN) ? OPTIONS_GTIN : "Not Supported"));

if(OPTIONS_ENABLED_ISBN == 1)

$output .= "\t" . (isset($row->isbn) ? $row->isbn : (strlen(OPTIONS_ISBN) ? OPTIONS_ISBN : "Not Supported"));

if(OPTIONS_ENABLED_MADE_IN == 1)

$output .= "\t" . OPTIONS_MADE_IN;

if(OPTIONS_ENABLED_MPN == 1)

$output .= "\t" . (isset($row->mpn) ? $row->mpn : (strlen(OPTIONS_MPN) ? OPTIONS_MPN : "Not Supported"));

if(OPTIONS_ENABLED_PRODUCT_MODEL == 1)

$output .= "\t" . (! empty($row->prodModel) ? $row->prodModel : $row->catName);

if(OPTIONS_ENABLED_PRODUCT_EAN == 1)

$output .= "\t" . $row->prodEAN;

if(OPTIONS_ENABLED_PRODUCT_TYPE == 1)

$output .= "\t" . ((OPTIONS_PRODUCT_TYPE == strtolower('full')) ? $catIndex[$row->prodCatID] : $row->catName);

if(OPTIONS_ENABLED_SHIPPING == 1)

$output .= "\t" . OPTIONS_SHIPPING_STRING;

if(OPTIONS_ENABLED_INCLUDE_TAX == 1)

$output .= "\t" . OPTIONS_TAX_STRING;

if(OPTIONS_ENABLED_UPC == 1)

$output .= "\t" . (isset($row->upc) ? $row->upc : (strlen(OPTIONS_UPC) ? OPTIONS_UPC : "Not Supported"));

if(OPTIONS_ENABLED_WEIGHT == 1)

$output .= "\t" . $row->prodWeight . ' ' .OPTIONS_WEIGHT_ACCEPTED_METHODS;

 

/******************* BEGIN HANDLING THE ATTRIBUTES ********************/

if (OPTIONS_ENABLED_ATTRIBUTES == 1)

{

$products_attributes_query = mysql_query("select count(*) as total from products_options popt, products_attributes patrib where patrib.products_id='" . $row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "'");

$products_attributes = mysql_fetch_object($products_attributes_query);

if ($products_attributes->total > 0) {

$products_options_name_query = mysql_query("select distinct popt.products_options_id, popt.products_options_name from products_options popt, products_attributes patrib where patrib.products_id='" . (int)$row->id . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)1 . "' order by popt.products_options_name") or die(mysql_error());

 

$trackTabs = '';

 

while ($products_options_name = mysql_fetch_object($products_options_name_query)) {

$products_options_array = array();

$products_options_query = mysql_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from products_attributes pa, products_options_values pov where pa.products_id = '" . (int)$row->id . "' and pa.options_id = '" . $products_options_name->products_options_id . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)1 . "'");

while ($products_options = mysql_fetch_object($products_options_query)) {

$products_options_array[] = array('id' => $products_options->products_options_values_id, 'text' => $products_options->products_options_values_name);

}

 

for ($a = 0; $a < count($attributesColumns); ++$a)

{

if ($products_options_name->products_options_name == $attributesColumns[$a])

{

if ($a == 0)

$trackTabs = "\t";

else

{

if (empty($trackTabs))

$trackTabs = str_repeat("\t", $a);

$trackTabs .= "\t";

}

 

$output .= $trackTabs;

foreach ($products_options_array as $arr)

$output .= $arr['text'] . ',';

$output = substr($output, 0, -1);

}

}

}

}

}

/******************* END HANDLING THE ATTRIBUTES ********************/

}

$output .= " \n";

}

 

$already_sent[$row->id] = 1;

$loop_counter++;

 

if ($loop_counter>750) {

$fp = fopen( $OutFile , "a" );

$fout = fwrite( $fp , $output );

fclose( $fp );

$loop_counter = 0;

$output = "";

}

}

 

$fp = fopen( $OutFile , "a" );

$fout = fwrite( $fp , $output );

fclose( $fp );

 

echo '<p style="margin:auto; text-align:left">';

printf( "Feed contains %d products.", $statsArray['total'] );

echo '</p>';

 

$warning = false;

if (count($statsArray['price']) > 0) {

$warning = true;

echo '<p style="margin:auto; text-align:left">';

printf( " ***Warning:*** There are %d products with a price of $0.", $statsArray['price'] );

echo '</p>';

}

 

if (count($statsArray['qty']) > 0) {

$warning = true;

echo '<p style="margin:auto; text-align:left; padding-bottom:10px; ">';

printf( " ***Warning:*** There are %d products with a quantity of 0.", $statsArray['qty'] );

echo '</p>';

}

 

$completed = 'File Completed' . ($warning ? ' (with warnings): ' : ':' );

 

echo "$completed <a href=\"../" . $OutFile . "\" target=\"_blank\">" . $destination_file . "</a><br>\n";

chmod($OutFile, 0777);

 

 

//Start FTP

 

function ftp_file( $ftpservername, $ftpusername, $ftppassword, $ftpsourcefile, $ftpdirectory, $ftpdestinationfile ) {

// set up basic connection

$conn_id = ftp_connect($ftpservername);

if ( $conn_id == false ) {

echo "FTP open connection failed to $ftpservername <BR>\n" ;

return false;

}

 

// login with username and password

$login_result = ftp_login($conn_id, $ftpusername, $ftppassword);

 

// check connection

if ((!$conn_id) || (!$login_result)) {

echo "FTP connection has failed!<BR>\n";

echo "Attempted to connect to " . $ftpservername . " for user " . $ftpusername . "<BR>\n";

return false;

} else {

echo "Connected to " . $ftpservername . ", for user " . $ftpusername . "<BR>\n";

}

 

if ( strlen( $ftpdirectory ) > 0 ) {

if (ftp_chdir($conn_id, $ftpdirectory )) {

echo "Current directory is now: " . ftp_pwd($conn_id) . "<BR>\n";

} else {

echo "Couldn't change directory on $ftpservername<BR>\n";

return false;

}

}

 

ftp_pasv ( $conn_id, true ) ;

// upload the file

$upload = ftp_put( $conn_id, $ftpdestinationfile, $ftpsourcefile, FTP_ASCII );

 

// check upload status

if (!$upload) {

echo "$ftpservername: FTP upload has failed!<BR>\n";

return false;

} else {

echo "Uploaded " . $ftpsourcefile . " to " . $ftpservername . " as " . $ftpdestinationfile . "<BR>\n";

}

 

// close the FTP stream

ftp_close($conn_id);

 

return true;

}

 

if (FTP_ENABLED)

ftp_file( "uploads.google.com", FTP_USERNAME, FTP_PASSWORD, $source_file, "", $destination_file);

 

//End FTP

 

 

// End TIMER

// ---------

$etimer = explode( ' ', microtime() );

$etimer = $etimer[1] + $etimer[0];

 

echo '<p style="margin:auto; text-align:center">';

printf( "Script timer: <b>%f</b> seconds.", ($etimer-$stimer) );

echo '</p>';

 

 

 

 

// ---------

 

?>

Link to comment
Share on other sites

i have run into an issue with the new google feeder.

 

just to mention THANKS JACK!

 

: SQL error Unknown column 'DEFAULT_LANGUAGE_ID'in 'where clause'| catInfo = SELECT categories.categories_id AS curCatID, categories.parent_id AS parentCatID, categories_description.categories_name AS catName FROM categories, categories_description WHERE categories.categories_id = categories_description.categories_id AND categories_description.language_id = DEFAULT_LANGUAGE_ID

 

any ideas. ive changed the number that indicates the default language but it either dosnt like what i change it to or it has the same fault.

 

i have put an add-on on this. i re-added the ean addon but i shouldnt think it would affect it. it worked the first time round.

can somebody help please?

 

ive got the google feeder file below

 

You are missing the definition because you didn't convert the googlefeeder file correctly. You should replace your googlefeeder file completely and then set up the new one.

Support Links:

For Hire: Contact me for anything you need help with for your shop: upgrading, hosting, repairs, code written, etc.

All of My Addons

Get the latest versions of my addons

Recommended SEO Addons

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...