Как вывести в body класс типа продукта?

Главные вкладки

Аватар пользователя DD 85 DD 85 18 сентября 2019 в 22:41

Как вывести в body класс типа продукта?

Добавил строчку
product_types ? 'page-product-types-' ~ product_types|clean_class,
но не заработало.

{%
  set body_classes = [
    logged_in ? 'user-logged-in',
    not root_path ? 'path-frontpage' : 'path-' ~ root_path|clean_class,
    node_type ? 'page-node-type-' ~ node_type|clean_class,
    db_offline ? 'db-offline',
    product_types ? 'page-product-types-' ~ product_types|clean_class,
  ]
%}

Я так понимаю, что нужно что-то дописать в файл .theme в preprocess_html, но что?

Лучший ответ

Аватар пользователя gun_dose gun_dose 19 сентября 2019 в 13:33
<?php
use Drupal\commerce_product\Entity\ProductInterface;
/**
 * Implements hook_preprocess_HOOK() for HTML document templates.
 */
function MODULE_preprocess_html(&$variables) {
  
// If on an individual node page or node preview page, add the product type to
  // the body classes.
  
if ($product = \Drupal::routeMatch()->getParameter('commerce_product')) {
    if (
$product instanceof ProductInterface) {
      
$variables['product_type'] = $product->bundle();
    }
  }
}
?>

Откуда я это взял?

Комментарии

Аватар пользователя DD 85 DD 85 20 сентября 2019 в 0:25

С drush я незнаком. Пока удаётся обходиться без него. Но я так понимаю, что это альтернативный способ очистки кэша. Не поможет.

Аватар пользователя VasyOK VasyOK 19 сентября 2019 в 11:43

А для подобного обязательно програмировывание использовать? Модулями никак?
context
custom_body_class
field_formatter_class

Аватар пользователя DD 85 DD 85 20 сентября 2019 в 0:26

Я бы с удовольствием обошёлся модулями – это что называется мой вариант.
Но!
Context я как-то ставил на семёрку и по моим ощущениям он вряд ли решит эту задачу.
custom_body_class и field_formatter_class примерно одно и тоже. Места появления настроек разные, а функционал похожий – позволяют добавлять классы в ручную через предназначенное для этого поле. Впрочем, может токены помогли бы, но есть сомнения, что токены будут доступны.
А к списку предложенных модулей можно ещё добавить body_roles_classes, но он только классы ролей выводит.

Аватар пользователя gun_dose gun_dose 19 сентября 2019 в 13:33
<?php
use Drupal\commerce_product\Entity\ProductInterface;
/**
 * Implements hook_preprocess_HOOK() for HTML document templates.
 */
function MODULE_preprocess_html(&$variables) {
  
// If on an individual node page or node preview page, add the product type to
  // the body classes.
  
if ($product = \Drupal::routeMatch()->getParameter('commerce_product')) {
    if (
$product instanceof ProductInterface) {
      
$variables['product_type'] = $product->bundle();
    }
  }
}
?>

Откуда я это взял?