请尽量避免Mage::getSingleton('customer/session')->isLoggedIn()
像之前向您建议的那样乱扔您的模板。
如果您只需要处理产品视图上的添加到购物车功能,那么您只需要一点布局 xml...
<customer_logged_out>
<remove name="product.info.addtocart" />
</customer_logged_out>
漂亮,干净,简单。
但是,如果您必须处理站点范围内的问题,即产品视图、产品列表等,那么我建议您创建一个订阅catalog_product_is_salable_after
. 在每次调用Mage_Catalog_Model_Product isSalable之后,此事件都会被触发,这并不奇怪- 因此,如果客户未登录,您将有机会强制产品不可销售。
显然,您确实需要创建一个模块,但这是 IMO 的最佳选择,值得付出一点额外的努力。
因此,要创建观察者,您需要将以下内容添加到 config.xml 的前端节点:
<events>
<catalog_product_is_salable_after>
<observers>
<yourmodule>
<class>Yourcompany_Yourmodule_Model_Observer</class>
<method>catalog_product_is_salable_after</method>
</yourmodule>
</observers>
</catalog_product_is_salable_after>
</events>
您的观察者将需要以下内容:
class Yourcompany_Yourmodule_Model_Observer
{
public function catalog_product_is_salable_after(Varien_Event_Observer $observer)
{
if (! Mage::helper('customer')->isLoggedIn()) {
$observer->getEvent()->getData('salable')
->setData('is_salable', false);
}
}
}