Magento — создайте коллекцию товаров SALE с учетом правил Special_price и промо-цен.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Magento — создайте коллекцию товаров SALE с учетом правил Special_price и промо-цен.

Сообщение Anonymous »

Мне нужна коллекция продуктов, состоящая из продуктов, у которых действует специальная_цена и/или они соответствуют любому правилу рекламной цены. В данный момент я делаю что-то подобное в другом месте своего сайта, используя getFinalPrice(), но я не могу добавить это в качестве фильтра, не так ли?

У меня есть два отдельных блока кода, которые по отдельности более или менее делают то, что я хочу, и я думаю, они должны как-то сочетаться друг с другом:

Код: Выделить всё

$rule = Mage::getModel('catalogrule/rule')->load(9);
$rule->setWebsiteIds("1");
$productIdsArray = $rule->getMatchingProductIds();
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect("*")->addAttributeToFilter("entity_id", array("in", $productIdsArray));
и

Код: Выделить всё

$todayDate = date('m/d/y');
$tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
$tomorrowDate = date('m/d/y', $tomorrow);

$collection = Mage::getResourceModel('catalogsearch/advanced_collection')
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addStoreFilter();

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($collection);

$collection->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
->addAttributeToFilter('special_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $tomorrowDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left');
Для правил фильтрации кода требуется идентификатор правила промоакции, но меня действительно интересуют ВСЕ правила промоакций, а не одно конкретное.
Может кто-нибудь помочь мне объединить их в одно, пожалуйста?

Спасибо,

~ gpcola

Обновление от 11.10.11:

Хорошо, вот что у меня получилось:

Код: Выделить всё

// get catalogue price rule promotion product collection
$storeId = Mage::app()->getStore()->getId();
$rules = Mage::getModel('catalogrule/rule')
->getResourceCollection()
->addWebsiteFilter(Mage::getModel('core/store')->load($storeId)->getWebsiteId());
foreach($rules as $rule) {
$promoids =  array_merge($promoids, $rule->getMatchingProductIds());
}

$todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

$pricecollection = Mage::getResourceModel('catalog/product_collection');
$pricecollection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

// get special price product collection
$todayDate = date('m/d/y');
$tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
$tomorrowDate = date('m/d/y', $tomorrow);
$pricecollection = Mage::getResourceModel('catalogsearch/advanced_collection')
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addStoreFilter();

Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($pricecollection);
Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($pricecollection);

$pricecollection->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
->addAttributeToFilter('special_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $tomorrowDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
;

// merge the collections
$merged_ids = array_merge($pricecollection->getAllIds(), $promoids);
$this->_productCollection = Mage::getResourceModel('catalog/product_collection')
->addFieldToFilter('entity_id', $merged_ids)
->setPageSize($this->getProductsCount())
->setCurPage(1);

return $this->_productCollection;
Но это не возвращает никаких продуктов... У меня есть около 1000 продуктов, которые соответствуют тому или иному правилу ценообразования по промо-акции, поэтому я знаю, что это неверно. Есть идеи?

да, кстати, если я напечатаю_r($this->_productCollection), я получу следующее:

Код: Выделить всё

Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection Object
(
[_flatEnabled:protected] => Массив
(
[1] => 1
)

(
[_flatEnabled:protected] => Массив
(
[1] => 1
)

(
[_flatEnabled:protected] => Array
(
[1] => 1
)

(
[_flatEnabled:protected] => Array
(
[1] => 1
)

(
[_flatEnabled:protected] => Array
(
[1] => 1
)

(
[_flatEnabled:protected] => Array
р>

Код: Выделить всё

[_productWebsiteTable:protected] => catalog_product_website
[_productCategoryTable:protected] => catalog_category_product
[_addUrlRewrite:protected] =>
[_urlRewriteCategory:protected] =>
[_addMinimalPrice:protected] =>
[_addFinalPrice:protected] =>
[_allIdsCache:protected] =>
[_addTaxPercents:protected] =>
[_productLimitationFilters:protected] => Array
(
)

[_productCountSelect:protected] =>
[_isWebsiteFilter:protected] =>
[_priceDataFieldFilters:protected] => Array
(
)

[_map:protected] => Array
(
[fields] => Array
(
[price] => price_index.price
[final_price] => price_index.final_price
[min_price] => price_index.min_price
[max_price] => price_index.max_price
[tier_price] => price_index.tier_price
[special_price] => price_index.special_price
)

)

[_storeId:protected] => 1
[_itemsById:protected] => Array
(
)

[_staticFields:protected] => Array
(
[entity_id] => entity_id
[type_id] => type_id
[attribute_set_id] => attribute_set_id
)

[_entity:protected] => Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Flat Object
(
[_storeId:protected] => 1
[_resources:protected] => Mage_Core_Model_Resource Object
(
[_connectionTypes:protected] => Array
(
[pdo_mysql] => Mage_Core_Model_Resource_Type_Db_Pdo_Mysql Object
(
[_name:protected] =>
[_entityClass:protected] => Mage_Core_Model_Resource_Entity_Table
)

)

[_connections:protected] => Array
(
[core_read] => Varien_Db_Adapter_Pdo_Mysql Object
(
[_transactionLevel:protected] => 0
[_connectionFlagsSet:protected] => 1
[_ddlCache:protected] => Array
(
[1] => Array
(
...
Правильно ли это выглядит?

Подробнее здесь: https://stackoverflow.com/questions/802 ... al-price-p
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Woocommerce Добавление класса суммы цены («woocommerce-Price-amount sum») для возврата $price
    Anonymous » » в форуме Php
    0 Ответы
    80 Просмотры
    Последнее сообщение Anonymous
  • Как отправить пользовательское значение из sale.order.line в stock.move в odoo
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Backoffice Каталог товаров Колонка оптовых цен
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Создайте новый API-интерфейс Magento Rest, чтобы получить список категорий в Magento.
    Anonymous » » в форуме Php
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Как включить случайную сортировку товаров для категорий товаров WooCommerce?
    Anonymous » » в форуме Php
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»