Magento - Belirli bir özellik değeri ürünlerini al

4 Cevap php

Benim blok kodunun ben programlama belirli bir değere sahip bir nitelik ürünlerin bir listesini almak için çalışıyorum.

O nasıl bir sadece belirli bir niteliğine sahip ürünlerini listelemek için bunları filtre sonra tüm ürünleri almak istiyorum mümkün değildir dönüşümlü olur?

Nasıl standart boolean filtreleri AND veya OR benim ürün ile eşleşme kullanarak bir arama yapmak istiyorsunuz?

4 Cevap

Hemen hemen tüm Magento Modelleri Modelin birden çok örneği almak için kullanılan bir karşılık koleksiyon nesnesi var.

Ürün koleksiyonu örneğini, aşağıdakileri yapın

$collection = Mage::getModel('catalog/product')->getCollection();

Ürünler bir Magento EAV tarzı Modeli vardır, bu yüzden size dönmek istediğiniz ek özellikler eklemek gerekir.

$collection = Mage::getModel('catalog/product')->getCollection();

//fetch name and orig_price into data
$collection->addAttributeToSelect('name');	
$collection->addAttributeToSelect('orig_price');

Koleksiyonları, filtreleri ayarlamak için birden fazla sözdizimi var. Ben her zaman aşağıda ayrıntılı birini kullanın, ancak filtreleme yöntemleri kullanılabilecek ek yollar için Magento kaynağını incelemek isteyebilirsiniz.

(Daha büyüktür ve daha az) değerleri bir dizi filtre nasıl aşağıdaki gösterir

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');	
$collection->addAttributeToSelect('orig_price');	

//filter for products whose orig_price is greater than (gt) 100
$collection->addFieldToFilter(array(
	array('attribute'=>'orig_price','gt'=>'100'),
));	

//AND filter for products whose orig_price is greater than (lt) 130
$collection->addFieldToFilter(array(
	array('attribute'=>'orig_price','lt'=>'130'),
));

Bu bir şey YA eşittir başka bir isim tarafından filtre olsa.

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');	
$collection->addAttributeToSelect('orig_price');	

//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
	array('attribute'=>'name','eq'=>'Widget A'),
	array('attribute'=>'name','eq'=>'Widget B'),		
));

Desteklenen kısa Koşullamalar (eq, lt, vs) tam listesi lib/Varien/Data/Collection/Db.php olarak _getConditionSql yöntemi bulunabilir

Son olarak, tüm Magento koleksiyonları (taban toplama sınıf yineleyici arayüzleri üzerinde uygular) iterated olabilir. Bu filtreler ayarlanır kez ürün kapmak olacak nasıl olduğunu.

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name');	
$collection->addAttributeToSelect('orig_price');	

//filter for products who name is equal (eq) to Widget A, or equal (eq) to Widget B
$collection->addFieldToFilter(array(
	array('name'=>'orig_price','eq'=>'Widget A'),
	array('name'=>'orig_price','eq'=>'Widget B'),		
));

foreach ($collection as $product) {
	//var_dump($product);
	var_dump($product->getData());
}

Bu aynı sorun ile başkalarına yardım etmek benim asıl soruya kadar izleyin. Bunun yerine elle bir nitelik için tüm id, değer çiftlerini almak için aşağıdaki kodu kullanabilirsiniz id bakarak daha, bir öznitelik tarafından filtre gerekir. Veri anahtarı olarak nitelik ismi ile bir dizi olarak döndürülür.

function getAttributeOptions($attributeName) {
    $product = Mage::getModel('catalog/product');
    $collection = Mage::getResourceModel('eav/entity_attribute_collection')
              ->setEntityTypeFilter($product->getResource()->getTypeId())
              ->addFieldToFilter('attribute_code', $attributeName);

    $_attribute = $collection->getFirstItem()->setEntity($product->getResource());
    $attribute_options  = $_attribute->getSource()->getAllOptions(false);
    foreach($attribute_options as $val) {
        $attrList[$val['label']] = $val['value'];
    }   

    return $attrList;
}

Burada onların nitelik kümesi kimliği ile ürün almak için kullanabileceğiniz bir fonksiyondur. Önceki işlevini kullanarak erişilmiştir.

function getProductsByAttributeSetId($attributeSetId) {
   $products = Mage::getModel('catalog/product')->getCollection();
   $products->addAttributeToFilter('attribute_set_id',$attributeSetId);

   $products->addAttributeToSelect('*');

   $products->load();
   foreach($products as $val) {
     $productsArray[] = $val->getData();
  }

  return $productsArray;
}

Get TEXT ürün listeleme sayfasında ön sonuna yönetici eklenen bağlıyor.

Teşekkür Anita Mourya

Ben orada iki yöntem bulduk. "Na_author" olarak adlandırılan ürün nitelik metin alanı olarak end'deki eklenir diyelim.

YÖNTEM 1

üzerine list.phtml

<?php $i=0; foreach ($_productCollection as $_product): ?>

SKU TARAFINDAN HER ÜRÜN İÇİN YÜK VE İÇ foreach NİTELİK GET

<?php
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$_product->getSku());
$author = $product['na_author'];
?>

<?php
if($author!=""){echo "<br /><span class='home_book_author'>By ".$author ."</span>";} else{echo "";}
?>

YÖNTEM 2

Mage/Catalog/Block/Product/List.phtml yolculuğu boyunca ve 'yerel klasöre' ayarlanır

i.e. Copy From

Mage/Catalog/Block/Product/List.phtml

ve İÇİN PASTA

app/code/local/Mage/Catalog/Block/Product/List.phtml

Aşağıda koyu harflerle gösterildiği 2 satır ekleyerek işlevini değiştirmek.

protected function _getProductCollection()
{
       if (is_null($this->_productCollection)) {
           $layer = Mage::getSingleton('catalog/layer');
           /* @var $layer Mage_Catalog_Model_Layer */
           if ($this->getShowRootCategory()) {
               $this->setCategoryId(Mage::app()->getStore()->getRootCategoryId());
           }

           // if this is a product view page
           if (Mage::registry('product')) {
               // get collection of categories this product is associated with
               $categories = Mage::registry('product')->getCategoryCollection()
                   ->setPage(1, 1)
                   ->load();
               // if the product is associated with any category
               if ($categories->count()) {
                   // show products from this category
                   $this->setCategoryId(current($categories->getIterator()));
               }
           }

           $origCategory = null;
           if ($this->getCategoryId()) {
               $category = Mage::getModel('catalog/category')->load($this->getCategoryId());

               if ($category->getId()) {
                   $origCategory = $layer->getCurrentCategory();
                   $layer->setCurrentCategory($category);
               }
           }
           $this->_productCollection = $layer->getProductCollection();

           $this->prepareSortableFieldsByCategory($layer->getCurrentCategory());

           if ($origCategory) {
               $layer->setCurrentCategory($origCategory);
           }
       }
       **//CMI-PK added na_author to filter on product listing page//
       $this->_productCollection->addAttributeToSelect('na_author');**
       return $this->_productCollection;

}

ve sen .... onu görmek için mutlu olacak!

Ben hattı ekledik

$this->_productCollection->addAttributeToSelect('releasedate');

içinde

app / kod / çekirdek / Büyücü / Katalog / Blok / Ürün / List.php hattında 95

içindefunction _getProductCollection()

and then call it içinde

app / tasarım / frontend / default / hellopress / şablon / katalog / ürün / list.phtml

Kod yazarak

<div><?php echo $this->__('Release Date: %s', $this->dateFormat($_product->getReleasedate())) ?>
</div>

Now it is working içindeMagento 1.4.x