I am using the following script to export a list of our products to send to Google for their shopping listing service (Google Base). The script works well, but it leaves the brand and manufacturer columns empty:
<?php
define('SAVE_FEED_LOCATION','google_base_feed.txt');
set_time_limit(1800);
require_once '../app/Mage.php';
Mage::app('default');
try{
$handle = fopen(SAVE_FEED_LOCATION, 'w');
$heading = array('id','mpn', 'upc','title','description','link','image_link','price','brand','product_type','condition', 'google_product_category', 'manufacturer', 'availability');
$feed_line=implode("\t", $heading)."\r\n";
fwrite($handle, $feed_line);
$products = Mage::getModel('catalog/product')->getCollection();
$products->addAttributeToFilter('status', 1);
$products->addAttributeToFilter('visibility', 4);
$products->addAttributeToSelect('*');
$prodIds=$products->getAllIds();
$product = Mage::getModel('catalog/product');
$counter_test = 0;
foreach($prodIds as $productId) {
if (++$counter_test < 30000){
$product->load($productId);
$product_data = array();
$product_data['sku'] = $product->getSku();
$product_data['mpn'] = $product->getData('upc');
$product_data['upc'] = $product->getData('upc');
$title_temp = $product->getName();
if (strlen($title_temp) > 70){
$title_temp = str_replace("Supply", "", $title_temp);
$title_temp = str_replace(" ", " ", $title_temp);
}
$product_data['title'] = $title_temp;
$product_data['description'] = substr(iconv("UTF-8","UTF-8//IGNORE",$product->getDescription()), 0, 900);
$product_data['Deeplink'] = "http://www.domainname.co.uk/store/".$product->getUrlPath();
$product_data['image_link'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
$price_temp = round($product->getPrice(),2);
$product_data['price'] = round($product->getPrice(),2) *
1.2;
$product_data['brand'] = $product->getAttribute('manufacturer');
$product_data['product_type'] = 'Pet Products and Accessories';
$product_data['condition'] = "new";
$product_data['category'] = $product_data['brand'];
$product_data['manufacturer'] = $product_data['brand'];
$product_data['availability'] = "in stock";
foreach($product_data as $k=>$val){
$bad=array('"',"\r\n","\n","\r","\t");
$good=array(""," "," "," ","");
$product_data[$k] = '"'.str_replace($bad,$good,$val).'"';
}
echo $counter_test . " ";
$feed_line = implode("\t", $product_data)."\r\n";
fwrite($handle, $feed_line);
fflush($handle);
}
}
fclose($handle);
}
catch(Exception $e){
die($e->getMessage());
}
The line in question is the following:
$product_data['brand'] = $product->getAttribute('manufacturer');
I can’t find a way to show the manufacturer name instead of it’s ID I have tried to change ‘getAttribute’ to ‘getData’ and ‘getName’ but none do what I need.
Any help is appreciated!
Use this instead:
As bit of background information:
native Magento
selectandmultiselectattribute options are stored in theeav_attribute_optionandeav_attibute_option_valuetables.The primary key
option_idfrom theeav_attribute_optionis the value that is associated with the product attribute.The idea being that the option value associated with the product is independent of the store view, e.g. translation of that option label.
The
getAttributeText()method uses the attribute source model to load the matching labels from the database and return the label matching the ID:The source model in question is
eav/entity_attribute_source_table.The
getAttributeText()method should be used for all select and multiselect attributes on products.