제품 URL 및 이미지를 얻는 효율적인 방법


12

Magento 웹숍에 추가를 구축하는 동안 몇 가지 문제가 발생했습니다. 가능한 빠른 코드를 만들려고 노력하면서 두 가지를 알아낼 수 없었습니다.

내 (관련) 코드는 다음과 같습니다.

$rc = Mage::getResourceSingleton('catalog/product');
$productName = $rc->getAttributeRawValue($productId, 'name', Mage::app()->getStore());
$productPrice = $rc->getAttributeRawValue($productId, 'price', Mage::app()->getStore());
$productImage = $rc->getAttributeRawValue($productId, 'image', Mage::app()->getStore());
$productUrl = $rc->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());

내가 알아낼 수없는 두 가지는 :

1) 제품 URL을 어떻게 검색합니까? url_key모든 웹 상점이 표준 URL을 사용하거나 URL에 범주를 갖지는 않기 때문에 항상 올바른 URL을 제공하지는 않습니다.

2) 전체 이미지 대신 너비 / 높이가 설정된 제품 이미지를 얻으려면 어떻게해야합니까? ->resize()(그것이 URL을 반환 이후) 함수는이 경우 I 정찰에서 작동하지 않습니다. 그 추가, 그것은 얻을 수 있습니다 Base Image, Small Image그리고 Thumbnail개별적으로?

나의 주요 목표는 코드를 가능한 빨리 유지하는 것입니다. 제품의 하위 항목을 반복하므로 제품 ID 만 있습니다. ->load()로딩 시간이 오래 걸리므 로 사용하고 싶지 않습니다 .

답변:


7

다음과 같이 할 수 있습니다.

$smallImage = $rc->getAttributeRawValue($productId, 'small_image', Mage::app()->getStore());
$imageModel = Mage::getModel('catalog/product_image');
$imageModel->setDestinationSubdir('small_image');
$imageModel->setBaseFile($smallImage);
var_dump($imageModel->getUrl());

마찬가지로 "이미지"및 "썸네일"에 대해서도 수행 할 수 있습니다.


이것은 일반 이미지에서 작동하는 것 같지만에 대한 잘못된 폴더를 선택합니다 small_image. 작은 이미지는 모두 크기가 조정되고 크기가 조정 된 변형을 선택하지 않는 것 같습니다. 어떻게 해결할 수 있습니까? 또한 제품 URL에 대한 솔루션이 있습니까?
Sander Koedood 2018 년

@SanderKoedood 크기 조정을 위해 $ imageModel-> setWidth (150)-> setHeight (150)-> resize ()-> getUrl ();
mpaepper

150 대신에, 물론 필요한 값을 사용하십시오;)
mpaepper

내 지식은 그 정도까지 퍼져 있지만 ;-) 지적 해 주셔서 감사합니다. 그러나 잘못된 폴더를로드하는 사이트의 문제는 변경되지 않습니다. 작은 이미지를 사용할 때 이미지가 표시되지 않습니다.
Sander Koedood 2018 년

5
$productId = 'SOME_PRODUCT_ID';
$product = Mage::getModel('catalog/product')->load($productId);
$productMediaConfig = Mage::getModel('catalog/product_media_config');

$baseImageUrl = $productMediaConfig->getMediaUrl($product->getImage());
$smallImageUrl = $productMediaConfig->getMediaUrl($product->getSmallImage());
$thumbnailUrl = $productMediaConfig->getMediaUrl($product->getThumbnail());

위의 코드를 실행하면 브라우저가 빈 페이지를 반환합니다. 내 코드 : justpaste.it/7hwc9
Gem

3

아래에 언급 된 코드를 사용하여 이미지 URL을 얻으십시오.

<?php echo Mage::helper('catalog/image')->init($product, 'thumbnail'); ?>
<?php echo Mage::helper('catalog/image')->init($_product, 'small_image') ?>

또는

$productId = 1; // get product ID dynamically instead of 1.
$products = Mage::getModel('catalog/product')->load($productId);
$productUrl = $products->getProductUrl();
$baseImage = $products->getImage(); 
$SmallImage = $products->getSmallImage(); 
$thumbnail = $products->getThumbnail(); 

또는

To get product URL:
$_products->getProductUrl();

2

$ products / $ product 변수 없이는 할 수 없습니다 :

제품 URL의 경우 :

$product->getUrlPath();
'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
'tables/mondrian-large-coffee-table-set-multicolour'

// _store_to_url을 false로 설정하더라도 URL에 ___store를 추가하여이 메소드를 중지 할 수 없습니다.

$product->getUrlInStore();
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

** // _store_to_url을 false로 설정하여도 ___store를 URL에 추가하는이 방법을 중지 할 수 없습니다.

$product->getUrlInStore(array('_ignore_category' => true));
'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

제품 이미지의 경우 :

$productId = 1; 
$products = Mage::getModel('catalog/product')->load($productId);
$products->getImage(); $products->getSmallImage(); 
$products->getThumbnail(); 

태그에 이미지 URL을 사용하려면

Mage::helper('catalog/image')->init($products, 'small_image')->resize(163,100); // resize function is used to resize image 
Mage::helper('catalog/image')->init($products, 'image')->resize(400,400); 
Mage::helper('catalog/image')->init($products, 'thumbnail')->resize(60,60); 

$product->getUrlPath();를 얻음으로써 이미 결과를 얻었습니다 url_key. $product변수 없이 가능 합니다. 따라서 전체 제품을로드하지 않고도 제품 이미지를 가져 와서 크기를 조정할 수 있어야합니다. (그래서 사용하지 않음 Mage::getModel('catalog/product')->load($productId);)
Sander Koedood

2

mpaepper의 의견에 1 줄의 코드를 추가하고 싶습니다.이 시나리오는 특정 시나리오에서 훌륭한 솔루션이라고 생각합니다. 제품 모델을 통해 이미지를로드 할 제품 객체가없는 페이지의 루프에서 사용했습니다.

제품 객체와 함께 이미지를로드하지 않으려는 경우 접근 방식 mpaepper exlpain을 사용할 수 있습니다. 이 솔루션을 사용할 때 수동으로 만든 이미지를 저장하는 것을 잊지 마십시오. 이미지 객체를 저장하면 일반 마 젠토 이미지와 마찬가지로 캐시 파일이 생성됩니다.

따라서 전체 코드는 다음과 같아야합니다.

$rc = Mage::getResourceModel('catalog/product'); //empty product model which you only have to load it once. (for the people who want to use this in a loop, put this Resource Model outside the loop.

$smallImage = $rc->getAttributeRawValue($productId, 'small_image', Mage::app()->getStore());
$imageModel = Mage::getModel('catalog/product_image');
$imageModel->setDestinationSubdir('small_image');
$imageModel->setBaseFile($smallImage);
$imageModel->saveFile(); //important line to create an cache file of the image
var_dump($imageModel->getUrl());

1

제품 이미지는 다음과 같은 방식으로 액세스 할 수 있습니다.

$this->helper('catalog/image')->init($_products, 'small_image');

이미지 크기를 조정하려면 다음을 추가하십시오.

$this->helper('catalog/image')->init($_products, 'small_image')->resize(150,150);

제품 URL을 얻으려면 :

$_products->getProductUrl();

여기서 $ _products는 제품 자체가 아니라 제품 ID입니다.


2
$_products변수에 액세스 할 수 없습니다 . 제품을 완전히로드해야하기 때문입니다. 그리고 내가 루핑하는 모든 제품을로드하는 데로드 시간이 너무 길어집니다.
Sander Koedood

왜 제품을로드하지 않고 제품 데이터를 얻고 싶지 않습니까? attributeToSelect 함수를 추가하여 모든 속성을로드하는 대신 필요한 속성 만 선택할 수 있습니다.
Rojan Shrestha

1
제품 URL과 이미지를 얻는 방법을 보여 주시겠습니까? 컬렉션을 얻지 못하는 나의 주요 목적은 이것이 너무 느릴 것이라는 가정이었습니다.
Sander Koedood 2016 년

나는 일반적으로 제품을로드하고 결코 느리게 느낀 적이 없습니다. 나는 $ _products = Mage :: getModel ( 'catalog / product')-> loadByAttribute ( 'sku', 'productsku');
Rojan Shrestha

그 후 위의 내 대답을 따르십시오
Rojan Shrestha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.