0

我已经在磁力论坛上发布了这个问题,但两周内没有发布任何内容,所以我将在这里发布,希望能得到更多的见解

“我一直在浏览论坛并研究如何更改一个产品的视图,我在论坛上找到了一个很好的帖子,让我可以随意更改视图,但我的页面似乎是由两个单独的文件创建的。一个在 app/design/frontend/base/default/template/catalog/product 中调用 view.phtml,另一个在同一路径中调用 default.phtml,就在另外两个目录 view/type/ 下。我需要修改的代码是默认的.phtml 但是当我这样做并将其设置为显示时,它会停止显示页面的另一半或 view.phtml 部分。

我在用 ....

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

...在后端产品的自定义布局部分。但这仅显示页面的大小部分,而不是 view.phtml 输出的名称/描述/图片女巫

那么如何让 view.phtml 显示新的 default1.phtml

如果我尝试......

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

它可以工作,但不会在 size 部分显示 default1.phtml。这一切都是因为我需要展示 2 张不同尺寸的图表,一张用于男性,一张用于女性。您可以通过访问神秘屋服装网并导航到女士产品然后是男士产品来查看我的问题,您会看到男士产品仍然链接到女士尺码表。

如何修复 view.phtml 以使其链接到 default1 而不是 default?我意识到我需要制作一个重复的 view.phtml 但我找不到这两个文件之间的连接是我的 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>

4

3 回答 3

1

通过启用“调试模式”可以帮助您找到在哪个页面上使用了哪些块。您可以通过转到管理面板并转到系统->配置来启用它,然后在左侧导航中将“当前配置范围”从“默认配置”切换到“您的商店名称 Web Store”。

页面将自动刷新,然后在高级部分的左侧导航底部单击开发人员,然后在手风琴的调试部分中,您将看到“模板路径提示”和“将块名称添加到提示”将每个选择字段切换到“是”,然后单击页面右上角的保存配置按钮。

一旦调试模式处于活动状态,您的所有块都将以红色标出,并标有模板位置和块名称引用。希望这对将来有所帮助。

于 2012-10-17T23:11:02.687 回答
0

好的,所以我找到了包含我的尺码表块的代码

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

当我将其注释掉时,我得到了我期望的结果并且我的尺寸图表消失了在 Catalog.xml 中我找到了我认为的代码(有一些 catalog.xml 文件有没有办法确保我有正确的? )

无论如何,我在那里找到的代码是......

<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>

我添加的

<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>

<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>

然后我将调用 php 更改为...

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

但是我在翻译中遗漏了一些东西

于 2012-08-20T17:48:03.530 回答
0

它不起作用的原因是因为 view.phtml 有点像产品视图页面的父块,因此当您禁用它时,它只显示尺寸部分,而当您启用它时,您会得到错误的尺寸部分。

您需要做的是在 view.phtml 中告诉它新的尺寸模板。

这是通过首先创建一个块,然后为其分配一个模板,然后在您的 view.phtml 文件中调用它来完成的

最简单的方法是找出第一个尺寸块的名称,然后在 xml 中查找并复制它并将其名称更改为唯一的名称,并将模板更改为新文件。

然后进入 view.phtml 文件并按名称调用要显示的块。

在您的情况下,我认为需要更改以下几行:

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

它应该是:

<?php if ($_product->isSaleable() && $this->hasOptions()):?>
    <?php echo $this->getChildHtml('your_new_block_name') ?>
<?php endif;?>
于 2012-08-16T20:39:09.400 回答