2013-04-09 2 views
1

지난 72 시간 이내의 날짜를 가진 모든 제품을 나열하려고합니다. 스크립트는 400 개가 넘는 제품을 제외하고는 제대로 작동합니다.제품보기 특별 행사 날짜 - Magento 스크립트 최적화

너무 많은 컬렉션을로드하고 있거나 올바르게로드되지 않은 것을 사용하고 있으므로 실제로 최적화에 대한 조언이 필요하다고 생각합니다.

<?php 


set_time_limit(0); 
require_once 'app/Mage.php'; 
Mage::app('default'); 

try 
{ 
    $products = Mage::getModel('catalog/product')->getCollection() 
     ->setStoreId(1); 
    $products->addAttributeToFilter('status', 1); 
    $products->addAttributeToFilter('visibility', 4); 
    $products->addAttributeToSelect('*'); 
    $prodIds=$products->getAllIds(); 
    $product_count = 0; 
    $products_changed = 0; 

    //$product = Mage::getModel('catalog/product'); 

    echo "Price Changes Last 72 Hours<br><br>"; 

    foreach($prodIds as $productId) 
    { 
     $product_count++; 
     //$products->load($productId); 

     // load product data 
     $product = Mage::getModel('catalog/product')->load($productId); 

     $special_price = round($product->getSpecialprice(),2); 
     $human_readable_date = $product->getSpecialFromDate(); 
     $sku = $product->getSku(); 
     $specialPriceFromDate = strtotime($human_readable_date); 
     $time_now = microtime(true); 
     $product_link = "http://www.mydomain.com.au/".$product->getUrlPath(); 
     $date_array = explode(' ', $human_readable_date); 
     $short_date = $date_array[0]; 

     if (($time_now - $specialPriceFromDate) < 259200) 
     { 
      $products_changed++; 
      echo "SKU: " . '<a href=' . $product_link . '>' . $sku . '</a>' . " Date Changed: " . $short_date . " New Price $" . $special_price . "<br>"; 
     } 
     //if ($product_count == 400) exit; 
    } 
} 

catch(Exception $e){ 
    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    error_log($e->getMessage(), 1, '[email protected]', $headers); 
    die($e->getMessage()); 
} 


?> 

답변

0

당신은 먼저 전체 모음을로드하는 다음, 다시 하나 하나 모든 제품을로드 : 여기

는 스크립트입니다. 이것은 엄청난 메모리 소비를 초래하고 느려질 것입니다.

또한 모두 제품 속성 (수백 개일 수 있음)을로드하지만 주로 그 중 일부에만 관심이있는 것 같습니다.

두 문제를 최적화하기 위해, 내가 직접 관심의 제품 만 필터링하는 것이 좋습니다 것 :

$iNow = strtotime(date('Y-m-d H:i:s')); 
$iFrom = $iNow - (60 * 60 * 24 * 3); 
$oProductCollecion = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->setStoreId(1) 
    ->addAttributeToSelect(array('sku', 'special_price', 'url_path')) 
    ->addAttributeToFilter('status', 1) 
    ->addAttributeToFilter('visibility', 4) 
    ->addAttributeToFilter(
     'special_from_date', 
     array('from' => date('Y-m-d H:i:s', $iFrom)) 
    ); 

foreach($oProductCollecion as $oProduct) { 
    $product_link = "http://www.mydomain.com.au/" . $oProduct->getUrlPath(); 
    $sku = $oProduct->getSku(); 
    $short_date = $oProduct->getSpecialFromDate(); 
    $special_price = round($oProduct->getSpecialPrice(), 2); 
    echo "SKU: " . '<a href=' . $product_link . '>' . $sku . '</a>' . " Date Changed: " . $short_date . " New Price $" . $special_price . "<br>"; 
} 
+0

브릴리언트! 환상적인 작품 :) –