[php] Magento - получение продуктов с определенным значением атрибута



Answers

Это зависит от моего первоначального вопроса, чтобы помочь другим с той же проблемой. Если вам нужно фильтровать по атрибуту, а не вручную искать идентификатор, вы можете использовать следующий код для извлечения всех пар id, value для атрибута. Данные возвращаются как массив с именем атрибута в качестве ключа.

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;
}

Вот функция, которую вы можете использовать для получения продуктов по их идентификатору набора атрибутов. Получено с использованием предыдущей функции.

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;
}
Question

В моем блочном коде я пытаюсь программно получить список продуктов, имеющих атрибут с определенным значением.

Альтернативно, если это невозможно, как можно получить все продукты, а затем фильтровать их, чтобы просто перечислять продукты с определенным атрибутом?

Как выполнить поиск, используя стандартные логические фильтры AND или OR чтобы соответствовать подмножеству моих продуктов?




Получить атрибуты TEXT добавленные от администратора до конца на странице списка продуктов.

Спасибо Анита Моурья

Я нашел два метода. Пусть, например, атрибут product, называемый «na_author», добавляется из бэкэнд в виде текстового поля.

МЕТОД 1

на list.phtml

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

ДЛЯ КАЖДОЙ НАГРУЗКИ ПРОДУКТА В СБОРЕ И ПОЛУЧИТЕ АТРИБУТ ВНУТРЕННЕГО НАРУШЕНИЯ

<?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 "";}
?>

СПОСОБ 2

Mage/Catalog/Block/Product/List.phtml OVER RIDE и установите в 'local folder'

т.е. Копировать из

Mage/Catalog/Block/Product/List.phtml

и Вставить в

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

измените функцию, добавив две строки, выделенные жирным шрифтом.

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;

}

и вы будете счастливы видеть это .... !!




Я добавил строку

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

в

app / code / core / Маг / Каталог / Блок / Продукт / Список.php в строке 95

в функции _getProductCollection()

и затем назовите его

приложение / дизайн / интерфейс / по умолчанию / hellopress / шаблон / Каталог / продукта / list.phtml

Написав код

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

Теперь он работает в Magento 1.4.x




Related