Я использую Диаграммы последовательности много (продвинутый бумага). Я нахожу, что они дают мне хорошее визуальное представление логический поток вызовов метода и информации между различными системами и компонентами в наших приложениях.
Почти все модели Magento имеют соответствующий объект Collection, который можно использовать для получения нескольких экземпляров модели.
Чтобы создать экземпляр коллекции Product, выполните следующие действия.
$collection = Mage::getModel('catalog/product')->getCollection();
Продукты являются Magento Модель стиля EAV, поэтому вам нужно будет добавить любые дополнительные атрибуты, которые вы хотите вернуть.
$collection = Mage::getModel('catalog/product')->getCollection();
//fetch name and orig_price into data
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('orig_price');
Существует несколько синтаксисов для установки фильтров в коллекциях. Я всегда использую подробный вариант ниже, но вы, возможно, захотите изучить исходный код Magento на предмет дополнительных способов использования методов фильтрации.
Ниже показано, как фильтровать по диапазону значений (больше И меньше)
$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 less than (lt) 130
$collection->addFieldToFilter(array(
array('attribute'=>'orig_price','lt'=>'130'),
));
Хотя это будет фильтровать по имени, которое соответствует одному ИЛИ другому.
$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'),
));
Полный список поддерживаемых коротких условных операторов (eq, lt и т. Д. ) можно найти в методе _getConditionSql
в lib / Varien / Data / Collection / Db.php
Наконец, все коллекции Magento могут повторяться (базовый класс коллекции реализует одно из интерфейсы итератора). Вот как вы будете получать свои продукты после установки фильтров.
$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'),
));
foreach ($collection as $product) {
//var_dump($product);
var_dump($product->getData());
}
Это следующее на мой первоначальный вопрос, чтобы помочь другим с той же проблемой. Если вам нужно фильтровать с помощью атрибута, вместо того, чтобы вручную просматривать идентификатор, вы можете использовать следующий код для получения всех идентификаторов, пары значений для атрибута. Данные возвращаются в виде массива с именем атрибута в качестве ключа.
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;
}
Я добавил строку
$this->_productCollection->addAttributeToSelect('releasedate');
в
app/code/core/Mage/Catalog/Block/Product/List.php на строке 95
в функцию _getProductCollection()
и затем вызвал ее в
app/design/frontend/default/hellopress/template/catalog/product/list.phtml
Написав код
<div><?php echo $this->__('Release Date: %s', $this->dateFormat($_product->getReleasedate())) ?>
</div>
Теперь это работает в Magento 1.4.x