[英]Is it possible to have multiple skin design of the product page for magento?
從理論上講,我應該如何編寫代碼或實施解決方案?
假設我的產品頁面有3種不同的設計。
我認為它們都共享一個模板(app / design / frontend / default / skinName / template / product / view.phtml),但我想對每個模板進行3種變化。 每個產品變體也具有不同的屬性。 我正在使用Magento 1.6。
請建議我從哪里開始。
謝謝!
三種不同的產品變體是否偶然地將產品類型分開(例如,可配置,簡單和可下載)? 如果是這樣,您可以使用主題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>
您還可以使用產品的定制布局更新屬性來指定要通過布局XML使用的模板。 在這種情況下,只需從上面的代碼中省略布局句柄。
如果無法通過產品類型區分產品變體,並且不想將自定義布局XML添加到每個產品,則確實必須創建一個product屬性來指定產品所屬的類型。 如果您不希望客戶看到它,則使其在前端不可見。
然后,為controller_action_layout_render_before_catalog_product_view
事件創建事件觀察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;
}
}
另一個選擇-即使更容易發生沖突-將是重寫catalog/product_view
塊,重載_beforeToHtml()
方法並指定要在其中使用的模板。 在這里我將不做更多詳細介紹,因為我認為以前的選擇更好。
因此,根據您采用的方法類型,有很多可能性(並非全部)。
您必須為它們創建不同的屬性,例如特殊產品,創建特殊類型的屬性“是/否”,並且每次添加產品時都將選擇此選項。 最后在view.phtml中,您必須檢查該產品是否特殊。 並使用您的條件並在此處實現您自己的設計。 希望這會幫助你。 謝謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.