Ürün URL'sini ve resmini almanın etkili yolu


12

Bir Magento web mağazasına ek olarak, birkaç sorunla karşılaştım. Mümkün olduğunca hızlı kod oluşturma arayışımda, kendimi iki şey bulamadım.

(Alakalı) kodum şudur:

$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());

Anlayamadığım iki şey:

1) Ürün URL'sini nasıl alabilirim? url_keytüm web mağazaları standart URL'ler kullanmadığından veya URL'de kategoriye sahip olmadığından, her zaman doğru URL'yi vermez.

2) Ürün görüntüsünü tam görüntü yerine ayarlanmış bir genişlik / yükseklikte nasıl edinebilirim? ->resize()(Bir URL döndürür beri) fonksiyonu bu durumda ben Keşif çalışmamaktadır. Buna ek olarak Base Image, Small Imageve Thumbnailayrıca almak mümkün mü?

Asıl amacım kodu olabildiğince hızlı tutmak. Sadece bir ürün kimliğim var, çünkü bir ürünün alt öğeleri arasında dolaşıyorum. Kullanmak istemiyorum ->load()çünkü bu daha fazla yükleme süresi gerektiriyor.

Yanıtlar:


7

Bunu şöyle yapabilirsiniz:

$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());

Benzer şekilde, bunu "görüntü" ve "küçük resim" için de yapabilirsiniz.


Bu normal görüntü için çalışıyor gibi görünüyor, ancak için yanlış bir klasör seçer small_image. Görünüşe göre küçük resimlerin tümü yeniden boyutlandırılıyor ve yeniden boyutlandırılan değişkeni seçmiyor. Bunu nasıl çözeceğine dair bir fikrin var mı? Ayrıca ürün URL'si için bir çözümünüz var mı?
Sander Koedood

@SanderKoedood Yeniden boyutlandırma için $ imageModel-> setWidth (150) -> setHeight (150) -> resize () -> getUrl ();
mpaepper

150 yerine, elbette ihtiyacınız olan değerleri kullanın;)
mpaepper

Benim bilgim o kadar yayılmış ;-) ama işaret ettiğiniz için teşekkürler. Ancak, sitenin yanlış klasörü yüklemesi sorunu değişmez. Bu nedenle, küçük resmi kullanırken hiçbir görüntü gösterilmez.
Sander Koedood

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());

Kodun üzerinde çalışırsam tarayıcı boş sayfaya dönün. kodum: justpaste.it/7hwc9
Gem

3

Resim URL'si almak için aşağıda belirtilen kodu deneyin:

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

VEYA

$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(); 

VEYA

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

2

$ Products / $ ürün değişkeni olmadan yapamazsınız:

Ürün URL'si için:

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

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

// _store_to_url değerini false olarak ayarlayarak bile URL'ye ___store ekleyerek bu yöntemi durduramazsınız

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

** // _store_to_url öğesini false olarak ayarlayarak bile URL'ye ___store ekleyerek bu yöntemi durduramazsınız // note - bu parametreyi kullanarak tartışılabilir bir hata için aşağıdaki "_ignore_category kullanılarak" bölümüne bakın **

$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'

Ürün Resmi için:

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

Resim URL'sinin etikette kullanılmasını istiyorsanız,

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();Zaten sonucunu aldım url_key. Yani bu $productdeğişken olmadan mümkündür . Bu, ürün imajını almanın ve yeniden boyutlandırmanın, tüm ürünü yüklemeden de mümkün olduğuna inanmamı sağlıyor. (yani hiçbir kullanımı Mage::getModel('catalog/product')->load($productId);)
Sander Koedood

2

Ben btw belirli senaryo büyük bir çözüm olduğunu düşünüyorum mpaepper yorumuna kod 1 satır eklemek istiyorum. Görüntüyü ürün modeli üzerinden yüklemek için bir ürün nesnesinin olmadığı bir sayfadaki bir döngüde kullandım.

Bir görüntüyü bir ürün nesnesiyle yüklemek istemediğinizde, mpaepper exlpains yaklaşımını kullanabilirsiniz. Bu çözümü kullanırken manuel olarak oluşturulan görüntüyü kaydetmeyi unutmayın. Görüntü nesnesini kaydettiğinizde, normal Magento görüntülerinin de yaptığı gibi bir önbellek dosyası oluşturur.

Yani tam kod şöyle olmalıdır:

$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

Ürünün görüntüsüne şu şekilde erişilebilir:

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

Görüntüyü yeniden boyutlandırmak için şunu ekleyebilirsiniz:

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

Ürün URL'sini almak için:

$_products->getProductUrl();

Burada $ _products ürünün kendisidir, ürün kimliği değildir;


2
$_productsDeğişkene erişimim yok , çünkü bu ürünü tamamen yüklememi gerektiriyor. Ve döngü yaptığım tüm ürünleri yüklemek, saniyede yükleme süreleri oluşturacak, bu da çok fazla.
Sander Koedood

neden ürünü yüklemeden ürün verilerini almak istemezsiniz? Tüm nitelikleri yüklemek yerine yalnızca istediğiniz nitelikleri seçmek için attributeToSelect işlevini ekleyebilirsiniz.
Rojan Shrestha

1
O zaman ürün url'sini ve resmini nasıl elde edeceğinizi gösterebilir misiniz? Koleksiyon almamaktaki asıl amacım bunun çok yavaş olacağı varsayımıydı.
Sander Koedood

Genellikle ürünü yüklerim ve hiçbir zaman yavaş hissetmedi. $ _Products = Mage :: getModel ('katalog / ürün') -> loadByAttribute ('sku', 'productsku');
Rojan Shrestha

Bundan sonra yukarıdaki cevabımı takip et
Rojan Shrestha
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.