2011-02-26 80 views
1

我使用magento 1.3.2.4,我的问题是同步删除谷歌基本项目一个接一个需要很长时间使用控制面板。Magento通过magento脚本删除和同步谷歌基本项目

所以我想知道如何创建一个脚本,我可以在命令行中使用同步&删除在magento谷歌基地列出的所有项目。我需要能够重新放置物品。

回答

1

我希望下面的信息是对你有用:
http://www.magentocommerce.com/boards/viewreply/63666/

+0

@anunay提供的链接有一个由Turbo1发布的代码,经过多次迭代(线程相当长) - 它是实现您想要的最好的脚本。您将看到最新的消息将多个功能集成到原始Turbo1脚本中,例如计算可配置项目和限时销售。此脚本也可以轻松转换为在Bing和Find上运行。理想情况下,您可以通过服务器上的cron作业运行此操作。 – pepe 2011-03-24 01:26:20

0

这是@anunays注意回答同样的剧本,但有一些修改我今天早些时候,以便它在1.4.x中作为工作以及包含Google Merchant Center的一些必需属性。

我只是将条件设置为“新”,并将可用性设置为“现货”,因为原始脚本在活动的可见产品上过滤。

#!/usr/bin/env php-5.3 
<?php 
/** 
* Generate a google base feed for google product search 
* 
* The core magento backend Gbase functionality was not working for me, and it 
* is oft maligned (at least in 1.4x and before) in the Mage community 
*/ 
require_once 'app/Mage.php'; 
Mage::App('default'); 
define('GOOGLE_BASE_FEED_TXT', MY_URL . 'var/export/google_base_feed.txt'); 

class Generate_Google_Base_Feed_Txt 
{ 
    public function __construct() { 
     $this->handle = fopen(GOOGLE_BASE_FEED_TXT, 'w'); 
    } 

    public function build() { 
     $heading = array(
      'id', 
      'title', 
      'description', 
      'link', 
      'image_link', 
      'price', 
      'brand', 
      'product_type', 
      'condition', 
      'availability', 
     ); 
     $feed_line = implode("\t", $heading) . "\r\n"; 
     fwrite($this->handle, $feed_line); 

     $products = Mage::getModel('catalog/product')->getCollection(); 
     $products->addAttributeToSelect('*'); 
     $products->addAttributeToFilter('status', 1); 
     $products->addAttributeToFilter('visibility', 4); 
     $products->addAttributeToFilter(array(
      array('attribute'=>'manufacturer', 'notnull' => TRUE), 
     )); 
     $products->addAttributeToFilter(array(
      array('attribute'=>'name', 'notnull' => TRUE), 
     )); 
     $products->addAttributeToFilter(array(
      array('attribute'=>'image', 'notnull' => TRUE), 
     )); 
     $products->addAttributeToFilter(array(
      array('attribute'=>'url_key', 'notnull' => TRUE), 
     )); 

     foreach ($products as $product) { 
      $product_data     = array(); 
      $product_data['sku']   = $product->getSku(); 
      $product_data['title']  = $product->getName(); 
      $product_data['description'] = $product->getDescription(); 
      $product_data['link']   = MY_URL . $product->getUrlKey() . '.html'; 
      $product_data['image_link'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'catalog/product' . $product->getImage(); 
      $product_data['price']  = $product->getPrice(); 
      $product_data['brand']  = $product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product); 
      $product_data['product_type'] = ''; 
      $product_data['condition'] = 'new'; 
      /* availability: required ("in stock", "out of stock", "preorder", "available for order") */ 
      // currently, we only use in-stock but in the future we should include everything and just set out-of-stock as such 
      $product_data['availability'] = 'in stock'; 

      foreach ($product->getCategoryIds() as $_categoryId) { 
       $category = Mage::getModel('catalog/category')->load($_categoryId); 
       // append categories 
       $product_data['product_type'] .= $category->getName() . ', '; 
      } 
      $product_data['product_type'] = rtrim($product_data['product_type'], ', '); 

      // sanitize data 
      foreach ($product_data as $k => $val) { 
       $bad    = array('"', "\r\n", "\n", "\r", "\t"); 
       $good    = array("", " ", " ", " ", ""); 
       $product_data[$k] = '"' . str_replace($bad, $good, $val) . '"'; 
      } 

      $feed_line = implode("\t", $product_data) . "\r\n"; 
      fwrite($this->handle, $feed_line); 
      fflush($this->handle); 
     } 
     fclose($this->handle); 
    } 
} 

// test it, yo 
$base_feed_txt = new Generate_Google_Base_Feed_Txt; 
$base_feed_txt->build();