2012-02-29 12 views
5

Estoy utilizando la siguiente secuencia de comandos para exportar una lista de nuestros productos para enviar a Google para su servicio de listado de compras (Google Base). El script funciona bien, pero deja la marca y columnas vacías fabricante:¿Obtiene los nombres de los atributos de Magento en lugar de los números de identificación?

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

la línea en cuestión es la siguiente:

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

No puedo encontrar una manera de mostrar el nombre del fabricante en vez de su ID He tratado de cambiar 'getAttribute' a 'getData' y 'getName', pero ninguno hace lo que necesito.

¡Se agradece cualquier ayuda!

+0

posible duplicado: http://stackoverflow.com/questions/6924226/magento-product-attribute-get-value – Jonathan

Respuesta

19

Use este lugar:

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

Como parte de la información fondo:
Magento nativa select y multiselect opciones de atributos se almacenan en las tablas eav_attribute_option y eav_attibute_option_value.
La clave principal option_id del es el valor que está asociado con el atributo del producto.
La idea es que el valor de la opción asociada con el producto sea independiente de la vista de tienda, p. traducción de esa etiqueta de opción.

El método getAttributeText() utiliza el modelo de fuente de atributo para cargar las etiquetas coincidentes desde la base de datos y devolver la etiqueta coincide con el ID:

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

El modelo de código en cuestión es eav/entity_attribute_source_table.
El método getAttributeText() se debe utilizar para todos los atributos select y multiselect de los productos.

3

Ha intentado lo siguiente como Vinai sugirió ?:

$product->getAttributeText('manufacturer'); 

que recibe el nombre. Otros respondieron:

$product->getManufacturer(); 

que obtiene el id. Echar un vistazo a algunos temas relacionados:

Magento: fetching manufacturer/brand from database

Tener un vistazo a los resultados de esta búsqueda: https://stackoverflow.com/search?q=%5Bmagento%5D+manufacturer

Voy a probar algunas muestras a cabo, y le permiten saber cuál es la más fiable.

HTH

+0

'$ producto-> getManufacturerText()' devolvería el valor de un atributo ' manufacturer_text' (que probablemente no es lo que se quiere). – Vinai

+1

genial ... este funciona para mí ... gracias – raghuveer999

Cuestiones relacionadas