panthercoug Posted February 9, 2013 Share Posted February 9, 2013 Looking for a little help, I have the YMM addon installed also. It has its own table (products_ymm) with products_id, products_year, products_make, and products_model columns. I would like to modify googlefeeder.php to combine the year, make, and model and export them all in one (applications) collumn in the feed. The (products_ymm) table has multiple rows with matching product_id. Link to comment Share on other sites More sharing options...
Rachael w. Posted February 9, 2013 Share Posted February 9, 2013 I have a tobacciana category that google does not like, therefore my feed is not accepted. Is there a way to exclude one category from the feed? I've been searching for a week and cant figure it out. Thanks in advance for your help Link to comment Share on other sites More sharing options...
Jack_mcs Posted February 9, 2013 Share Posted February 9, 2013 No, there isn't code for that in the file, though it could be added. You can exclude products though so if there are not too many, that would be the way to go. See the exclude products option in the googlefeeder.php 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 More sharing options...
Rachael w. Posted February 18, 2013 Share Posted February 18, 2013 No, there isn't code for that in the file, though it could be added. You can exclude products though so if there are not too many, that would be the way to go. See the exclude products option in the googlefeeder.php file. Â I'm looking in the googlefeeder.php file, I don't see where I can add a product number to exclude. Can you point me in the right direction? Â Thanks! Link to comment Share on other sites More sharing options...
Jack_mcs Posted February 18, 2013 Share Posted February 18, 2013 Oops, sorry. You can't in this version. I'm used to installing the next version, which is not released yet, and it has that option in it. 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 More sharing options...
Hoezozinloos Posted March 1, 2013 Share Posted March 1, 2013 Yes, I have the latest version ... Â Any idea? Â Can help me? Â Thanks a lot! Â Log in to your PHPmyadmin, Â go to the colum LANGUAGE Â and look what for ID your language have.. Link to comment Share on other sites More sharing options...
duderino3 Posted June 28, 2013 Share Posted June 28, 2013 hi  i´ve installed the 3.0 version at my shop http://www.ttshop-leipzig.de/neu/  when i´m starting the googlefeeder.php, the following is showing  "Feed contains 0 products."  and by the bingfeeder:  Warning: include_once(../includes/classes/seo.class.php) [function.include-once]: failed to open stream: No such file or directory in /homepages/19/d354015910/htdocs/ttshop-leipzig.de/catalog/neu/admin/bingfeeder.php on line 82  Warning: include_once() [function.include]: Failed opening '../includes/classes/seo.class.php' for inclusion (include_path='.:/usr/lib/php5') in /homepages/19/d354015910/htdocs/ttshop-leipzig.de/catalog/neu/admin/bingfeeder.php on line 82  Fatal error: Class 'SEO_URL' not found in /homepages/19/d354015910/htdocs/ttshop-leipzig.de/catalog/neu/admin/bingfeeder.php on line 83   What can i do, to get my products in the txt file?  Thanks Link to comment Share on other sites More sharing options...
Jack_mcs Posted June 28, 2013 Share Posted June 28, 2013 The feed won't be created if the script fails, which is what fatal error means. If you don't have one of the recognized url rewriters installed, you need to turn off the seo url setting in the 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 More sharing options...
duderino3 Posted June 28, 2013 Share Posted June 28, 2013 i have turned the url_rewriting in the htaccess and put it on true in the admin menu, seems not to be enough or? Â the google problem is solved, was the language id turned to 2 Link to comment Share on other sites More sharing options...
mk_osc Posted August 10, 2013 Share Posted August 10, 2013 Google has new rules on attributes for custom goods or old books before 1970 and collectibles. The ‘identifier exists’ attribute must be provided with a value of FALSE. I had an account level exemption by google all the time for my items, since there is no unique product identifier available for my items. But this is no longer supported. Instead google requires this new attribute now.  Since this module doesn't support it yet in the most recent v3.0 and google USA is already enforcing this new policy since 15-july-2013, already half of my items are disapproved by Google. Anyone else with the problem ? Will an update come ? Google will begin to enforce this new rule in other countries as well, starting 15-sep-2013. Thanks. Link to comment Share on other sites More sharing options...
Jack_mcs Posted August 11, 2013 Share Posted August 11, 2013 In the googlefeeder file, find $output = "link\ttitle\tdescription\tprice\timage_link\tid\tavailability"; and change it to $output = "link\ttitle\tdescription\tprice\timage_link\tid\tavailability\tidentifier_exists"; Then find //optional values section and add above it $row->id . "\t" . 'FALSE'; If you have some products that do have ISBN's, then this won't work. 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 More sharing options...
mk_osc Posted August 12, 2013 Share Posted August 12, 2013 Dear Jack, thanks for the quick response. I've just applied the suggested modifiations, but after uploading it to google, I receive this error: Too few column delimiters and 0 items have been inserted. I do not have ISBN's. hmm, any idea what might be wrong ? Â // $catIndex[$row->prodCatID] . "\t" . $row->id . "\t" . $availability; $row->id . "\t" . 'FALSE'; //optional values section Link to comment Share on other sites More sharing options...
Jack_mcs Posted August 12, 2013 Share Posted August 12, 2013 The $row->id . "\t" . 'FALSE'; should be $output .= "\t" . 'FALSE'; 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 More sharing options...
mk_osc Posted August 12, 2013 Share Posted August 12, 2013 Awesome, that did the trick. Just two lines of code, wow :thumbsup: Link to comment Share on other sites More sharing options...
blaine109 Posted August 18, 2013 Share Posted August 18, 2013 Jack, Â I did a search for it but did not find an answer to my question. I have products and I have copied them as a "link" to it in other categories in my store. When I run the googlefeeder file, I end up with duplicate items. All the duplicates are the items that are "shadowed" in other categories. The only data that is different for the duplicate entries in the output file is what is held in the product_type field. That is because techincially it is displayed in 2 separate categories. Any ideas? Â Thanks, Blaine Link to comment Share on other sites More sharing options...
Jack_mcs Posted August 19, 2013 Share Posted August 19, 2013 I'm not sure I follow since you said copied as a link. If they are actual linked products, then there should be only one in the feed, I think. But if you actually copied them, then they have different product ID's are two entries should be present. 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 More sharing options...
duderino3 Posted August 28, 2013 Share Posted August 28, 2013 Hi Jack.  Thanks for your tip with the output = FALSE. I did that too, but now there comes an error from google:  Zeile 2 "identifier_exists" wurde auf falsch gesetzt, obwohl Produktkennzeichnungen angegeben wurden. Wenn Produktkennzeichnungen angegeben werden, sollte "identifier_exists" auf wahr gesetzt oder gar nicht festgelegt werden. Wird "identifier_exists" auf falsch gesetzt, obwohl Produktkennzeichnungen vorhanden sind, könnte dies das künftige Ranking eines Artikels beeinflussen.  here´s the translation:  Line 2 "identifier_exists" is set to false, even though product labels have been specified. If product labels are specified, "identifier_exists" should be set to true or not will be determined. If "identifier_exists" is set to false, even though product labels are present, which may influence the ranking of a future article.  do you know where i have to delete the determination of the product labels ?  thanks Link to comment Share on other sites More sharing options...
duderino3 Posted August 28, 2013 Share Posted August 28, 2013 here´s my file, maybe its the product_type?:  <?php // Title: Google Base Data Feeder // Version: 3.0 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';   /*************** 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_GOOGLE-PRODUKTKATEGORIE', 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_PRODUCT_EAN', 0); //displays the products ean 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_TYPE', 1); define('OPTIONS_ENABLED_SHIPPING', 1); define('OPTIONS_ENABLED_AVAILABILITY', 1); define('OPTIONS_ENABLED_INCLUDE_TAX', 1); //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', 'EUR'); 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', 'de'); 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', 'Sportartikel > Sportarten und Spiele für drinnen > Tischtennis'); //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', 'identifier exists'); define('OPTIONS_ISBN', ''); define('OPTIONS_MADE_IN', 'US'); define('OPTIONS_MPN', 'name'); //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', 'model'); //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 shipping to US for residents of Florida at 5% and don't apply tax to shipping  define('OPTIONS_TAX_RATE' , '19'); //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 == 1 ? (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', ''); //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', 'kg'); //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]; // -----------  define('FTP_ENABLED', (isset($_GET['noftp']) ? '0' : '1')); //DO NOT CHANGE THIS LINE $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\tidentifier_exists"; $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_PRODUCT_EAN == 1) $output .= "\tean"; 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(); //record messages $statsArrayPrice = array(); //record prices of 0 $statsArrayQty = array(); //record quantities of 0 $showPriceZero = false; $showQtyZero = false;   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 && $row->prodStatus == 1) {$statsArray['price']++; $showPriceZero = true; }//record for warning if (OPTIONS_IGNORE_PRODUCT_ZERO < 1 && $row->quantity < 1 && $row->prodStatus == 1) {$statsArray['qty']++; $showQtyZero = true; } //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 : ''); $pURL = $row->product_url;  if(SEO_ENABLED=='true'){ $output .= tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false) . $google_utm . "\t"; $pURL = tep_href_link($productURL,$productParam . $row->id, 'NONSSL', false); } else { $output .= $row->product_url . $google_utm . "\t"; }  if ($showPriceZero) { $showPriceZero = false; $statsArrayPrice[] = $pURL; } if ($showQtyZero) { $showQtyZero = false; $statsArrayQty[] = $pURL; }  $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; $output .= "\t" . 'FALSE'; //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_PRODUCT_EAN == 1) $output .= "\t" . $row->prodEAN; 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; padding:10px; 0px">'; printf( "***Warning:*** There are %d products with a price of $0.<br>", $statsArray['price'] );  for ($i = 0; $i < count($statsArrayPrice); ++$i) { echo '   ' . $i . ' - ' . $statsArrayPrice[$i] .'<br>'; }  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.<br>", $statsArray['qty'] );  for ($i = 0; $i < count($statsArrayQty); ++$i) { echo '   ' . $i . ' - ' . $statsArrayQty[$i] .'<br>'; }  echo '</p>'; }  $completed = 'File Completed' . ($warning ? ' (with warnings): ' : ':' );  echo '<p style="margin:auto; text-align:left">'; echo "$completed <a href=\"../" . $OutFile . "\" target=\"_blank\">" . $destination_file . "</a><br>\n\n"; echo '</p>';   $csvFileDest = str_replace('.txt', '.csv', $destination_file); $csvFileLocn = str_replace('.txt', '.csv', $OutFile); $csvStr = str_replace("\t", '",", ', $output);  $fp = fopen( $csvFileLocn , "a" ); $fout = fwrite( $fp , $csvStr ); fclose( $fp );  echo '<p style="margin:auto; text-align:left; padding-top:10px;">'; echo 'Use the following for easier viewing from this page. It is still in development and not meant for anything other than viewing.' . "<br>\n\n"; echo "$completed <a href=\"../" . $csvFileLocn . "\" target=\"_blank\">" . $csvFileDest . "</a><br>\n"; echo '</p>';   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 More sharing options...
Jack_mcs Posted August 28, 2013 Share Posted August 28, 2013 As mentioned in my post regarding that column, it won't work if some products have the other column filled, which is what the error is telling you. In that case, the code would need to be changed to check the database for an existing entry and then set the identifier accordingly. That isn't something I could quickly put together in a support thread 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 More sharing options...
duderino3 Posted August 28, 2013 Share Posted August 28, 2013 ok, and what column field do you mean? maybe it helps to delete all these entries from all products that google could see that there are no entries? Link to comment Share on other sites More sharing options...
Jack_mcs Posted August 28, 2013 Share Posted August 28, 2013 It depends on your feed and what error you are getting but probably ISBN or GTIN. 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 More sharing options...
duderino3 Posted August 29, 2013 Share Posted August 29, 2013 hmm i only got free chosen article numbers for my products, maybe i should delete all of them? now my articles are active but dosn´t appear in the searchresults on google shopping... Link to comment Share on other sites More sharing options...
Jack_mcs Posted August 29, 2013 Share Posted August 29, 2013 You can skip those in the feed instead of deleting them. I don't recall if I uploaded the version with that change in it but it was posted in this thread if not. 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 More sharing options...
blaine109 Posted September 4, 2013 Share Posted September 4, 2013 I'm not sure I follow since you said copied as a link. If they are actual linked products, then there should be only one in the feed, I think. But if you actually copied them, then they have different product ID's are two entries should be present. No, I did not duplicate the item. The item is just "mirrored" in a different category. Let's say that I have 1 item but it is mirrored (Copy To -> Link) in 3 different categories. In the feed it will be like this: Â Item 1 :: Category 1 Item 1 :: Category 2 Item 1 :: Category 3 Link to comment Share on other sites More sharing options...
Jack_mcs Posted September 4, 2013 Share Posted September 4, 2013 I don't see how they are showing as duplicates. If they are linked, there's nothing in the code to find them, at least not that I can think of, so there should only be one entry. If they are being found, then the code would need to be changed to look at the product ID's so they are only listed once. But then there would be the problem of which one is the main one. The easiest way to go would be to add a field that marks a product as being a link. Then change the googlefeeder file to ignore any product with that field set. 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.