효율적인 id로부터 제품 URL 가져 오기


27

ID로 제품 URL을 얻는 가장 효율적인 방법은 무엇입니까? 코드의 몇 곳에서 Mage::getModel('catalog/product')->load($id)->getProductUrl()제품과 관련된 이벤트의 양을 고려할 때 제품의 URL을 얻는 것과 같은 것들이 있습니다 . 카테고리 ID를 지정하는 기능도 좋습니다.

또한 이름과 같은 제품의 단일 속성에 대해 동일한 작업을 수행하는 효율적인 방법이 있습니까?


1
귀하의 질문이 여기서 해결 되었습니까? 이 질문에 대한 도움이 더 필요하셨습니까? 그렇다면 해결 방법을 찾기 위해 수행해야 할 사항을 알려주십시오.
philwinkle

답변:


47

전체 제품을로드하지 않고도 제품 URL을 얻을 수 있는지 알고 싶습니다. 우리가 그것을 얻을 수 있는지 확실하지 않기 때문에 추가 질문에 대답하고 주요 질문이 아니라 죄송합니다. :)

전체 제품을로드하지 않고 단일 속성을 얻으 getAttributeRawValue()려면 Magento CE 버전 1.6 이상을 사용 하는 경우 사용할 수 있습니다

Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

아래의 @philwinkle의 의견에 따라 더 최적화 된 코드는 다음과 같습니다.

Mage::getResourceSingleton('catalog/product')
  ->getAttributeRawValue($productId, 'attribute_code', Mage::app()->getStore());

업데이트 : 전체 제품을로드하지 않고 ID로 제품 URL을 가져옵니다.

Mage::getResourceSingleton('catalog/product')
  ->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

8
와우 저. 그것에 대해 몰랐다! 모두이 답변을 찬성했습니다. 실제로 인티를 늘리려면 대신 새 모델을 인스턴스화하는 대신 기존 카탈로그 / 제품 자원 모델을 재사용 할 수 있습니다 getResourceSingleton. $ storeId는 ID 일 필요는 없으며 Mage_Core_Model_Store객체 일 수도 있으므로 Mage::app()->getStore()인라인을 사용 하여 작업 속도를 높일 수 있습니다 .
philwinkle

@param int | string | array $ attribute atrribute의 ID 또는 코드 (1.7)
Richard

나는이 접근법이 매우 깔끔하다. 나는 투표했다. 아무도 URL에 대한 답변을 얻지 못하면 동의합니다.
Peter O'Callaghan

제품 ID 없이도 계속 사용할 수 있습니까? SKU 만있는 경우 모델을 강제로로드해야합니까?
pspahn

1
url_keymagento가 url_key와 다른 URL을 다시 작성하기 때문에 동일한 제품을 가진 제품 이있는 경우 작동하지 않을 수 있습니다.
Fra

11

컬렉션을 통해이 작업을 수행하는 것이 도움이 될 것이라고 생각합니다. 완전한 제품 정보가 필요하지 않은 경우 컬렉션을 통해 정보를로드 할 수 있으므로 필요한 정보 만로드 할 수 있습니다. 코드는 다음과 같습니다.

$product_collection = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToFilter('entity_id', 16)
    ->addUrlRewrite();
$product_collection_url = $product_collection->getFirstItem()->getProductUrl();

참고 : addUrlRewrite나중에 제품 URL을 얻을 수 있도록이 경우 URL에 카테고리가 포함되지 않은 카테고리 ID를 매개 변수로 사용할 수 있습니다.

당신은 여전히을 getProductUrl()사용하여를 호출 Mage_Catalog_Model_Product_Url하지만 결국에는 id, request_path 및 url 키만 필요하므로 전체 제품없이 작동해야합니다.


이것은 잘 작동합니다!
Mukesh Chapagain

$ Product-> getProductUrl () 만 있으면됩니다. "addUrlRewrite ()"추가는 차이를 만듭니다. 해당 예제를 제공해 주셔서 감사합니다.
jschrab

4

제품 재 작성 URL (로드 제품 없음) 을 얻는 가장 효율적인 방법 은 URL 재 작성 활자를 직접 보는 것입니다.

# returns string "product-url.html"
$productUrl = Mage::getResourceModel('core/url_rewrite')
    ->getRequestPathByIdPath('product/' . $productId, $storeId);

전체 카테고리 경로를 얻으려면

# returns string "full/category/path/product-url.html"
$productUrl = Mage::getResourceModel('core/url_rewrite')
    ->getRequestPathByIdPath('product/' . $productId . '/' . $categoryId, $storeId);

편집 : "url_key"에 대해 테스트했으며 다른 속성 getAttributeRawValue이 맞아야합니다.

  1. getRequestPathByIdPath

    • 총계 월 시간 (마이크로 초) : 8,323 마이크로 초
    • 총계 CPU (마이크로 초) : 8,038 마이크로 초
    • 총계 MemUse (바이트) : 273,872 바이트
    • 총계 PeakMemUse (바이트) : 213,488 바이트
    • 함수 호출 수 : 372
  2. getAttributeRawValue

    • 총계 월 시간 (마이크로 초) : 51,213 마이크로 초
    • 총계 CPU (마이크로 초) : 50,390 마이크로 초
    • 총계 MemUse (바이트) : 1,223,520 바이트
    • 총계 PeakMemUse (바이트) : 1,168,496 바이트
    • 함수 호출 수 : 2,233
  3. load(productId)

    • 총계 월 시간 (마이크로 초) : 605,649 마이크로 초
    • 총계 CPU (마이크로 초) : 598,820 마이크로 초
    • 총계 MemUse (바이트) : 5,370,848 바이트
    • 총계 PeakMemUse (바이트) : 5,314,384 바이트
    • 함수 호출 수 : 27,774

3

나는이 궁금증을 발견했다. 누군가 다른 사람이 언젠가 이것을 필요로 할 경우를 대비하여 여기에 내가 찾은 결과를 게시하겠습니다.

완전한 제품을로드하지 않고 제품 URL을 얻는 두 가지 방법을 찾았습니다. 느린 서버에서 작업하고 있었기 때문에 가장 빠른 로딩 방법을 찾아야했습니다.

첫 번째 방법 :

첫 번째는 제품 ID를 기반으로 한 제품 모음입니다.

$_item = Mage::getModel('catalog/product')->getCollection()
    ->addAttributeToSelect('product_url')
    ->addAttributeToFilter('entity_id', $productId)
    ->addUrlRewrite()
    ->load();

foreach($_item as $product){
    echo $product->getProductUrl();
}

// returns string "http://www.your-domain.com/[category]/[product_url]"

두 번째 방법 :

Kalpesh Metha의 방법을 사용하는 두 번째 방법은 다음 코드입니다.

Mage::getResourceSingleton('catalog/product')
      ->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

// returns string "product-url-like-this"

이 방법에는 'url_key'또는을 사용할 수 있습니다 'url_path'. 그래도 차이점을 찾지 못했습니다.

방법의 차이점 :

첫 번째 방법은 시간이 조금 더 걸립니다 (약 15 %의 시간이 더 걸립니다). 그러나 두 번째 방법은 URL의 마지막 부분 만 반환합니다. 즉, 상점에서 URL의 카테고리를 사용하는 경우 해당 부분이 표시되지 않으므로 작동하지 않습니다. 이것은 내가 일하고 있던 가게의 경우였습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.