Всегда считать возврат 0 (ноль) из коллекции продуктов в Magento - PullRequest
1 голос
/ 19 ноября 2011

На самом деле, я пытаюсь выяснить, есть этот товар в списке желаний или нет.Поэтому я попытался ответить Даниэля Слофа в вопросе переполнения стека Проверьте, есть ли товар в списке желаний или нет , но коллекция продуктов всегда возвращает 0.

Что я пробовалнаходится здесь:

$_productCollection1 = Mage::helper('wishlist')
                             ->getProductCollection()
                             ->addFieldToFilter('sku','00114477oo0077');
 $_productCollection1->count();

Этот возвращает "0".

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

Использование

$_productCollection1->getSelect()->assemble()

и запрос

SELECT `e` . * , `cat_index`.`position` AS `cat_index_position`
FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_category_product_index` AS `cat_index` ON cat_index.product_id = e.entity_id
AND cat_index.store_id = '1'
AND cat_index.visibility
IN ( 3, 2, 4 )
AND cat_index.category_id = '2'
WHERE (
e.sku = '00114477oo0077'
)

Так что здесь не так?Есть ли другой способ сделать это?

Ответы [ 3 ]

1 голос
/ 28 мая 2013

Причина, по которой вызов getProductCollection() не работает, заключается в том, что он устарел после версии 1.4.2.0, согласно официальной документации Magento ( Класс Mage_Wishlist_Helper_Data ).

ИспользованиеgetWishlistItemCollection() как:

$_productCollection1 = Mage::helper('wishlist')
                           ->getWishlistItemCollection()
                           ->addFieldToFilter('sku','00114477oo0077');

вместо использования getProductCollection:

$_productCollection1 = Mage::helper('wishlist')
                           ->getProductCollection()
                           ->addFieldToFilter('sku','00114477oo0077');

При этом вызов $_productCollection1->count() вернет вам текущее количество элементов в журналесписок пожеланий пользователя.

1 голос
/ 19 ноября 2011

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

0 голосов
/ 21 ноября 2011

Я решил это с помощью следующей функции.

function checkInWishilist($_product){
    Mage::getSingleton('customer/session')->isLoggedIn();
    $session = Mage::getSingleton('customer/session');
    $cidData = $session->isLoggedIn();
    $customer_id = $session->getId();

    if ($customer_id){
        $wishlist = Mage::getModel('wishlist/item')->getCollection();
        $wishlist->getSelect()
                  ->join(array('t2' => 'wishlist'),
                         'main_table.wishlist_id = t2.wishlist_id',
                         array('wishlist_id','customer_id'))
                         ->where('main_table.product_id = '.$_product->getId().' AND t2.customer_id='.$customer_id);
        $count = $wishlist->count();
        $wishlist = Mage::getModel('wishlist/item')->getCollection();
    }
    else{
        $count="0";
    }

    if ($count):
        return true;
    else:
        return false;
    endif;
}
...