2013-08-31 3 views
0

내 솔루션에 가깝다고 느낍니다.하지만 내 운을 아는 방법이 될 수 있습니다. Magento 내의 특정 카테고리의 모든 가격을 업데이트하는 간단한 PHP 스크립트를 작성하려고합니다. 아래 코드는 제발 도와주세요. 문제는 결과를 반환하지 않는다는 것입니다. 카테고리를 구체적으로 언급하는 섹션을 꺼내면 모든 제품에 대해 잘 실행됩니다.Magento - 카테고리의 모든 가격 업데이트

<?php 
require 'app/Mage.php'; Mage::app(); 
$products = Mage::getModel('catalog/product')->getCollection() 
->addStoreFilter() 
->addAttributeToSelect('name') 
->addAttributeToSelect('price') 
; 
$_products = Mage::getModel('catalog/product')->load($productId); 
$_category = $_products->getCategoryId(); 
if($_category == 5){ 
foreach ($products as $product) { 
    echo $product->getName() .'<br>'; 
    echo "old: " . $product->getPrice() .'<br>'; 
    $newPrice = ($product->getPrice() * 1.3); 
    $product->setPrice($newPrice); 
    $product->save(); 
    echo "new: " . $product->getPrice(); 
    echo '<br><br><br><br>'; 
} 
} else { echo "No Results"; 
} 
?> 

최신 수정. 위의 코드에서 쓰레기를 제거하고 아직 뭔가가 누락되었습니다. 나는 이것에 대한 답을 찾기 위해 온통 검색했다. if 문이 제거되면 다시 작동합니다. 고마워요

<?php 
require 'app/Mage.php'; Mage::app(); 
$products = Mage::getModel('catalog/category') 
->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*'); 
if($category_id == 5){ 
foreach($products as $product) { 
echo $product->getName() .'<br>'; 
    echo "old: " . $product->getPrice() .'<br>'; 
    $newPrice = ($product->getPrice() * 1.3); 
    $product->setPrice($newPrice); 
    $product->save(); 
    echo "new: " . $product->getPrice(); 
    echo '<br><br><br><br>'; 
} 
} else { echo "No Results"; 
} 
?> 
+0

첫 번째 문제는 '$ productId'가 표시되고 여기에 정의하지 않았기 때문입니다. – Jason

+0

아마 필요하지 않습니다. 나는 그걸 가지고 도구를 만들고 그것을 제거하는 것을 잊어 버렸습니다. – Jordan

답변

1

음, 여기에서 내가 무엇을 할 수 있는지 보도록하겠습니다. 나는 내가 그것을 테스트 할 수있는 직장에서 내 자원을 갖고 있기 때문에 그것을 정확하게 가격을 변경할지 여부를 말할 수는 없지만, 약간의 도움이 될

<?php 
    require 'app/Mage.php'; 
    Mage::app(); 
    //What Magento Version are you running? Try Mage::init(); for later versions 

    /** 
    * We're going to modify your second collection here 
    * Since the last bit didn't work, we're gonna load 
    * The category, then load the products for that category 
    **/ 

    $categoryId = 5; 

    $products = Mage::getModel('catalog/category') 
        ->load($categoryId) 
        ->getProductCollection() 
        ->addStoreFilter() 
        ->addAttributeToSelect('name') 
        ->addAttributeToSelect('value'); 

    if($products->count() != 0) { //We actually want type coercion here 

     foreach ($products as $product) { 
      echo $product->getName() .'<br>'; 
      echo "old: " . $product->getPrice() .'<br>'; 
      $newPrice = ($product->getPrice() * 1.3); 
      $product->setPrice($newPrice); 
      $product->save(); 
      echo "new: " . $product->getPrice(); 
      echo '<br><br><br><br>'; 
     } 
    } else { 
     echo "No Results"; 
    } 
?> 

.

  • 편집 수집 방법을 변경, 나는 카테고리를 얻고 그것에서 직접 제품을로드합니다.

  • OP의 결과를 반영하여 답변이 업데이트되었습니다.
+0

대답은 다음과 같습니다. 치명적 오류 : public_html/wholesale/app/code/core/Mage/Eav/Model/Entity/Abstract.php의 816 행에있는 비 객체에서 getBackend() 멤버 함수를 호출하십시오. Magento CE 1.7 최신 버전을 사용 중입니다. 당신의 모습을 볼 때 몇 가지 아이디어가 있지만 도움을 주셔서 감사합니다. – Jordan

+0

클로저 : 나는 그것을 달렸다. 그리고 그것은 모든 나의 제품 가격을 0.00로 바꿨다. 그러나 적어도 그 카테고리의 항목을위한 가격을 바꾸는 것만이다. - 롤 – Jordan

+0

그것이 작동하게했다. 나는 2 개의 다른 선에 선정하기 위하여 이름과 가격 속성을 나누고 완벽하게 작동했다. 도와 줘서 고마워. – Jordan