Темизация ТИПА ТОВАРА на странице товара (drupal 7 commerce)

Аватар пользователя Samaella

Подскажите, как создать разные шаблоны для темизации страницы товара в зависимости от типа товара?
Можно сделать шаблон для типа контента = отображение товара, например node--product-display.tpl.php, но им будут обрабатываться все типы товаров, а мне необходимо сделать для каждого типа товара свой вид страницы товара.

Модули и темы:
Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Samaella
Samaella 2 года назад


Не совсем понятно, как это можно использовать... У меня страницы товаров не имеют прямых ссылок в меню и по одной ссылке в меню выводятся анонсы товаров разных типов...
Я так понимаю, что теоретически можно использовать хук, который определяет шаблон вывода ноды. Логика примерно такая:
1. Проверяем тип контента
Если нода относится к типу представление товара (у меня этот тип контента называется product-display)-->
2. Поверяем тип товара

  • если товар, который выводится этим product-display, относится к type1, то используем шаблон type1.tpl.php
  • если товар, который выводится этим product-display, относится к type2, то используем шаблон type2.tpl.php

Но возможно ли это сделать практически? Я с хуками совсем не знакома и они не очень-то мне понятны

Аватар пользователя Nikit
Nikit 2 года назад

аа, не так понял.
hook_preprocess_node в template.php - проверяй какой тип node - если равно product_display - то у этой ноды есть поле связанных товаров (e.g. field_product), грузи их циклом через commerce_product_load - проверяй тип продукта и делай template suggestion для node-PRODUCTYPE.tpl.php

Аватар пользователя Samaella
Samaella 2 года назад
Nikit написал:
аа, не так понял.
hook_preprocess_node в template.php - проверяй какой тип node - если равно product_display - то у этой ноды есть поле связанных товаров (e.g. field_product), грузи их циклом через commerce_product_load - проверяй тип продукта и делай template suggestion для node-PRODUCTYPE.tpl.php

Спасибо за наводку.
Подскажите еще, как правильно получить поле с типом [#bundle] из загруженного товара?
Пишу так - не работает

function shop_preprocess_node(&$variables) {
        $node = $variables['node'];
        if ($node->type == 'product_display') {
                foreach ($node->field_product['und'] as $value) {
                        $product = commerce_product_load($value['product_id']);
                        //получить тип из $product
                        $type = $product->bundle;
                        $variables['shop_hook_suggestions'][] = 'node__product__'.$type;
                }
        }
}
Аватар пользователя Nikit
Nikit 2 года назад

может $product->name или $product->type - структуру $product изучи через dpm($product); модуль devel...

Аватар пользователя Samaella
Samaella 2 года назад
Nikit написал:
может $product->name или $product->type - структуру $product изучи через dpm($product); модуль devel...

Спасибо! Все получилось!

function shop_preprocess_node(&$variables) {
        $node = $variables['node'];
        if ($node->type == 'product_display') {
                foreach ($node->field_product['und'] as $value) {
                        $product = commerce_product_load($value['product_id']);
                        $type = $product->type;
                        $variables['theme_hook_suggestions'][] = 'node__product__'.$type;
                }
        }
}
Аватар пользователя Samaella
Samaella 2 года назад
Graytone написал:
Не оно ? http://www.drupalka.ru/node/82


Нет, таксономия и типы товаров разные вещи. Как для нод можно создавать типы, так и в Commerce для товаров можно создавать типы (шаблон товара со своим набором полей), только товары выводятся на сайте через специально созданный тип ноды. Т.е. товары разных типов выводятся на сайте одним и тем же типом ноды.