Использую Drupal Commerce, и в меню у меня есть пункт «Корзина», со ссылкой на корзину пользователя. Хочется, чтобы стиль пункта меню менялся, если корзина не пуста.
Я буду использовать hook_preprocess_menu темы, чтобы изменить нужный пункт меню перед рендерингом. Если в корзине что то есть, то я добавлю к пункту меню css класс, который поможет мне ассоциировать нужные стили.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
function MYTHEME_preprocess_menu($vars) { // фильтрую по имени меню (у меня это account) if ($vars['menu_name'] == 'account') { // получаю текущую корзину пользователя $current_store = \Drupal::service('commerce_store.current_store'); $store = $current_store->getStore(); $cart_provider = \Drupal::service('commerce_cart.cart_provider'); $cart = $cart_provider->getCart("default", $store); // корзина не пуста? - тогда добавлю класс 'cart-not-empty' if (!empty($cart->getItems())) { foreach($vars['items'] as $item) { if ($item['title'] == 'Корзина') { $item['attributes']->addClass(Html::cleanCssIdentifier('cart-not-empty', [])); } } } } } |