Magento – Cross-sell product is not showing in the product detail page

cross-sellsmagento-1.7productproduct-view

In product detail page the following code is written to display the cross-sell product which are set from the admin side..
<?php echo $this->getChildHtml('crosssell'); ?>
But it is not showing anything although there are cross sell products present in the admin side and the cross-sell products are instock.

I looked into its respective block i.e.

app/core/code/Mage/Catalog/Block/Product/List/Crosssell.php

and the function where the product collection is formed is as follows..

protected function _prepareData()
{
    $product = Mage::registry('product');
    /* @var $product Mage_Catalog_Model_Product */

    $this->_itemCollection = $product->getCrossSellProductCollection()
        ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
        ->setPositionOrder()
        ->addStoreFilter();


    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($this->_itemCollection);

    $this->_itemCollection->load();

    foreach ($this->_itemCollection as $product) {
        $product->setDoNotUseCategoryId(true);
    }

    return $this;
}  

I got nothing related to cross sell product while doing var_dump($product).

This is product detail layout file i.e. catalog.xml

<catalog_product_view translate="label">
<label>Catalog Product View (Any)</label>
<!-- Mage_Catalog -->
<reference name="root">
    <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
</reference>
<reference name="head">
    <action method="addJs"><script>varien/product.js</script></action>
    <action method="addJs"><script>varien/configurable.js</script></action>
    <action method="addItem"><type>js_css</type><name>calendar/calendar-win2k-1.css</name><params/></action>
    <action method="addItem"><type>js</type><name>calendar/calendar.js</name></action>
    <action method="addItem"><type>js</type><name>calendar/calendar-setup.js</name></action>
    <action method="addCss"><stylesheet>css/basket.css</stylesheet></action>
</reference>
<reference name="content">
    <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs"/>
        <block type="page/html_pager" name="product_review_list.toolbar" />
        <block type="core/template" name="product_review_list.count" template="review/product/view/count.phtml" />
        <block type="review/product_view_list" name="product.info.product_additional_data" as="product_reviews" template="review/product/view/list.phtml" />
        <block type="catalog/product_view" name="review_button" as="review_button" template="review/product/view/button.phtml"/>

        <block type="catalog/product_view" name="product.info.media" as="media" template="catalog/product/view/media.phtml"/>

        <block type="core/text_list" name="alert.urls" as="alert_urls" translate="label">
            <label>Alert Urls</label>
        </block>

        <action method="setTierPriceTemplate"><template>catalog/product/view/tierprices.phtml</template></action>

        <block type="catalog/product_list_upsell" name="product.info.upsell" as="upsell_products" template="catalog/product/list/upsell.phtml">
            <action method="setColumnCount"><columns>4</columns></action>
            <action method="setItemLimit"><type>upsell</type><limit>6</limit></action>
        </block>

        <block type="catalog/product_list_crosssell" name="product.info.crosssell" as="crosssell" template="catalog/product/list/crosssell.phtml"/>


        <block type="catalog/product_list_related" name="catalog.product.related" as="related" template="catalog/product/list/related.phtml"/>

        <block type="catalog/product_view_additional" name="product.info.additional" as="product_additional_data" />
        <block type="catalog/product_view_description" name="product.description" as="description" template="catalog/product/view/description.phtml">
            <action method="addToParentGroup"><group>detailed_info</group></action>
        </block>
        <block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml">
            <action method="addToParentGroup"><group>detailed_info</group></action>
        </block>
        <block type="catalog/product_view" name="product.info.addto" as="addto" template="catalog/product/view/addto.phtml"/>
        <block type="catalog/product_view" name="product.info.addtocart" as="addtocart" template="catalog/product/view/addtocart.phtml"/>

        <block type="core/text_list" name="product.info.extrahint" as="extrahint" translate="label">
            <label>Product View Extra Hint</label>
        </block>

        <block type="catalog/product_view" name="product.info.options.wrapper" as="product_options_wrapper" template="catalog/product/view/options/wrapper.phtml" translate="label">
            <label>Info Column Options Wrapper</label>
            <block type="core/template" name="options_js" template="catalog/product/view/options/js.phtml"/>
            <block type="catalog/product_view_options" name="product.info.options" as="product_options" template="catalog/product/view/options.phtml">
                <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/view/options/type/text.phtml</template></action>
                <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/view/options/type/file.phtml</template></action>
                <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/view/options/type/select.phtml</template></action>
                <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/view/options/type/date.phtml</template></action>
            </block>
                <block type="core/html_calendar" name="html_calendar" as="html_calendar" template="page/js/calendar.phtml"/>
        </block>
        <block type="catalog/product_view" name="product.info.options.wrapper.bottom" as="product_options_wrapper_bottom" template="catalog/product/view/options/wrapper/bottom.phtml" translate="label">
            <label>Bottom Block Options Wrapper</label>
            <action method="insert"><block>product.tierprices</block></action>
            <block type="catalog/product_view" name="product.clone_prices" as="prices" template="catalog/product/view/price_clone.phtml"/>
            <action method="append"><block>product.info.addtocart</block></action>
            <action method="append"><block>product.info.addto</block></action>
        </block>

        <block type="core/template_facade" name="product.info.container1" as="container1">
            <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action>
            <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
            <action method="append"><block>product.info.options.wrapper</block></action>
            <action method="append"><block>product.info.options.wrapper.bottom</block></action>
        </block>
        <block type="core/template_facade" name="product.info.container2" as="container2">
            <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action>
            <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
            <action method="append"><block>product.info.options.wrapper</block></action>
            <action method="append"><block>product.info.options.wrapper.bottom</block></action>
        </block>
        <action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>
        <action method="unsetCallChild"><child>container2</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>
    </block>
</reference>

So how to check if there is something missing by which the crossell products are not coming ?
Is there any other method of getting crossell products ?

Best Answer

Try this module:

File : app\etc\modules\Rkt_CrossSell.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Rkt_CrossSell>
            <active>true</active>
            <codePool>community</codePool>
            <depends>
                <Mage_Catalog />
            </depends>
        </Rkt_CrossSell>
    </modules>
</config>

File : app\code\community\Rkt\CrossSell\etc\config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Rkt_CrossSell>
          <version>1.0.0</version>
        </Rkt_CrossSell>
    </modules>
    <global>
        <helpers>
            <rkt_crossell>
                <class>Rkt_CrossSell_Helper</class>
            </rkt_crossell>
        </helpers>
        <blocks>
            <rkt_crossell>
                <class>Rkt_CrossSell_Block</class>
            </rkt_crossell>
        </blocks>
    </global>
    <frontend>
        <layout>
            <updates>
                <rkt_crossell>
                    <file>rkt_crossell.xml</file>
                </rkt_crossell>
            </updates>
        </layout>
    </frontend>
</config>

File : app\code\community\Rkt\CrossSell\Block\Catalog\Product\View\Crosssell.php

<?php
class Rkt_CrossSell_Block_Catalog_Product_View_Crosssell extends Mage_Checkout_Block_Cart_Crosssell
{

    /**
     * Get crosssell items
     *
     * @return array
     */
    public function getItems()
    {
        $items = $this->getData('items');
        if (is_null($items)) {
            $items = $this->getProduct()->getCrossSellProducts();
            $this->setData('items', $items);
        }
        return $items;
    }
}

File : app\code\community\Rkt\CrossSell\Helper\Data.php

<?php
class Rkt_CrossSell_Helper_Data extends Mage_Core_Helper_Abstract
{

}

File : app\design\frontend\base\default\layout\rkt_crossell.xml

<?xml version="1.0"?>
<layout>
    <catalog_product_view>
        <reference name="product.info">
            <block type="rkt_crossell/catalog_product_view_crosssell" name="product.view.crosssell" as="crosssell" template="checkout/cart/crosssell.phtml" />
        </reference>
    </catalog_product_view>
</layout>

Now in your view.phtml add this code in the appropriate position

<?php echo $this->getChildHtml('crosssell') ?> 

clear your cache and re-run product page.

Note: please check you have specify products cross sell for appropriate product.

I hope this will help you.

Related Topic