Возможно ли иметь несколько вариантов оформления страницы продукта для magento? - PullRequest
0 голосов
/ 04 марта 2012

Теоретически, как мне это написать или реализовать решение моей проблемы?

Допустим, у меня есть 3 различных дизайна для страницы продукта.

  1. Специальные продукты / атрибуты: [Имя: Blurb :, Цена :, Изображение продукта :, Описание :,]
  2. Обычные продукты / атрибуты: [Имя :, Изображение продукта :, Описание :,]
  3. Другие продукты / атрибуты: [Имя :, Изображение продукта :, Описание :, Ссылки :,]

Я думаю, что они все просто используют один шаблон (app / design / frontend / default / skinName / template / product / view.phtml), но я хочу сделать 3 варианта для каждого из них. Каждый из вариантов продукта также имеет разные атрибуты. Я использую Magento 1.6.

Пожалуйста, посоветуйте, с чего мне начать.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Вариант 1: компоновка XML по типу продукта

Являются ли три различных варианта продукта отдельными типами продукта случайно (например, конфигурируемые, простые и загружаемые)?Если это так, вы можете установить другой шаблон, используя объявление обновления макета в своих темах layout / local.xml file:

<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() и указать используемый там шаблон.Я не буду вдаваться в подробности, потому что я думаю, что предыдущие варианты лучше.

Так что, в зависимости от выбранного вами подхода, существует много возможностей (это еще не все).

0 голосов
/ 04 марта 2012

вам нужно создать другой атрибут для них, как для специального продукта, создать специальный тип атрибута «да / нет», и вы будете выбирать эту опцию, когда будете добавлять продукт каждый раз. и, наконец, в view.phtml вы должны проверить, является ли этот продукт особенным или нет. и использовать ваше состояние и реализовать свой собственный дизайн здесь. Надеюсь, что это поможет вам. спасибо

...