获取Magento属性名称而不是ID号


Get Magento attribute names instead of ID numbers?

我使用以下脚本导出我们的产品列表,以发送给Google以获取其购物清单服务(Google Base(。该脚本运行良好,但它将品牌和制造商列留空:

<?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());
}

有问题的行如下:

$product_data['brand'] = $product->getAttribute('manufacturer');

我找不到显示制造商名称而不是 ID 的方法,我试图将"getAttribute"更改为"getData"和"getName",但没有一种能满足我的需要。

任何帮助不胜感激!

请改用这个:

$product_data['brand'] = $product->getAttributeText('manufacturer');

作为背景信息
本机 Magento selectmultiselect属性选项存储在eav_attribute_optioneav_attibute_option_value表中。
eav_attribute_option option_id的主键是与产品属性关联的值。
其理念是,与产品关联的选项值独立于商店视图,例如该选项标签的翻译。

getAttributeText() 方法使用属性源模型从数据库加载匹配的标签,并返回与 ID 匹配的标签:

public function getAttributeText($attributeCode)
{
    return $this->getResource()
        ->getAttribute($attributeCode)
            ->getSource()
                ->getOptionText($this->getData($attributeCode));
}

有问题的源模型是 eav/entity_attribute_source_table .
getAttributeText()方法应用于商品上的所有选择和多选属性。

您是否像Vinai建议的那样尝试过以下内容?

$product->getAttributeText('manufacturer');

这就是名字。其他人建议:

$product->getManufacturer();

这将获取 id。看看一些相关的线程:

Magento:从数据库中获取制造商/品牌

看看这个搜索结果:https://stackoverflow.com/search?q=%5Bmagento%5D+manufacturer

我将测试一些样品,并让您知道哪个最可靠。