ID로 제품 URL을 얻는 가장 효율적인 방법은 무엇입니까? 코드의 몇 곳에서 Mage::getModel('catalog/product')->load($id)->getProductUrl()
제품과 관련된 이벤트의 양을 고려할 때 제품의 URL을 얻는 것과 같은 것들이 있습니다 . 카테고리 ID를 지정하는 기능도 좋습니다.
또한 이름과 같은 제품의 단일 속성에 대해 동일한 작업을 수행하는 효율적인 방법이 있습니까?
ID로 제품 URL을 얻는 가장 효율적인 방법은 무엇입니까? 코드의 몇 곳에서 Mage::getModel('catalog/product')->load($id)->getProductUrl()
제품과 관련된 이벤트의 양을 고려할 때 제품의 URL을 얻는 것과 같은 것들이 있습니다 . 카테고리 ID를 지정하는 기능도 좋습니다.
또한 이름과 같은 제품의 단일 속성에 대해 동일한 작업을 수행하는 효율적인 방법이 있습니까?
답변:
전체 제품을로드하지 않고도 제품 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());
getResourceSingleton
. $ storeId는 ID 일 필요는 없으며 Mage_Core_Model_Store
객체 일 수도 있으므로 Mage::app()->getStore()
인라인을 사용 하여 작업 속도를 높일 수 있습니다 .
url_key
magento가 url_key와 다른 URL을 다시 작성하기 때문에 동일한 제품을 가진 제품 이있는 경우 작동하지 않을 수 있습니다.
컬렉션을 통해이 작업을 수행하는 것이 도움이 될 것이라고 생각합니다. 완전한 제품 정보가 필요하지 않은 경우 컬렉션을 통해 정보를로드 할 수 있으므로 필요한 정보 만로드 할 수 있습니다. 코드는 다음과 같습니다.
$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 키만 필요하므로 전체 제품없이 작동해야합니다.
제품 재 작성 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
이 맞아야합니다.
getRequestPathByIdPath
getAttributeRawValue
load(productId)
나는이 궁금증을 발견했다. 누군가 다른 사람이 언젠가 이것을 필요로 할 경우를 대비하여 여기에 내가 찾은 결과를 게시하겠습니다.
완전한 제품을로드하지 않고 제품 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의 카테고리를 사용하는 경우 해당 부분이 표시되지 않으므로 작동하지 않습니다. 이것은 내가 일하고 있던 가게의 경우였습니다.