2012-02-29 8 views
5

Tôi đang sử dụng tập lệnh sau để xuất danh sách các sản phẩm của chúng tôi để gửi tới Google cho dịch vụ danh sách mua sắm của họ (Google Base). Các kịch bản hoạt động tốt, nhưng nó để lại thương hiệu và nhà sản xuất cột rỗng:Lấy tên thuộc tính Magento thay vì số ID?

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

Dòng trong câu hỏi như sau:

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

tôi không thể tìm thấy một cách để hiển thị tên nhà sản xuất thay vì của ID của nó tôi đã cố gắng để thay đổi 'getAttribute' thành 'getData' và 'getName' nhưng không có gì làm những gì tôi cần.

Mọi trợ giúp đều được đánh giá cao!

+0

thể trùng lặp: http://stackoverflow.com/questions/6924226/magento-product-attribute-get-value – Jonathan

Trả lời

19

Sử dụng này để thay thế:

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

Như chút thông tin nền:
mẹ đẻ Magento selectmultiselect tùy chọn thuộc tính được lưu trữ trong các bảng eav_attribute_optioneav_attibute_option_value.
Khoá chính option_id từ eav_attribute_option là giá trị được liên kết với thuộc tính sản phẩm.
Ý tưởng cho rằng giá trị tùy chọn được liên kết với sản phẩm độc lập với chế độ xem cửa hàng, ví dụ: bản dịch của nhãn tùy chọn đó.

Phương pháp getAttributeText() sử dụng mô hình nguồn thuộc tính để tải các nhãn phù hợp từ cơ sở dữ liệu và trả lại nhãn phù hợp với ID:

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

Mô hình nguồn tin trong câu hỏi là eav/entity_attribute_source_table.
Phương thức getAttributeText() nên được sử dụng cho tất cả các thuộc tính được chọn và chọn nhiều trên sản phẩm.

3

Các bạn đã thử những điều sau đây như Vinai gợi ý ?:

$product->getAttributeText('manufacturer'); 

Đó được tên. Những người khác đã đề xuất điều này:

$product->getManufacturer(); 

Đó là id. Có một cái nhìn tại một số chủ đề liên quan:

Magento: fetching manufacturer/brand from database

có một cái nhìn vào kết quả từ tìm kiếm này: https://stackoverflow.com/search?q=%5Bmagento%5D+manufacturer

Tôi sẽ thử nghiệm một số mẫu ra, và cho bạn biết cái nào là đáng tin cậy nhất.

HTH

+0

'$ chế biến tiêu thụ> getManufacturerText()' sẽ trả về giá trị của một thuộc tính ' manufacturer_text' (có thể không phải là thứ mong muốn). – Vinai

+1

tuyệt vời .. điều này làm việc cho tôi .. cảm ơn bạn – raghuveer999