[Решено] Формирование цены товара и настройка запасов в Ubercart

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

Аватар пользователя wiw wiw 29 ноября 2009 в 21:06

Приветствую!
Имеется несколько проблем при разработке магазина, в решении которых я прошу у вас помощи.

  1. Скидки или Discounts
    Идет разработка оптового магазина, в котором цена формируется наценкой на предыдущую цену. То есть имеется закупочная цена 100р, цена для продажи при сумме заказа более 35000 = 120р (то есть +20%), цена продажи при сумме заказа более 5000 = 156р (то есть +30%), цена продажи при сумме заказа менее 5000 = 184р (то есть +18%).
    Поскольку модули Скидок "работают" только в обратном направлении, то подскажите модули наценок, то есть возможность задавать изменение цены в зависимости от суммы заказа и закупочной цены.
  2. Запасы или Stock
    Так как магазин оптовый, то совершенно необходимы две вещи:
    • Возможность отобразить количество товара на складе
    • Запрет покупки товара более количества имеющегося на складе

    За первый пункт отвечает функция uc_stock_level, но непонятно как вывести $sku товара автоматически?
    По поводу второго пункта не нашел информации - есть ли модуль реализующий эту возможность?

Комментарии

Аватар пользователя wiw wiw 3 декабря 2009 в 9:30

Чтобы в минус не покупали это out of stock

Сейчас сам нашел тему где обсуждается вывод количества товара на страницу.

Мне там понравился следующий код

<?php 
if ($node->type == 'product') {
  
$arr_sku uc_stock_skus($node->nid);
  
$stock_html .='<table>';
  foreach(
$arr_sku as $sku){
    
$stocklevel uc_stock_level($sku);
    if (
$stocklevel) {
      if (
$stocklevel 1) {
        
$stocklevel '<span class="nostock">'.$stocklevel.'</span>';
      }
      
$stock_html .='<tr><td>'.$sku.'</td><td>:&nbsp;&nbsp;'.$stocklevel.'</td></tr>';
    }
  }
  
$stock_html .='</table>';
}
?>

Все хорошо но вот только это под пятый дрюпал и первый уберкарт, поэтому функция uc_stock_skus не определена.
В ubercart1 эта функция выглядит так:

<?php
  
function uc_stock_skus($nid) {
  
$node node_load($nid);

  if (

is_null($node->model)) {
    return 
FALSE;
  }

  

$skus = array($node->model);

  if (

module_exists('uc_attribute')) {
    
$models db_query("SELECT model FROM {uc_product_stock} WHERE nid = %d"$node->nid);
    while (
$model db_fetch_object($models)) {
      if (!
in_array($model->model$skus)) {
        
$skus[] = $model->model;
      }
    }
  }

  return 

$skus;
}
?>

Вопрос? как её переделать под 6 дрюпал и второй уберкарт

Аватар пользователя kirya kirya 3 декабря 2009 в 15:44

Ну вывод количества это не вариант. Не всегда покупателям нужно давать знать сколько товара у тебя есть на складе, а вот чтобы было написано "отсутствует на складе" или просто не давали бы оформить заказ если остаток - нулевое количество- было бы не плохо.
И потом, есть такие уникумы, которые даже видя, что на складе -3 штуки, все равно оформят заказ еще на десяток. Либо из тупости либо из вредности. Вот именно этот вариант и надо бы пресечь.

Аватар пользователя wiw wiw 5 декабря 2009 в 20:34

То что вы говорите - это хорошо. Но мне нужно решение именно моей конкретной задачи. То есть количество товара на складе в данный момент.

Аватар пользователя wiw wiw 14 декабря 2009 в 12:00

Поскольку никто так и не намекнул как вывести уровень товаров, то я сам нашел решение. Вот php код выводящий настраиваемые дивы с номером моделей и уровнем товаров на страницу. Переделано под дрюпал и второй уберкарт.
Код вставлялся в шаблон contemplate для соответствующего типа ноды.

<?php<div class="stocklevel_model">

<?php 
function uc_stock_skus($nid) {
$node node_load($nid);
if (
is_null($node->model)) {
return 
FALSE;
}
$skus = array($node->model);
$models db_query("SELECT model FROM {uc_products} WHERE nid = %d"$node->nid);
while (
$model db_fetch_object($models)) {
if (
in_array($model->model$skus)) {
$skus[] = $model->model;
}
}
return 
$skus;
}
?>
<?php 
if ($node->type == 'product') {
  
$arr_sku uc_stock_skus($node->nid);
  
$stock_html .='<div class="main_stock">';
  foreach(
$arr_sku as $sku){
    
$stocklevel uc_stock_level($sku);
    if (
$stocklevel) {
      if (
$stocklevel 1) {
        
$stocklevel '<div class="nostock">'.$stocklevel.'</div>';
      }
      
$stock_html .='<div class="stocklevel">
<div class="sku">Модель №:&nbsp;&nbsp;'
.$sku.'</div>
<div class="level">&nbsp;&nbsp;Количество на складе:&nbsp;&nbsp;'
.$stocklevel.'</div></div>';
    }
  }
  
$stock_html .='</div>';
  print 
$stock_html;
}
?></div>
?>

Аватар пользователя kuzmich111 kuzmich111 13 октября 2011 в 20:12

Я показываю количество товара на складе так:
в node-product.tpl
<?php print uc_stock_level($node->model); ?>
Атрибуты не использую, вроде нормально работает.