检查产品是否在愿望清单中

时间:2011-07-18 23:37:09

标签: magento themes helper

我正在研究Magento主题,我需要构建一个可以检查产品是否已添加到用户心愿单的功能。

Magento有一个“Mage_Wishlist_Helper_Data”辅助类,但我不知道如何构建一个check-if-in-wish-wishlist函数。基本上我需要使用Magento的wishlist功能来构建收藏夹列表。如果特定产品已添加到用户的收藏夹中,我想在“添加到心愿单”链接中添加一个特殊类。

6 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

由于集合是延迟加载的,我假设您可以执行以下操作:

$_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就足够了。

答案 2 :(得分:3)

我现在才回到这个项目,但是我接受了Daniel Sloof的建议,并且使用下面的函数完美地运行了:

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)) :

答案 3 :(得分:1)

我在检查了Mage :: helper('wishlist') - &gt; 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;
    }

答案 4 :(得分:0)

我通过以下功能解决了这个问题。我希望这对某些人有帮助。

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

答案 5 :(得分:0)

由于@ 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);
}
相关问题