【问题标题】:Is it possible to have multiple skin design of the product page for magento?magento的产品页面可以有多种皮肤设计吗?
【发布时间】:2012-03-21 22:50:34
【问题描述】:

理论上我应该如何编写代码或解决我的问题?

假设我有 3 种不同的产品页面设计。

  1. 特殊产品 / 属性:[名称:,Blurb:,价格:,产品图片:,描述:,]
  2. 常规产品/属性:[名称:,产品图片:,描述:,]
  3. 其他产品/属性:[名称:,产品图片:,描述:,链接:,]

我认为他们都只共享一个模板(app/design/frontend/default/skinName/template/product/view.phtml),但我想为每个模板做 3 个变体。每个产品变体也具有不同的属性。我正在使用 Magento 1.6。

请告诉我从哪里开始。

谢谢!

【问题讨论】:

  • 这取决于您想要什么样的自定义。如果你想改变整个页面,我不认为你可以。
  • 对不起,我不知道我现在学到的这方面。 Magento 具有通过布局句柄定位自定义产品属性的功能。你可以查看这个网站Creating Custom Layout Handles

标签: php css magento magento-1.5


【解决方案1】:

选项 1:按产品类型布局 XML

这三种不同的产品变体是否偶然区分了产品类型(例如可配置、简单和可下载)? 如果是这样,您可以使用主题 layout/local.xml 文件中的布局更新声明来设置不同的模板:

<layout>
    <PRODUCT_TYPE_configurable>
        <reference name="product.info">
            <action method="setTemplate">
                <template>my/catalog/product/view_configurable.phtml</template>
            </action>
        </reference>
    </PRODUCT_TYPE_configurable>
    <PRODUCT_TYPE_simple>
        <reference name="product.info">
            <action method="setTemplate">
                <template>my/catalog/product/view_simple.phtml</template>
            </action>
        </reference>
    </PRODUCT_TYPE_simple>
    <!-- etc... -->
</layout>

选项 2:自定义布局更新

您还可以使用产品的自定义布局更新属性来指定要通过布局 XML 使用的模板。在这种情况下,只需从上面的代码中省略布局句柄即可。

选项 3:事件观察者

如果您的产品变体无法按产品类型区分,并且您不想为每个产品添加自定义布局 XML,那么您确实必须创建一个产品属性来指定产品所属的类型。如果您不希望客户看到它,请使其在前端不可见。

然后,为controller_action_layout_render_before_catalog_product_view 事件创建一个事件观察者。
在观察者方法中,获取 product.info 块并设置您想要的模板。

public function controllerActionLayoutRenderBeforeCatalogProductView(Varien_Event_Observer $observer)
{
    $block = Mage::app()->getLayout()->getBlock('product.info');
    switch ($observer->getProduct()->getYourAttribute())
    {
        case 'Special Products':
            $block->setTemplate('my/catalog/product/view_special.phtml');
            break;
        case 'Regular Products':
            $block->setTemplate('my/catalog/product/view_regular.phtml');
            break;
        case 'Other Products':
            $block->setTemplate('my/catalog/product/view_other.phtml');
            break;
    }
}

选项 4:块重写

另一个选择——即使更容易发生冲突——是重写catalog/product_view 块,重载_beforeToHtml() 方法并指定要在其中使用的模板。我不会在这里详细介绍,因为我认为以前的选项更好。

因此,根据您采取的方法类型,有很多可能性(这些还不是全部)。

【讨论】:

  • 谢谢 Vinai,这正是我要找的。​​span>
【解决方案2】:

您必须为它们创建不同的属性,例如特殊产品,创建属性特殊类型“是/否”,每次添加产品时都会选择此选项。最后在 view.phtml 中你必须检查这个产品是否特殊。并在这里使用您调节和实现您自己的设计。 希望这会帮助你。 谢谢

【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2020-05-11
    • 2015-12-23
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多