Magento代码自适应在比较页面中显示自定义属性值

时间:2013-02-13 08:34:44

标签: php magento magento-1.7

我正在运行magento 1.7.0.2,我的扩展程序会覆盖导航和产品页面中的属性值,但不会覆盖比较页面。

为此我需要将attributes.phtml中的代码改编为list.phtml, 但由于我的编程技巧非常有限,我真的不知道该怎么做。

产品attributes.phtml文件,它提供了所需的输出:

<?php
/**
 * Product additional attributes template
 *
 * @see Mage_Catalog_Block_Product_View_Attributes
 */
?>

<?php
    $_helper = $this->helper('catalog/output');
    $_product = $this->getProduct()
?>
<?php if($_additional = $this->getAdditionalData()): ?>
<div class="box-collateral box-additional">
    <table class="data-table" id="product-attribute-specs-table">
        <col width="25%" />
        <col />
        <tbody>
        <?php foreach ($_additional as $_data): ?>
            <tr>
                <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>

//edited to check and print custom value

                   <?php if (($numberOptions = Mage::getModel('mana_filters/filter2')->load($_data['code'], 'code')) && $numberOptions->getDisplay() == 'slider') : ?> 
                       <td class="data"><?php  echo Mage::helper('manapro_filtersuperslider')->formatNumber($_product->getData($_data['code']), $numberOptions) ?></td> 
                   <?php else : ?>
                       <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td> 
                   <?php endif; ?>
//edit end

            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
    <script type="text/javascript">decorateTable('product-attribute-specs-table')</script>
</div>
<?php endif;?>

编辑后的代码应该适应这个lists.phtml

<?php
/**
 * @category    design
 * @package     base_default
 * @copyright   Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
/* @var $this Mage_Catalog_Block_Product_Compare_List */
?>
<div class="page-title title-buttons">
    <h1><?php echo $this->__('Compare Products') ?></h1>
    <a href="#" onclick="window.print(); return false;" class="link-print"><?php echo $this->__('Print This Page') ?></a>
</div>
<?php $_total=$this->getItems()->getSize() ?>
<?php if($_total): ?>
    <table class="data-table compare-table" id="product_comparison">
    <?php $_i=0 ?>
    <?php foreach($this->getItems() as $_item): ?>
        <?php if($_i++%10==0): ?>
            <col width="1" />
        <?php endif; ?>
            <col width="<?php echo floor(100/$_total); ?>%" />
    <?php endforeach; ?>
<?php if ($_total>2): ?>
        <thead>
            <tr>
            <?php $_i=0 ?>
            <?php foreach($this->getItems() as $_item): ?>
                <?php if($_i++%10==0): ?>
                    <th>&nbsp;</th>
                <?php endif; ?>
                <td class="a-right"><a href="#" class="btn-remove" onclick="removeItem('<?php echo $this->helper('catalog/product_compare')->getRemoveUrl($_item) ?>');" title="<?php echo $this->__('Remove This Item') ?>"><?php echo $this->__('Remove This Item') ?></a></td>
            <?php endforeach; ?>
            </tr>
        </thead>
<?php endif ?>
        <tbody>
            <tr class="product-shop-row">
            <?php $_i=0 ?>
            <?php foreach($this->getItems() as $_item): ?>
                <?php if($_i++%10==0): ?>
                    <th>&nbsp;</th>
                <?php endif; ?>
                <td>
                    <a class="product-image" href="#" onclick="setPLocation('<?php echo $this->getProductUrl($_item) ?>', true)" title="<?php echo $this->stripTags($_item->getName(), null, true) ?>"><img src="<?php echo $this->helper('catalog/image')->init($_item, 'small_image')->resize(125, 125); ?>" width="125" height="125" alt="<?php echo $this->stripTags($_item->getName(), null, true) ?>" /></a>
                    <h2 class="product-name"><a href="#" onclick="setPLocation('<?php echo $this->getProductUrl($_item) ?>', true)" title="<?php echo $this->stripTags($_item->getName(), null, true) ?>"><?php echo $this->helper('catalog/output')->productAttribute($_item, $_item->getName(), 'name') ?></a></h2>
                    <?php echo $this->getReviewsSummaryHtml($_item, 'short') ?>
                    <?php echo $this->getPriceHtml($_item, true, '-compare-list-top') ?>
                    <?php if($_item->isSaleable()): ?>
                        <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setPLocation('<?php echo $this->helper('catalog/product_compare')->getAddToCartUrl($_item) ?>', true)"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                    <?php else: ?>
                        <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                    <?php endif; ?>
                    <?php if ($this->helper('wishlist')->isAllow()) : ?>
                        <ul class="add-to-links">
                            <li><a href="<?php echo $this->getAddToWishlistUrl($_item) ?>" class="link-wishlist" onclick="setPLocation(this.href, true)"><?php echo $this->__('Add to Wishlist') ?></a></li>
                        </ul>
                    <?php endif; ?>
                </td>
            <?php endforeach; ?>
            </tr>
        </tbody>
        <tbody>
        <?php foreach ($this->getAttributes() as $_attribute): ?>
            <tr>
                <?php $_i=0 ?>
                <?php foreach($this->getItems() as $_item): ?>
                <?php if($_i++%10==0): ?>
                <th><span class="nobr"><?php echo $_attribute->getStoreLabel() ?></span></th>
                <?php endif; ?>

//I think the adapted code should go somewhere here

                    <td>
                    <?php switch ($_attribute->getAttributeCode()) {
                        case "price": ?>
                            <?php echo $this->getPriceHtml($_item, true, '-compare-list-' . $_attribute->getCode()) ?>
                            <?php break;
                        case "small_image": ?>
                            <img src="<?php echo $this->helper('catalog/image')->init($_item, 'small_image')->resize(125, 125); ?>" width="125" height="125" alt="<?php echo $this->htmlEscape($_item->getName()) ?>" title="<?php echo $this->htmlEscape($_item->getName()) ?>" />
                            <?php break;
                        case "date":
                              echo substr($this->getProductAttributeValue($_item, $_attribute),0,10);
                              break;
                        default: ?>
                            <div class="std">
                                <?php echo $this->helper('catalog/output')->productAttribute($_item, $this->getProductAttributeValue($_item, $_attribute), $_attribute->getAttributeCode()) ?>
                            </div>
                            <?php break;
                    } ?>
                </td>
                <?php endforeach; ?>
            </tr>
        <?php endforeach; ?>
        </tbody>
        <tbody>
                <tr class="add-to-row">
                <?php $_i=0 ?>
                <?php foreach($this->getItems() as $_item): ?>
                <?php if($_i++%10==0): ?>
                <th>&nbsp;</th>
                <?php endif; ?>
                <td>
                    <?php echo $this->getPriceHtml($_item, true, '-compare-list-bottom') ?>
                    <?php if($_item->isSaleable()): ?>
                        <p><button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setPLocation('<?php echo $this->helper('catalog/product_compare')->getAddToCartUrl($_item) ?>', true)"><span><span><?php echo $this->__('Add to Cart') ?></span></span></button></p>
                    <?php else: ?>
                        <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                    <?php endif; ?>
                    <?php if ($this->helper('wishlist')->isAllow()) : ?>
                        <ul class="add-to-links">
                            <li><a href="<?php echo $this->getAddToWishlistUrl($_item);?>" class="link-wishlist" onclick="setPLocation(this.href, true)"><?php echo $this->__('Add to Wishlist') ?></a></li>
                        </ul>
                    <?php endif; ?>
                </td>
                <?php endforeach; ?>
            </tr>
        </tbody>
    </table>
    <div class="buttons-set">
        <button type="button" title="<?php echo $this->__('Close Window') ?>" class="button" onclick="window.close();"><span><span><?php echo $this->__('Close Window') ?></span></span></button>
        <span class="please-wait" id="compare-list-please-wait" style="display:none;">
            <img src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif') ?>" alt="<?php echo $this->__('Please wait...') ?>" title="<?php echo $this->__('Please wait...') ?>" class="v-middle" /> <?php echo $this->__('Please wait...') ?>
        </span>
    </div>
    <script type="text/javascript">
        decorateTable('product_comparison');

        /**
         * Send remove item request, after that reload windows
         */
        function removeItem(url)
        {
            new Ajax.Request(url, {
                parameters: {isAjax: 1, method: 'POST'},
                onLoading: function(){$('compare-list-please-wait').show();},
                onSuccess: function(transport) {
                    $('compare-list-please-wait').hide();
                    window.location.reload();
                    window.opener.location.reload();
                }
            });
        }
    </script>
<?php else: ?>
    <script type="text/javascript">window.close();</script>
<?php endif; ?>

1 个答案:

答案 0 :(得分:0)

您应该在交换机的默认情况下添加代码:

default: ?>
                        <div class="std">
                            <?php echo $this->helper('catalog/output')->productAttribute($_item, $this->getProductAttributeValue($_item, $_attribute), $_attribute->getAttributeCode()) ?>
                        </div>
                        <?php break;

成为

 default: ?>
                        <div class="std">
                            <?php if (($numberOptions = Mage::getModel('mana_filters/filter2')->load($_attribute->getAttributeCode(), 'code')) && $numberOptions->getDisplay() == 'slider') : ?> 
                  <?php  echo Mage::helper('manapro_filtersuperslider')->formatNumber($_item->getData($_attribute->getAttributeCode()), $numberOptions) ?>
               <?php else : ?>
                  <?php echo $this->helper('catalog/output')->productAttribute($_item, $this->getProductAttributeValue($_item, $_attribute), $_attribute->getAttributeCode()) ?>
               <?php endif; ?>
                        </div>
                        <?php break;