关闭magento购物车中的产品网址

时间:2015-09-15 20:13:20

标签: php magento magento-1.9

我想在magento中禁用购物车中的网址。

查看app/design/frontend/base/default/template/checkout/cart/item/default.phtml

我看到购物车商品是否有产品网址

    <h2 class="product-name">                                                
    <?php if ($this->hasProductUrl()):?>                                     
        <a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a>
    <?php else: ?>                                                           
        <?php echo $this->escapeHtml($this->getProductName()) ?>             
    <?php endif; ?>                                                          
    </h2>  

如果是,则呈现URL,如果不是,则只呈现产品名称(这就是我想要的)。

现在,轻松修复 - 我可以修改此模板,只是吐出名称(当然是在我自己的包/主题中),我的问题就解决了。

但我很好奇,想知道$this->hasProductUrl()的样子。

所以,经过一番挖掘,我在app/design/frontend/base/default/layout/checkout.xml

中看到了 在checkout_cart_index块中的

,就是这个页面的布局。

具体是$this引用的块:app/code/core/Mage/Checkout/Block/Cart/Item/Renderer.php

<checkout_cart_index translate="label">
    ...
    <reference name="content">                                               
        <block type="checkout/cart" name="checkout.cart">                    
            <action method="setCartTemplate"><value>checkout/cart.phtml</value></action>
            <action method="setEmptyTemplate"><value>checkout/cart/noItems.phtml</value></action>
            <action method="chooseTemplate"/>                                
            <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/item/default.phtml</template></action>
            <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/item/default.phtml</template></action>
            <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/item/default.phtml</template></action>
            ...
</checkout_cart_index>

所以当我结帐方法时,我会立即注意到这个块对象上的hasProductUrl,如果将产品网址设置为忽略,它将返回false?!

/**                                                                          
 * Check Product has URL                                                     
 *                                                                           
 * @return bool                                                              
 */                                                                          
public function hasProductUrl()                                              
{                                                                            
    if ($this->_ignoreProductUrl) {                                          
        return false;                                                        
    }   
    ...
}

还有一个很好的小公共方法可以在同一个块对象中切换这个变量

/**                                                                          
 * Set ignore product URL rendering                                          
 *                                                                           
 * @param bool $ignore                                                       
 * @return Mage_Checkout_Block_Cart_Item_Renderer                            
 */                                                                          
public function setIgnoreProductUrl($ignore = true)                          
{                                                                            
    $this->_ignoreProductUrl = $ignore;                                      
    return $this;                                                            
} 

但我看不出在哪里/怎么用呢?

我不知道如何从布局文件调用此方法,b / c这些渲染器块已经包含在布局调用中。

有人知道是否有正确的方法来调用此功能?

1 个答案:

答案 0 :(得分:0)

您可以通过XML调用块方法,并且可以将 _ignoreProductUrl 标志更改为TRUE / FALSE。

这里是一个示例:

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.cart.item.renderers.simple">
            <action method="setIgnoreProductUrl">
                <argument name="ignore" xsi:type="boolean">true</argument>
            </action>
        </referenceBlock>
    </body>
</page>