Installation Instructions For Google Product Search Feeder
Installation (Zen Cart 1.3.8a to 1.5.0+) Tips Uninstall Help
ABOUT US
backtotop
Title:Google Product Search Feeder
Author:Numinix
Description:Generates a Google Product Feed for Zen Cart stores.
Installation Level:Easy
Installation Time:< 5 minutes
Author Notes:Zen Cart is the copyright of the Zen Cart Development Team.
DISCLAIMER
backtotop
This module is installed at your own risk. If you are unsure of how to complete the installation procedure documented below, please view our help section for additional information. Numinix Web Development LLC takes no responsibility for problems related to the installation of this module.
LICENSE
backtotop
Before installing this module, you agree to abide by these license terms.
INSTALLATION (ZEN CART 1.3.8a to 1.5.0)
backtotop
  1. Make sure PHP5+ (PHP4 not supported) is compiled with libXML (contact your host if you do not have libXML).
  2. Uninstall Google Merchant Center Feeder from your store if installed. Note, this module will replace the configuration menu automatically. Ensure that your settings are copied to a text file for re-adding.
  3. (Optional) If using attributes to offer variations of your products, install Stock by Attributes (refer to the tips section for more information).
  4. (Optional) Convert your Zen Cart files and database to accept UTF-8 characters by following our UTF-8 conversion tutorial.
  5. Unzip and upload all files to your Zen Cart catalog (rename admin folder to your custom folder name).
  6. Allow full access permissions to /feed/ and sub-directories (i.e. CHMOD 777).
  7. Go to Admin->Configuration->Google Product Search Feeder Configuration and setup all parameters.
  8. Go to Admin->Tools->Google Product Search Feeder and follow instructions to create your feed.
  9. Login to your Google Merchant Center account and register the file that was created in the above step. You can also schedule Google to crawl this file.
TIPS
backtotop
  • To have this update and automatically upload to Google Merchant Center, you will need to set up a Cron job via your host's control panel.
  • To run it as a cron job, copy the suggested cron job command from the Google Product Search Feeder tool in your Zen Cart admin (ADMIN->TOOLS->GOOGLE PRODUCT SEARCH FEEDER). Ask your host for assistance with scheduling up a cron job.
  • If your host has disabled cron jobs, try webcron services such as http://www.webcron.org/
  • This module supports adding required fields as attributes to your products (you can set them to display only and then modify your template to not show display only attributes). Supported attributes are: Size, Color, Age Group, Gender, Material, Pattern, UPC, ISBN, EAN, and Google Product Category. Please use these exact names when creating your Option Names in Zen Cart.
    1. First, create an attribute option name (i.e. Size - If you do not want this to be a selectable option on your product pages, you will need to set this to READ ONLY. I you want to hide completely, you will need to adjust your template files to skip DISPLAY ONLY attributes, see step 3)
    2. Next, create an option value for the option name created in step 1 (i.e. Small)
    3. Go to ADMIN->CATALOG->ATTRIBUTES CONTROLLER and assign the option to a product being sure to select display only. You can stop these from displaying by performing the following modification:
      • Find in includes/modules/YOUR_TEMPLATE/attributes.php (around line 22):
        Code: SELECT ALL
        
        $sql = "select count(*) as total
                from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib
                where    patrib.products_id='" . (int)$_GET['products_id'] . "'
                  and      patrib.options_id = popt.products_options_id
                  and      popt.language_id = '" . (int)$_SESSION['languages_id'] . "'" .
                  " limit 1";
        
        
                  $pr_attr = $db->Execute($sql);
        
                  if ($pr_attr->fields['total'] > 0) {
                    if (PRODUCTS_OPTIONS_SORT_ORDER=='0') {
                      $options_order_by= ' order by LPAD(popt.products_options_sort_order,11,"0")';
                    } else {
                      $options_order_by= ' order by popt.products_options_name';
                    }
        
                    $sql = "select distinct popt.products_options_id, popt.products_options_name, popt.products_options_sort_order,
                                    popt.products_options_type, popt.products_options_length, popt.products_options_comment,
                                    popt.products_options_size,
                                    popt.products_options_images_per_row,
                                    popt.products_options_images_style,
                                    popt.products_options_rows
                    from        " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib
                    where           patrib.products_id='" . (int)$_GET['products_id'] . "'
                    and             patrib.options_id = popt.products_options_id
                    and             popt.language_id = '" . (int)$_SESSION['languages_id'] . "' " .
                    $options_order_by;
        
      • Replace With:
        Code: SELECT ALL
        
        $sql = "select count(*) as total
                from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib
                where    patrib.products_id='" . (int)$_GET['products_id'] . "'
                  and      patrib.attributes_display_only = 0 
                  and      patrib.options_id = popt.products_options_id
                  and      popt.language_id = '" . (int)$_SESSION['languages_id'] . "'" .
                  " limit 1";
        
        
                  $pr_attr = $db->Execute($sql);
        
                  if ($pr_attr->fields['total'] > 0) {
                    if (PRODUCTS_OPTIONS_SORT_ORDER=='0') {
                      $options_order_by= ' order by LPAD(popt.products_options_sort_order,11,"0")';
                    } else {
                      $options_order_by= ' order by popt.products_options_name';
                    }
        
                    $sql = "select distinct popt.products_options_id, popt.products_options_name, popt.products_options_sort_order,
                                    popt.products_options_type, popt.products_options_length, popt.products_options_comment,
                                    popt.products_options_size,
                                    popt.products_options_images_per_row,
                                    popt.products_options_images_style,
                                    popt.products_options_rows
                    from        " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib
                    where           patrib.products_id='" . (int)$_GET['products_id'] . "'
                    and             patrib.attributes_display_only = 0
                    and             patrib.options_id = popt.products_options_id
                    and             popt.language_id = '" . (int)$_SESSION['languages_id'] . "' " .
                    $options_order_by;
        
    4. When the tool is run, it will automatically use this data
    5. Alternatively, if you have Stock by Attributes (SBA) installed and you need for a single product to support multiple options (i.e. Small, Medium, Large, XL, XXL), create stock combinations in SBA and GPSF will automatically create variants for each stock combination
  • For security, protect your /feed/ folder with .htacess and .htpasswd files
UNINSTALL
backtotop
  1. Delete all uploaded files
  2. Patch your database with the uninstall.sql file located in the root of the installation package
HELP
backtotop
  • If your script is timing out, go to ADMIN->CONFIGURATION->GOOGLE PRODUCT SEARCH FEEDER CONFIGURATION and adjust the configuration options in your to increase the max execution time.
  • If the tool is not displaying in your admin, check that you uploaded the admin files from /YOUR_ADMIN/ to your admin folder.
  • If you are having issues with the FTP function, please contact your host to make sure all the required ports for PHP FTP functions are open. It is recommended to set Google to crawl your feed on a schedule rather than submit it yourself (only set the cron to generate the feed in this case).
  • If the FTP function is timing out, as indicated by a timeout error, increase the timeout length in /YOUR_ADMIN/google_product_search.php near the beginning of the file.
  • Promotional text and shipping information in your descriptions will cause your feed to be rejected. Instead store this information in a custom field (i.e. create new fields with Numinix Product Fields).
  • To see why not all activated products are included in the feed, turn on the debug function in ADMIN->CONFIGURATION->GOOGLE PRODUCT SEARCH FEEDER CONFIGURATION. Note that products with duplicate titles or are missing an image file will be silently skipped.
  • For additional troubleshooting, please visit the support thread, read the entire thread for existing bugs or installation support before posting your questions.
Copyright © 2006-2013 Numinix Web Development LTD. Web design by Numinix