Перейти к содержимому


Фото
- - - - -

Компоновки (оплата)


  • Чтобы отвечать, сперва войдите на форум
52 ответов в теме

#1 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 10.08.2012 - 09:52

Тему пришлось переименовать, теперь она про компоновки товаров.
Для того, чтобы я окончательно остановил свой выбор на движке, мне не хватает Компоновок товаров.
Давайте разберём что это такое. Некоторые проводят параллель между компоновками и комплектами. Но для меня разница есть и разница существенная. Да, я могу потратиться на комплекты (модуль уже разработан), но это будет лишь временным костылём.
Мне же нужно вот что:

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

Вы зададите резонный вопрос о смысле компоновок. Смысл лишь в представлении товаров.

Покупали ли вы когда-нибудь контактные линзы? Никогда не видели 6 пар линз и раствор в подарок? В данном случае компоновка называется "6 пар линз + раствор". И продаётся этот товар только с 15 по 30 августа. Если человек добавляет в корзину ещё 1 пару линз и 2 банки раствора, то в корзине отображается 3 товара: "6 пар линз + раствор" - 1 шт, "линзы" - 1 шт, "раствор для линз" - 2 шт.

А иногда бывает так, что посетителю просто удобно заказать товар "Электронная сигарета + 2 картриджа стоят", он зашёл в магазин, нажал кнопку "купить", ввёл свои данные и всё. Ему не предоставляется никакая скидка, однако же ему удобно купить все товары одним щелчком, а не лезть в другие разделы. Это выгодно и мне, как предпринимателю: я продал именно 2 картриджа, а не 1.

Теперь о реализации такой задумки:
всё это делается используя связанные товары. Просто в шаблоне переименовываем соответствующий блок в "в эту компоновку входят:" и человек сразу видит, что входит в компоновку и в каком количестве. Может пройти по ссылке, почитать описание товаров из компоновки и вернуться обратно, ДОБАВИВ КОМПОНОВКУ В КОРЗИНУ.

Но реализация осложняется тем, что в админке cms simpla нельзя указать количество связанных товаров (в моём случае количество товаров из компоновки). Кто сделает это, того готов отблагодарить.
Суть простая: либо добавляем в таблицу related_products поле q, которое будел означать количество, либо же используем для данных целей поле position.

Когда задача будет реализована, появится вторая: автоматом пересчитывать сумму компоновки. А что касается скидок, то тут всё на усмотрение руководства.



#2 Wizard

Wizard
  • Фрилансер
  • 692 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 10.08.2012 - 14:32

*** Novecheg: "куда пропал Laster?"

А был ли он))) Или это очередная пиар компания одного из здешних, а может не местных программистов)))



#3 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 10.08.2012 - 14:39

Не знаю.
Визард, может подскажешь, можно ли сделать такое изменение, чтобы не только на сайте, но и в админке показывалась цена каждого связанного товара?



#4 Aijai

Aijai
  • Пользователь
  • 113 сообщений

Опубликовано 10.08.2012 - 14:40

А меня темки о нем очень даже устраивают )). Давайте продолжайте, может еще чего почерпну )).



#5 Wizard

Wizard
  • Фрилансер
  • 692 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 10.08.2012 - 14:42

но и в админке показывалась цена каждого связанного товара

можно

если я правильно понял и вам надо такой вывод:


то делается он по аналогии с клиентской частью



#6 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 10.08.2012 - 15:04

да, именно такой вывод.
как в шаблон передать переменную с ценой?



#7 Wizard

Wizard
  • Фрилансер
  • 692 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 10.08.2012 - 15:13

[code]if(!empty($related_products))
{
foreach($related_products as &$r_p)
$r_products[$r_p->related_id] = &$r_p;

$temp_products = $this->products->get_products(array('id'=>array_keys($r_products)));
foreach($temp_products as $temp_product)
$r_products[$temp_product->id] = $temp_product;

$related_products_images = $this->products->get_images(array('product_id'=>array_keys($r_products)));
foreach($related_products_images as $image)
{
$r_products[$image->product_id]->images[] = $image;
}

$related_products_variants = $this->variants->get_variants(array('product_id'=>array_keys($r_products)));
foreach($related_products_variants as $r_variant)
{
$r_products[$r_variant->product_id]->variants[] = $r_variant;
}
}
[/code]

<div class="name cell">
<a href="{url id=$related_product->id}">{$related_product->name}</a>
              {if $related_product->variants}
              <br />
                 {foreach $related_product->variants as $v}
                 -&nbsp; {if $v->name}{$v->name} -{/if} {$v->price}<br />
                 {/foreach}
              {/if}
</div>



#8 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 10.08.2012 - 16:46

У меня заработало.
На всякий случай уточню (вдруг кого-то заинтересует вариант, который предложил Визард):
первая правка в simpla/ProductAdmin.php
вторая правка в simpla/product.tpl

Огромное спасибо за код. Это то, о чём я писал тут долго-долго, но никто не соглашался это сделать.
Осталось лишь по аналогии добавить к каждому связанному товару ещё одно поле int и выводить (плюс редактировать) его в админке.
Понимаю, что бесплатно никто за такое не возьмётся.



#9 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 13.08.2012 - 08:31

ап



#10 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 13.08.2012 - 23:33

Поле добавить в базу данных и делать редактирование в админке. Для профи всё просто. За это и готов заплатить.



#11 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 08:50

на ваши вопросы я ответил в личку.



#12 Wizard

Wizard
  • Фрилансер
  • 692 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x

Опубликовано 14.08.2012 - 08:59

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

1. Допустим товар может участвовать в разных комплектах и цена у него может быть разной.

2. если я добавляю (каким то чудным образом) комплект и удаляю все товары с комплекта кроме одного, который меня интересует. Он остается со скидкой, далее беру штук 10 этих наименований с халявной скидкой? А если это наименование в другом комплекте с другой стоимостью - что в этом случае делать?

3. Я хочу добавить два комплекта в корзину. как это должно отображаться?

4. Я хочу добавить два разных комплекта но некоторые товары в них пересекаются. Что делаем в этом случае?

5. если в корзине есть комплект, и я хочу добавить еще одно наименование которое присутствует в комплекте - какова стоимость данного товара будет, и будет ли оно выводиться отдельно или сливаться с комплектом(это уже не комплект по сути)? Если должно сливаться то с каким именно комплектом если их более двух разных но в каждом из них присутствует данное наименование?

6. Как все это должно отображаться на стороне админа – в редакторе и в заказах?

можно еще долго продолжать...

Вы слишком недооцениваете сложность данного модуля. Нужно перелопатить половину CMS для того что бы заставить данную доработку работать адекватно с учетом разных сценариев и потребностей.



#13 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 09:07

Визард, давайте по порядку. Суть у меня простая: товар может являться комплектом, комплект един и неделим, на комплект цена может считаться как автоматом (по сумме товаров), так и редактироваться менеджером. Электронная сигарета + 2 картриджа стоят 562 рубля, а я захотел продавать этот комплект за 560 рублей - сам зашёл в товар (который комплект), сам отредактировал. А завтра я захочу продавать этот комплект за 599 рублей. И такое бывает в магазинах.
0. Если комплект в моём случае - это обычный товар (у товара есть связанные товары), значит, товар является комплектом, то в корзину он летит как 1 товар. Раскомплект невозможен.
1. Если цена может быть разной, это задача менеджера. Сегодня комплект продаётся со скидкой в 5%, а завтра мы решаем, что скидок не будет. Просто покупателю удобнее купить комплект целиком, а не набирать поэлементно. И мне удобнее продать комплект.
2. вопрос сам собой отпал.
3. так же, как отображаются в корзине 2 товара.
4. Ничего сливаться не будет:
электронная сигарета+2 картриджа: 599 рублей
2 картриджа: 99 рублей.
Итого: 698 рублей



#14 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 09:11

А если кто-то захочет сделать скидку в процентах и прочие навороты, то основа уже будет.
Корсу я отписал примерно так:

Итак, что есть у меня: связанные товары переименованы в товары из комплекта, любой товар может быть комплектом - и это именно то, что нужно. В админке выводится цена каждого товара (спасибо Визарду), осталось только в таблицу связанных товаров (кажется, related_products) добавить дополнительное числовое поле, назовём его quantity. По умолчанию - 1. При добавлении нового связанного товара (для меня он называется иначе), этому связанному товару задаётся количество: 1 (quantity = 1). Там же, где выбираются связанные товары (в админке в карточке товара), можно это число изменить (quantity = 2, например).
Теперь по поводу использования поля. Если у товара есть связанные товары (в моём случае это признак того, что перед нами не просто товар, а комплект), то цена этого товара должна складываться из сумм цен связанных товаров (соответственно, если у связанного товара quantity = 2, то нужно умножать на 2).
Это решение будет далеко не идеальным, но мне нужно именно оно.
Алгоритм я уже написал, за реализацию больших денег не обещаю. Если вам не сложно такое сделать, назовите цену.



#15 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 10:43

Пробую сделать сам:
Итак, файлов для правки всего 3.
api/Products.php
(примерно 387 строка)
$query = $this->db->placehold("SELECT product_id, related_id, position, q
FROM __related_products
WHERE
1
$product_id_filter
ORDER BY position
");
(примерно 400 строка)
// Функция возвращает связанные товары
public function add_related_product($product_id, $related_id, $position=0, $q=1)
{
$query = $this->db->placehold("INSERT IGNORE INTO __related_products SET product_id=?, related_id=?, position=?, q=?", $product_id, $related_id, $position, $q);
$this->db->query($query);
return $related_id;
}
/ProductView.php
(примерно 116 строка) что редактировать, не знаю.



#16 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 10:52

добавить поле q, разумеется.
Simpla/ProductAdmin.php
(примерно 262 строка)
$this->products->add_related_product($product->id, $related_product->related_id, $pos++, $related_product->q);

И ещё править шаблон в админке



#17 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 11:05

Simpla/design/default/html/product.tpl
В районе 645 строки вставить
<input name=q value='{$related_product->q}'>
(это вставляется в блок <div class="name cell">)



#18 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 11:27

кто разбирается, поправьте меня.



#19 Kosjak76

Kosjak76
  • Модератор
  • 3 857 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 14.08.2012 - 11:31

Я одного не понял - зачем все это? и каким образом это в Корзине будет видно?
Я так понимаю, смысл Комплектов немного другой - купи вместе с телевизором подставку - будет дешевле))) И комплектов на один товар - 3-4 шт (подставка, ДВД, БлюРей, 3Д очки) тогда смысл будет... А так - фуфло выйдет.
Алгоритм не продуман. Тут не поле надо добавлять, а как минимум таблицу...



#20 Novecheg

Novecheg
  • Пользователь
  • 257 сообщений

Опубликовано 14.08.2012 - 14:11

Kosjak76, отвечаю: мне нужно именно так (пусть фуфло). Про корзину уже писал.
Это не комплекты. Это наборы. Или компоновки. Их смысл совсем другой.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых