[СНИППЕТ] Drupal Commerce упрощенная корзина

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

Понадобилось сделать корзину в commerce попроще.

Вид типа N товаров - N руб

В template.php

<?php
function simple_commerce_cart() {
  global 
$user;

  

$order commerce_cart_order_load($user->uid);
  if(!empty(
$order)) {
    
$wrapper entity_metadata_wrapper('commerce_order'$order);
    
$line_items $wrapper->commerce_line_items;
    
$total commerce_line_items_total($line_items);
    
$currency commerce_currency_load($total['currency_code']);
    
$quantity commerce_line_items_quantity($line_itemscommerce_product_line_item_types());
    
$summ commerce_currency_format($total['amount'], $total['currency_code']);

    print 

"{$quantity} товаров - {$summ}";
  }
  else {
    print 
"Ваша корзина пуста";
  }
}
?>

Вызываем где надо

<?php
          
// Вывод упрощенной корзины. template.php
          
print simple_commerce_cart();
?>

Собственно темезировать можно как надо. Это просто вывод текста.

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

Комментарии

Аватар пользователя multpix
multpix 6 лет назад

а как бы потянуть в это поля из связанного товара?
был бы весьма признателен за небольшой пример.

Аватар пользователя Niklan
Niklan 6 лет назад
multpix написал:
а как бы потянуть в это поля из связанного товара?

мммм зачем? Если такое надо то проще стандартную корзиную юзать и через viwes тоскать поля.

Аватар пользователя multpix
multpix 6 лет назад
Niklan написал:

и такое делаю))
вопрос был именно про кастомный блок,
если есть возможность - пните в нужную сторону)
иначе сам дойду))

Аватар пользователя Niklan
Niklan 6 лет назад
multpix написал:

Посути за это отвечает line_items, так что копать от него стоит. Ну он точно необходим для товаров в корзине и с ними связан.

Аватар пользователя imarat
imarat 6 лет назад
Niklan написал:
а как бы потянуть в это поля из связанного товара?

там лайне итемз есть commerce_product_id. это ладно, а вот как потом получить дисплей продукта? ведь в товаре нет никакой информации о дисплее, только в дисплее есть информация о товаре. в общем, нужно сделать что-то типа рулезовского load entity by property, но как?

Аватар пользователя Niklan
Niklan 6 лет назад
imarat написал:

лучше смотреть в сторону API commerc'a

Аватар пользователя multpix
multpix 6 лет назад

в общем не придумал ничего умнее чем следующий костыль:

сделал вьюху (не мудрствуя - клон от commerce_cart_form) обозвал small_cart_image_slider
в нее связями фото товара (оно у меня именно в ноде и именно оно было необходимо)
все остальное ->наф ))
сама вьюха - слайдшоу

и добавил эту радость:
.commerce_embed_view('small_cart_image_slider', 'default', array($order->order_id), 'cart');
к своему кастомному блоку корзины
в хуке block_view
к выводу после всего что там уже есть)) то бишь в $block['content']

ибо не сниппет у меня а блок, однако логика работы весьма похожа.

Аватар пользователя forest_run
forest_run 6 лет назад

Niklan, заметил, что если корзина пуста, то так и не выводится надпись "Ваша корзина пуста" (зарегенный юзверь). Глубже копнул - заметил, что с анонимусами она как раз только и выводит эту фразу, даже если в корзинке что-то лежит.

Аватар пользователя forest_run
forest_run 6 лет назад

Так вроде работает как надо (только важно не забывать про t('')).

<?phpfunction simple_commerce_cart() {
  global 
$user;

  

$order commerce_cart_order_load($user->uid);

  if (!

$order || empty($order->commerce_line_items)) {
    print 
'Пусто';
  }
  else {
    
$wrapper entity_metadata_wrapper('commerce_order'$order);
    
$line_items $wrapper->commerce_line_items;
    
$total commerce_line_items_total($line_items);
    
$currency commerce_currency_load($total['currency_code']);
    
$quantity commerce_line_items_quantity($line_itemscommerce_product_line_item_types());
    
$summ commerce_currency_format($total['amount'], $total['currency_code']);

    print 

$quantity ' товаров - ' $summ;
  }
}
?>
Аватар пользователя imarat
imarat 6 лет назад

а вообще это во вьюхе можно легко сделать из стандартной корзины, включив агрегацию

Аватар пользователя TurboPixel
TurboPixel 6 лет назад

Немного допилил, чтобы воссияла сила русского языка.

<?phpfunction simple_commerce_cart() {
  global 
$user;

  

$order commerce_cart_order_load($user->uid);
  if(!empty(
$order)) {
    
$wrapper entity_metadata_wrapper('commerce_order'$order);
    
$line_items $wrapper->commerce_line_items;
    
$total commerce_line_items_total($line_items);
    
$currency commerce_currency_load($total['currency_code']);
    
$quantity commerce_line_items_quantity($line_itemscommerce_product_line_item_types());
    
$summ commerce_currency_format($total['amount'], $total['currency_code']);

    static 

$prods=array(' товар на '' товара на '' товаров на ');
    
$numberLast=intval(substr(strval($quantity),-1,1));
    
$numberPreLast=intval(substr(strval($quantity),-2,2));

    if((

$numberLast==1) and ($numberPreLast!=11)){
      
$type=0;
    }elseif((
2<=$numberLast) and ($numberLast<=4)){
      
$type=1;
    }elseif((
$numberLast==0) or ((5<=$numberLast) and ($numberLast<=9)) or((11<=$numberPreLast) and ($numberPreLast<=19))){
      
$type=2;
    }

    print 

$quantity  $prods[$type] . $summ ;
  }
  else {
    print 
"Ваша корзина пуста";
  }
}
?>
Аватар пользователя RedElephant
RedElephant 3 года назад
TurboPixel написал:
Немного допилил, чтобы воссияла сила русского языка.
<?phpfunction simple_commerce_cart() {
  global 
$user;

  

$order commerce_cart_order_load($user->uid);
  if(!empty(
$order)) {
    
$wrapper entity_metadata_wrapper('commerce_order'$order);
    
$line_items $wrapper->commerce_line_items;
    
$total commerce_line_items_total($line_items);
    
$currency commerce_currency_load($total['currency_code']);
    
$quantity commerce_line_items_quantity($line_itemscommerce_product_line_item_types());
    
$summ commerce_currency_format($total['amount'], $total['currency_code']);

    static 

$prods=array(' товар на '' товара на '' товаров на ');
    
$numberLast=intval(substr(strval($quantity),-1,1));
    
$numberPreLast=intval(substr(strval($quantity),-2,2));

    if((

$numberLast==1) and ($numberPreLast!=11)){
      
$type=0;
    }elseif((
2<=$numberLast) and ($numberLast<=4)){
      
$type=1;
    }elseif((
$numberLast==0) or ((5<=$numberLast) and ($numberLast<=9)) or((11<=$numberPreLast) and ($numberPreLast<=19))){
      
$type=2;
    }

    print 

$quantity  $prods[$type] . $summ ;
  }
  else {
    print 
"Ваша корзина пуста";
  }
}
?>

Добрый день. Воспользовались вашим решением по корзине. Спасибо.
Уточните, а нельзя ли переписать данный сниппет так, чтобы корзина обновлялась ajax сразу после добавления новых товаров?

Аватар пользователя cosmos
cosmos 4 года назад

Услуги по темизации и настройке commerce корзины, cart и checkout страниц
мгновенный пересчет и удаление товаров.