Проверьте, есть ли товар в списке желаний или нет - PullRequest
2 голосов
/ 19 июля 2011

Я работаю над темой Magento, и мне нужно создать функцию, которая может проверять, был ли продукт добавлен в список пожеланий пользователя.

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

Ответы [ 6 ]

6 голосов
/ 18 декабря 2011
 <?php $wishlist = Mage::getModel('wishlist/item')->load($_product->getId(),'product_id');
      if($wishlist->getId())
          //product is added
      echo "Added! - Product is in the wishlist!";
      else
          //add product to wishlist
      echo "<a href='".$this->helper('wishlist')->getAddUrl($_product) ."'>Add This?</a>";
  ;?>
4 голосов
/ 19 июля 2011

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

$_product = ...; // some product object you already have

$_productCollection = Mage::helper('wishlist')->getProductCollection()
    ->addFieldToFilter('sku', $_product->getSku());

if($_productCollection->count() > 0) {
    // User already has item in wishlist.
}

Вы можете выполнить аналогичную фильтрацию для других полей, но в этом случае достаточно SKU.

3 голосов
/ 19 сентября 2011

Сейчас я только возвращаюсь к этому проекту, но я принял предложение Дэниела Слофа, и он отлично работал, используя следующую функцию:

public function isInWishlist($item)
{
    $_productCollection = Mage::helper('wishlist')->getProductCollection()
        ->addFieldToFilter('sku', $item->getSku());

    if($_productCollection->count()) {
        return true;
    }
    return false;
}

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

if ($this->helper('wishlist')->isInWishlist($_product)) :
1 голос
/ 06 марта 2013

Я нашел это решение после того, как проверил запрос на выбор из Mage :: helper ('wishlist') -> getWishlistItemCollection (). Я надеюсь, что это решение кому-то поможет.

   /**
     * Check customers wishlist on identity product.
     * @param Mage_Catalog_Model_Product $_product
     * @return bool
     */
    private function _isInWishlist($_product)
    {        
        $_productCollection = Mage::helper('wishlist')->getWishlistItemCollection()
        ->addFieldToFilter('product_id', $_product->getId());

        if ($_productCollection->count()) {
            return true;
        }

        return false;
    }
0 голосов
/ 16 октября 2015

Так как решение @ alexadr.parhomenk s приводит к нежелательным результатам, вот меньший метод, который добивается цели:

/**
 * Check customers wishlist on identity product.
 * @param int $productId
 * @return bool
 */
public function isInWishlist($productId)
{
    $ids = Mage::registry('wishlist_ids');
    if (!$ids) {
        $productCollection = Mage::helper('wishlist')->getWishlistItemCollection();
        $ids = $productCollection->getColumnValues('product_id');
        Mage::register('wishlist_ids', $ids);
    }
    return in_array($productId, $ids);
}
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;
}
...