0
votes

I have posted this issue on the magneto Forums but haven't herd anything in two weeks so I'm going to post here and hopefully get a little more insight

"I have been going through the forums and working out how to change the view for one product, and I found a good post on the forums that let me change the view like I want but my page seems to be created from two seperate files. One called view.phtml in app/design/frontend/base/default/template/catalog/product and another called default.phtml in the same path just down two more directories view/type/. The Code I need to modify is in default.phtml but when i do that and set it to display that it stops displaying the other half of the page or the view.phtml part.

I am using ....

<reference name="product.info">
<action method="setTemplate">              
<template>catalog/product/view/type/default1.phtml</template></action>
</reference>

...in the custom layout section of the product in the backend. But this only shows the sizing section of the page and not the name/description/picture witch is output by view.phtml

So how do I get view.phtml to display the new default1.phtml

and if I try.....

<reference name="product.info">
<action method="setTemplate"> 
<template>catalog/product/view.phtml</template>
</action>
</reference>

it works but does not show default1.phtml in the size section. All this because I need to show 2 different size charts one for males and one for females. You can see my issue by going to mysteryhousecostumes.net and navigating to a womans product and then a mans and you will see the mens products still link to the womens size chart.

How do I fix view.phtml so that it links to default1 instead of default? I realize I’ll need to make a duplicate view.phtml but I cant find the connection between the two files here is my view.phtml…

<?php $_helper = $this->helper('catalog/output'); ?>
<?php $_product = $this->getProduct(); ?>
<script type="text/javascript">
var optionsPrice = new Product.OptionsPrice(<?php echo $this->getJsonConfig() ?>);
</script>
<div id="messages_product_view"><?php echo $this->getMessagesBlock()->getGroupedHtml() ?>    </div>
<div class="product-view">
<div class="product-essential">
<form action="<?php echo $this->getSubmitUrl($_product) ?>" method="post" id="product_addtocart_form"<?php if($_product->getOptions()): ?> enctype="multipart/form-data"<?php endif; ?>>
    <div class="no-display">
        <input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
        <input type="hidden" name="related_product" id="related-products-field" value="" />
    </div>

    <div class="product-shop">
        <div class="product-name">
            <h1><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></h1>
        </div>

        <?php if ($this->canEmailToFriend()): ?>
            <p class="email-friend"><a href="<?php echo $this->helper('catalog/product')->getEmailToFriendUrl($_product) ?>"><?php echo $this->__('Email to a Friend') ?></a></p>
        <?php endif; ?>

        <?php echo $this->getReviewsSummaryHtml($_product, false, true)?>
        <?php echo $this->getChildHtml('alert_urls') ?>
        <?php echo $this->getChildHtml('product_type_data') ?>
        <?php echo $this->getTierPriceHtml() ?>
        <?php echo $this->getChildHtml('extrahint') ?>

        <?php if (!$this->hasOptions()):?>
            <div class="add-to-box">
                <?php if($_product->isSaleable()): ?>
                    <?php echo $this->getChildHtml('addtocart') ?>
                    <?php 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; ?>
                <?php echo $this->getChildHtml('addto') ?>
            </div>
            <?php echo $this->getChildHtml('extra_buttons') ?>
        <?php endif; ?>

        <?php if ($_product->getShortDescription()):?>
            <div class="short-description">
                <h2><?php echo $this->__('Quick Overview') ?></h2>
                <div class="std"><?php echo $_helper->productAttribute($_product, nl2br($_product->getShortDescription()), 'short_description') ?></div>
            </div>
        <?php endif;?>

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

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

    </div>

    <div class="product-img-box">
        <?php echo $this->getChildHtml('media') ?>
    </div>

    <div class="clearer"></div>
    <?php if ($_product->isSaleable() && $this->hasOptions()):?>
        <?php echo $this->getChildChildHtml('container2', '', true, true) ?>
    <?php endif;?>
</form>
<script type="text/javascript">
//<![CDATA[
    var productAddToCartForm = new VarienForm('product_addtocart_form');
    productAddToCartForm.submit = function(button, url) {
        if (this.validator.validate()) {
            var form = this.form;
            var oldUrl = form.action;

            if (url) {
               form.action = url;
            }
            var e = null;
            try {
                this.form.submit();
            } catch (e) {
            }
            this.form.action = oldUrl;
            if (e) {
                throw e;
            }

            if (button && button != 'undefined') {
                button.disabled = true;
            }
        }
    }.bind(productAddToCartForm);

    productAddToCartForm.submitLight = function(button, url){
        if(this.validator) {
            var nv = Validation.methods;
            delete Validation.methods['required-entry'];
            delete Validation.methods['validate-one-required'];
            delete Validation.methods['validate-one-required-by-name'];
            if (this.validator.validate()) {
                if (url) {
                    this.form.action = url;
                }
                this.form.submit();
            }
            Object.extend(Validation.methods, nv);
        }
    }.bind(productAddToCartForm);
//]]>
</script>
</div>

<div class="product-collateral">
<?php foreach ($this->getChildGroup('detailed_info', 'getChildHtml') as $alias => $html):?>
    <div class="box-collateral <?php echo "box-{$alias}"?>">
        <?php if ($title = $this->getChildData($alias, 'title')):?>
        <h2><?php echo $this->escapeHtml($title); ?></h2>
        <?php endif;?>
        <?php echo $html; ?>
    </div>
<?php endforeach;?>
    <?php echo $this->getChildHtml('upsell_products') ?>
    <?php echo $this->getChildHtml('product_additional_data') ?>
</div>

3

3 Answers

0
votes

The reason it's not working is because view.phtml is kinda like the parent block for the product view page, therefore when you disable it it only shows the sizing section, and when you enable it you get the wrong sizing section.

What you need to do is within view.phtml tell it about the new sizing template.

This is done by first creating a block, then assigning it a template, and then calling it in your view.phtml file

The easiest way to do this is find out what the first sizing block is called, then look in the xml for it and copy it and change it's name to something unique and the template to you new file.

Then you go in to your view.phtml file and call the block by name to be displayed.

In your case I think it's the following lines that need to be changed:

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

It should read:

<?php if ($_product->isSaleable() && $this->hasOptions()):?>
    <?php echo $this->getChildHtml('your_new_block_name') ?>
<?php endif;?>
1
votes

Something that may help you find what blocks are used on what page is by enabling "debug mode". You can enable it by going to your admin panel and goto system->configuration then in the left nav switch the "Current Configuration Scope" from "Default Config" to "your-stores-name Web Store".

The page will auto refresh then towards the bottom of the left nav in the ADVANCED section click Developer then in the Debug section of the accordion you will see "Template Path Hints" and "Add Block Names to Hints" switch each of these select fields to "yes" then click the Save Config button at the top right of the page.

Once debug mode is active you will all your blocks will be outlined in red and labeled with template locations and block name references. Hope this helps in the future.

0
votes

OK So I found the code including my size chart block

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

When I comment it out I get the results i expect and my sizing charts disappear In Catalog.xml I have found what I think the code is (theres a few catalog.xml files is there a way to be sure i have the right one?)

Anyway the code I found there is...

<PRODUCT_TYPE_simple translate="label" module="catalog">
        <label>Catalog Product View (Simple)</label>
        <reference name="product.info">
            <block type="catalog/product_view_type_simple" name="product.info.simple"as="product_type_data" template="catalog/product/view/type/default.phtml">
            <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
</PRODUCT_TYPE_simple>
<PRODUCT_TYPE_configurable translate="label" module="catalog">
    <label>Catalog Product View (Configurable)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_configurable" name="product.info.configurable" as="product_type_data" template="catalog/product/view/type/default.phtml">
            <block type="core/text_list" name="product.info.configurable.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
    <reference name="product.info.options.wrapper">
        <block type="catalog/product_view_type_configurable" name="product.info.options.configurable" as="options_configurable" before="-" template="catalog/product/view/type/options/configurable.phtml"/>
    </reference>
</PRODUCT_TYPE_configurable>

To which I added

<PRODUCT_TYPE_simple translate="label" module="catalog">
    <label>Catalog Product View (Simple)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_simple" name="product.info.simple" as="product_type_data1" template="catalog/product/view/type/default1.phtml">
            <block type="core/text_list" name="product.info.simple.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
</PRODUCT_TYPE_simple>

and

<PRODUCT_TYPE_configurable translate="label" module="catalog">
    <label>Catalog Product View (Configurable)</label>
    <reference name="product.info">
        <block type="catalog/product_view_type_configurable" name="product.info.configurable" as="product_type_data1" template="catalog/product/view/type/default1.phtml">
            <block type="core/text_list" name="product.info.configurable.extra" as="product_type_data_extra" translate="label">
                <label>Product Extra Info</label>
            </block>
        </block>
    </reference>
    <reference name="product.info.options.wrapper">
        <block type="catalog/product_view_type_configurable" name="product.info.options.configurable" as="options_configurable" before="-" template="catalog/product/view/type/options/configurable.phtml"/>
    </reference>
</PRODUCT_TYPE_configurable>

Then I changed the calling php to look like...

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

But I have missed something in translation