Magento – How to show Grouped or Bundle Products in the custom template

ce-1.7.0.2layouttemplate

I created my own template/skin. Simple products show great but others fail. As far as i know, the following lines in the view.phtml allow me to do this:

<?php if ($_product->isSaleable() && $this->hasOptions()):?>
       <?php echo $this->getChildChildHtml('container2', '', true, true) ?>
<?php endif;?>

Those above lines should load the catalog/product/view/type/grouped.phtml, but they don't in my template. As i ugly workarround i tried implementing the following in my view.phtml:

<?php if($_product->isGrouped()) { ?>

                            <?php $this->setPreconfiguredValue(); ?>
                            <?php $_associatedProducts = $this->getAssociatedProducts(); ?>
                            <?php $_hasAssociatedProducts = count($_associatedProducts) > 0; ?>
                            <table class="data-table grouped-items-table" id="super-product-table">
                                <col />
                                <col />
                                <col width="1" />
                                <thead>
                                    <tr>
                                        <th><?php echo $this->__('Product Name') ?></th>
                                        <?php if ($this->getCanShowProductPrice($_product)): ?>
                                        <th class="a-right"><?php echo $this->__('Price') ?></th>
                                        <?php endif; ?>
                                        <?php if ($_product->isSaleable()): ?>
                                        <th class="a-center"><?php echo $this->__('Qty') ?></th>
                                        <?php endif; ?>
                                    </tr>
                                </thead>
                                <tbody>
                                <?php if ($_hasAssociatedProducts): ?>
                                <?php foreach ($_associatedProducts as $_item): ?>
                                    <?php $_finalPriceInclTax = $this->helper('tax')->getPrice($_item, $_item->getFinalPrice(), true) ?>
                                    <tr>
                                        <td><?php echo $this->htmlEscape($_item->getName()) ?></td>
                                        <?php if ($this->getCanShowProductPrice($_product)): ?>
                                        <td class="a-right">
                                            <?php if ($this->getCanShowProductPrice($_item)): ?>
                                            <?php echo $this->getPriceHtml($_item, true) ?>
                                            <?php echo $this->getTierPriceHtml($_item) ?>
                                            <?php endif; ?>
                                        </td>
                                        <?php endif; ?>
                                        <?php if ($_product->isSaleable()): ?>
                                        <td class="a-center">
                                        <?php if ($_item->isSaleable()) : ?>
                                            <input type="text" name="super_group[<?php echo $_item->getId() ?>]" maxlength="12" value="<?php echo $_item->getQty()*1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
                                        <?php else: ?>
                                            <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                                        <?php endif; ?>
                                        </td>
                                        <?php endif; ?>
                                    </tr>
                                <?php endforeach; ?>
                                <?php else: ?>
                                   <tr>
                                       <td colspan="<?php if ($_product->isSaleable()): ?>4<?php else : ?>3<?php endif; ?>"><?php echo $this->__('No options of this product are available.') ?></td>
                                   </tr>
                                <?php endif; ?>
                                </tbody>
                            </table>
                            <script type="text/javascript">decorateTable('super-product-table')</script>

                <?php   } ?>

Which is the exact same code as the grouped.phtml but this also fails. Can someone set me in the right direction?

Best Answer

Sorry I'm so late to the party, but the issue is likely that you are trying to display the grouped product data with the product.info block which by default is an instance of Mage_Catalog_Block_Product_View:

<catalog_product_view translate="label">
    <!-- ... -->
    <reference name="content">
        <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
    <!-- ... -->
</catalog_product_view translate="label">

That block & template does not display product-type-specific details directly. Rather, the template echoes the product_type_data block:

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

The product_type_data alias is a perfect example of why aliases exist in Magento layouts - it allows blocks to exist in layout (requiring a unique name) yet still be assigned as children of other blocks without needing to have a separate template for each combination. Note all of the type-specific handles in catalog.xml which each specify a type-specific block instance & template, yet all assign these type-specific blocks with the product_type_data alias. In your case, see the grouped product handle PRODUCT_TYPE_grouped:

<PRODUCT_TYPE_grouped translate="label" module="catalog">
    <label>Catalog Product View (Grouped)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_grouped" name="product.info.grouped" as="product_type_data" template="catalog/product/view/type/grouped.phtml">
            <block type="core/text_list" name="product.info.grouped.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
</PRODUCT_TYPE_grouped>
Related Topic