簡體   English   中英

magento的產品頁面可以有多個外觀設計嗎?

[英]Is it possible to have multiple skin design of the product page for magento?

從理論上講,我應該如何編寫代碼或實施解決方案?

假設我的產品頁面有3種不同的設計。

  1. 特殊產品 /屬性:[名稱:,模糊:,價格:,產品圖片:,說明:,]
  2. 常規產品 /屬性:[名稱:,產品圖片:,說明:,]
  3. 其他產品 /屬性:[名稱:,產品圖片:,說明:,鏈接:,]

我認為它們都共享一個模板(app / design / frontend / default / skinName / template / product / view.phtml),但我想對每個模板進行3種變化。 每個產品變體也具有不同的屬性。 我正在使用Magento 1.6。

請建議我從哪里開始。

謝謝!

選項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添加到每個產品,則確實必須創建一個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;
    }
}

選項4:塊重寫

另一個選擇-即使更容易發生沖突-將是重寫catalog/product_view塊,重載_beforeToHtml()方法並指定要在其中使用的模板。 在這里我將不做更多詳細介紹,因為我認為以前的選擇更好。

因此,根據您采用的方法類型,有很多可能性(並非全部)。

您必須為它們創建不同的屬性,例如特殊產品,創建特殊類型的屬性“是/否”,並且每次添加產品時都將選擇此選項。 最后在view.phtml中,您必須檢查該產品是否特殊。 並使用您的條件並在此處實現您自己的設計。 希望這會幫助你。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM