Приветствую!
Имеется несколько проблем при разработке магазина, в решении которых я прошу у вас помощи.
- Скидки или Discounts
Идет разработка оптового магазина, в котором цена формируется наценкой на предыдущую цену. То есть имеется закупочная цена 100р, цена для продажи при сумме заказа более 35000 = 120р (то есть +20%), цена продажи при сумме заказа более 5000 = 156р (то есть +30%), цена продажи при сумме заказа менее 5000 = 184р (то есть +18%).
Поскольку модули Скидок "работают" только в обратном направлении, то подскажите модули наценок, то есть возможность задавать изменение цены в зависимости от суммы заказа и закупочной цены. - Запасы или Stock
Так как магазин оптовый, то совершенно необходимы две вещи:- Возможность отобразить количество товара на складе
- Запрет покупки товара более количества имеющегося на складе
За первый пункт отвечает функция uc_stock_level, но непонятно как вывести $sku товара автоматически?
По поводу второго пункта не нашел информации - есть ли модуль реализующий эту возможность?
Комментарии
Вот и меня тоже интересует функция, чтобы в минус не покупали..
Чтобы в минус не покупали это 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>: '.$stocklevel.'</td></tr>';
}
}
$stock_html .='</table>';
}
?>
Все хорошо но вот только это под пятый дрюпал и первый уберкарт, поэтому функция uc_stock_skus не определена.
В ubercart1 эта функция выглядит так:
<?php
$skus = array($node->model);
function uc_stock_skus($nid) {
$node = node_load($nid);
if (
is_null($node->model)) {return FALSE;
}
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 дрюпал и второй уберкарт
Ну вывод количества это не вариант. Не всегда покупателям нужно давать знать сколько товара у тебя есть на складе, а вот чтобы было написано "отсутствует на складе" или просто не давали бы оформить заказ если остаток - нулевое количество- было бы не плохо.
И потом, есть такие уникумы, которые даже видя, что на складе -3 штуки, все равно оформят заказ еще на десяток. Либо из тупости либо из вредности. Вот именно этот вариант и надо бы пресечь.
То что вы говорите - это хорошо. Но мне нужно решение именно моей конкретной задачи. То есть количество товара на складе в данный момент.
Поскольку никто так и не намекнул как вывести уровень товаров, то я сам нашел решение. Вот 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">Модель №: '.$sku.'</div>
<div class="level"> Количество на складе: '.$stocklevel.'</div></div>';
}
}
$stock_html .='</div>';
print $stock_html;
}
?></div>
?>
Тоже интересно.
Я показываю количество товара на складе так:
в node-product.tpl
<?php print uc_stock_level($node->model); ?>
Атрибуты не использую, вроде нормально работает.