2011-11-06 26 views
2

我使用的Magento与下面的脚本来导入我们的目录到谷歌购物:限制通过可见性发现的产品?

<?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->getData('brand'); 

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

这个脚本的问题是,它似乎导入所有产品。无论其中一些被列为“不可见单独”的事实。我试图找到一种将列出的项目限制为“搜索”,“目录”或“目录,搜索”的方法。

我注意到下面一行:

 $products->addAttributeToFilter('visibility', 4); 

,但我上的数字4的脚本的相关性完全不确定使用不同的博客文章了一把已经一起捣碎,SO答案和教程。

回答

9

的另一种方法是定义一个数组的顺序发生变化:

$visibility = array(
    Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH, 
    Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG 
); 

// now you can add this filter to call your product collection 

$products->addAttributeToFilter('visibility', $visibility); 
+0

你知道'VISIBILITY_BOTH'是否是我需要的正确的“Magento”短语? – dannymcc

+1

'VISIBILITY_BOTH'表示产品在搜索和目录中可见,等于4,'VISIBILITY_IN_CATALOG'表示该产品只在目录中可见,等于2.还有另外两种状态可用:'VISIBILITY_NOT_VISIBLE = 1'和'VISIBILITY_IN_SEARCH = 3'。我想你只能使用'VISIBILITY_BOTH'或'4',如下所述。但这是一个有趣的问题。 – tecmec

+1

@danny:+1,但我总是建议对它们的值使用类常量。最后,这就是常数。否则,无论什么原因,当Magento决定更改类常量的值时,您都需要使用'4'来更改代码中的所有位置。 –

1

尝试围绕您创建的集合,这样的过滤器是最后一个,即

$products = Mage::getModel('catalog/product')->getCollection(); 
$products->addAttributeToSelect('*'); 
$products->addAttributeToFilter('status', 1); 
$products->addAttributeToFilter('visibility', 4); 
+0

虽然剧本仍然有效,它似乎还没有改变产品的范围。我检查了4 = Catalog,Search。 – dannymcc