Можно ли иметь несколько скинов для оформления страницы продукта для Magento?

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

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

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

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

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

Благодарю вас!


person Pennf0lio    schedule 03.03.2012    source источник
comment
это зависит от того, какую настройку вы хотите. Если вы хотите изменить всю страницу, я не думаю, что вы сможете.   -  person Oğuz Çelikdemir    schedule 04.03.2012
comment
извините, я не знал этого аспекта, который я узнал сейчас. В Magento есть возможность настраивать пользовательский атрибут продукта с помощью маркеров макета. Вы можете посетить этот веб-сайт Создание пользовательских дескрипторов макета   -  person Oğuz Çelikdemir    schedule 04.03.2012


Ответы (2)


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

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

person Vinai    schedule 04.03.2012
comment
Спасибо, Винай, это именно то, что я ищу. - person Pennf0lio; 05.03.2012

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

person Shamim Ahmed    schedule 04.03.2012