我正在研究Magento主题,我需要构建一个可以检查产品是否已添加到用户心愿单的功能。
Magento有一个“Mage_Wishlist_Helper_Data”辅助类,但我不知道如何构建一个check-if-in-wish-wishlist函数。基本上我需要使用Magento的wishlist功能来构建收藏夹列表。如果特定产品已添加到用户的收藏夹中,我想在“添加到心愿单”链接中添加一个特殊类。
答案 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);
}