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

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

Аватар пользователя Niklan Niklan 29 августа 2012 в 16:48

Понадобилось сделать корзину в 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();
?>

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

Комментарии

Аватар пользователя Niklan Niklan 29 августа 2012 в 22:59

"multpix" wrote:
а как бы потянуть в это поля из связанного товара?

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

Аватар пользователя multpix multpix 29 августа 2012 в 23:18

"Niklan" wrote:

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

Аватар пользователя Niklan Niklan 29 августа 2012 в 23:28

"multpix" wrote:

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

Аватар пользователя imarat imarat 30 августа 2012 в 0:31

"Niklan" wrote:
а как бы потянуть в это поля из связанного товара?

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

Аватар пользователя multpix multpix 30 августа 2012 в 0:52

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

сделал вьюху (не мудрствуя - клон от 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 11 сентября 2012 в 3:36

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

Аватар пользователя forest_run forest_run 11 сентября 2012 в 3:50

Так вроде работает как надо (только важно не забывать про 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_items, commerce_product_line_item_types());
    $summ = commerce_currency_format($total['amount'], $total['currency_code']);

    print $quantity . ' товаров - ' . $summ;
  }
}?>

Аватар пользователя TurboPixel TurboPixel 2 ноября 2012 в 18:47

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

<?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_items, commerce_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 11 февраля 2015 в 5:34

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

<?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_items, commerce_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 7 октября 2014 в 11:10

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