2011-11-06 2 views
2
내가 Google 쇼핑에 우리의 카탈로그를 가져 오려면 다음 스크립트 젠토을 사용하고

:가시성으로 인해 제품이 제한됩니까?

<?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

@ 대니 : +1,하지만 항상 클래스 상수를 사용하는 것이 좋습니다. 결국 상수가 그 것이다. 그렇지 않으면 Magento가 어떤 이유로 든 클래스 상수 값을 변경하기로 결정할 때마다 '4'를 사용하여 코드의 모든 위치를 변경해야합니다. –

1

필터가

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

을, 그것을 여전히 제품의 범위를 변경하지 않는 것 같습니다. 4 = 카탈로그, 검색을 확인했습니다. – dannymcc

관련 문제