2

我实际上是在与客户讨论将社交网络共享集成到他们的 magentocommerce 中的必要性。

客户希望用户能够在 facebook 上分享产品,并允许未登录用户“预览”产品(可能希望通过 facebook 本身跟踪链接),但随后需要登录才能购买该项目.

我告诉他们禁用整个站点的登录,并且仅在结帐时需要它(这也是被谷歌索引的最佳方式),但他们要求我为未登录的用户创建某种预览,并要求然后登录以查看“添加到购物车”按钮。

它容易实现吗?这值得么?我仍然认为最好的解决方案是仅在结帐时需要登录。

您是否有任何链接/演示可以显示某种预览但需要登录?我实际上正在考虑 ebay 向未登录用户展示内容的方式。

4

3 回答 3

11

请尽量避免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);
        }
    }
}
于 2012-07-30T16:14:33.883 回答
0

您可以轻松地在主题的 view.phtml 中添加条件。app\design\frontend\default[主题]\template\catalog\product\view.phtml

健康)状况:

$this->helper('customer')->isLoggedIn()

<?php if($_product->isSaleable() && $this->helper('customer')->isLoggedIn()): ?>
                        <?php echo $this->getChildHtml('addtocart') ?>
                        <?php /* // OVIDIU remove 'or  if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
                            <span class="or"><?php echo $this->__('OR') ?></span>
                        <?php endif; */ ?>
                    <?php endif; ?>

按照同样的逻辑,也修改 list.phtml。

于 2012-07-30T12:38:05.657 回答
-1

试试这个:-

文件:/template/catalog/product/view/type/simple.phtml 位置:第 52 行就在上面

<?php if($_product->isSaleable()): ?>

在第 66 行附近,在后面使用 endif

<?php endif; ?>

所以整个交易看起来像这样从第 52 行开始(注意我的编辑标签):

<!--edit-->
<?php if(Mage::getSingleton('customer/session')->isLoggedIn()): ?> 
<!--/edit-->
<?php if($_product->isSaleable()): ?>
    <fieldset class="add-to-cart-box">
        <legend><?php echo $this->__('Add Items to Cart') ?></legend>
        <span class="qty-box"><label for="qty"><?php echo $this->__('Qty') ?>:</label>
        <input name="qty" type="text" class="input-text qty" id="qty" maxlength="12" value="<?php echo $this->getMinimalQty($_product) ?>"/></span>
        <button class="form-button" onclick="productAddToCartForm.submit()"><span><?php echo $this->__('Add to Cart') ?></span></button>
        <?php if( $this->helper('wishlist')->isAllow() || $_compareUrl=$this->helper('catalog/product_compare')->getAddUrl($_product)): ?>
            <strong><?php echo $this->__('OR') ?></strong>
        <?php endif; ?>
    </fieldset>
<?php endif; ?>
<!--edit-->
<?php endif; /* if ($this->isCustomerLoggedIn()): */ ?> 
<!--/edit--> 
于 2012-07-30T12:57:45.393 回答