Вес товара - дополнительное поле

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #1 makki » 22.08.2016, 09:07

Для расчета стоимости доставки транспортными службами потребуется значение веса отправления. Данная доработка добавляет дополнительное поле Вес в карточку товара для каждого варианта товара.
Вывод значения веса варианта товара в шаблоне карточки товара {$product->variant->weight}
Вес всех товаров в корзине {$cart->total_weight}

1) Выполнить запрос к базе:

Код: Выделить всё

ALTER TABLE `s_variants` ADD `weight` DECIMAL(6,3) NULL DEFAULT '0.000' AFTER `stock`;


2) api/Variants.php в функции get_variants() и get_variant() в запрос

Код: Выделить всё

$query = $this->db->placehold("SELECT ...

добавить

Код: Выделить всё

v.weight,

после

Код: Выделить всё

(v.stock IS NULL) as infinity,


3) backend/design/html/product.tpl
3.1) после

Код: Выделить всё

<li class="variant_amount">Кол-во</li>

добавить

Код: Выделить всё

<li class="variant_weight">Вес</li>

3.2) и ниже после

Код: Выделить всё

<li class="variant_amount">
    <input name="variants[stock][]" type="text" value="{if $variant->infinity || $variant->stock == ''}∞{else}{$variant->stock|escape}{/if}"/>{$settings->units}
</li>

добавить

Код: Выделить всё

<li class="variant_weight">
   <input name="variants[weight][]" type="text" value="{$variant->weight|escape}"/>кг
</li>

3.3) в <ul id=new_variant style='display:none;'>
после

Код: Выделить всё

<li class="variant_amount">
    <input name="variants[stock][]" type="" value="∞"/>{$settings->units}
</li>

добавить

Код: Выделить всё

<li class="variant_weight">
   <input name="variants[weight][]" type="text" value="{$variant->weight|escape}"/>кг
</li>

4) backend/design/css/style.css
4.1)Добавить новые стили:

Код: Выделить всё

#variants_block li.variant_currency { width: 80px; }
#variants_block li.variant_currency select { width: 70px; }
#variants_block li.variant_weight { width: 80px; font-size: 11px; padding-left: 10px;}
#variants_block li.variant_weight input { width: 50px; margin-right: 2px;}

4.2) Подправить стили:
4.2.1) Вместо

Код: Выделить всё

#variants_block ul#header li {
    font-size: 13px;
    padding-left: 3px;
    margin-left: -2px;
}

оставляем только следующее:

Код: Выделить всё

#variants_block ul#header li {
    font-size: 13px;
}

4.2.2) Вместо

Код: Выделить всё

#variants_block li.variant_price { width: 120px; }

оставляем

Код: Выделить всё

#variants_block li.variant_price { width: 95px; }

4.2.3) Вместо

Код: Выделить всё

#variants_block li.variant_price input {
    width: 95px;
    font-weight: bold;
    color: #000;
}

оставляем

Код: Выделить всё

#variants_block li.variant_price input {
    width: 70px;
    font-weight: bold;
    color: #000;
}


5) api/Cart.php
5.1) в функциию get_cart()
после

Код: Выделить всё

$cart->total_price = 0;

добавить

Код: Выделить всё

$cart->total_weight = 0;

5.2 после строки

Код: Выделить всё

$cart->total_price += $item->variant->price*$item->amount;

добавить

Код: Выделить всё

$cart->total_weight += $item->variant->weight*$item->amount;


Вложения
weight.jpg
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #2 korshunov » 22.08.2016, 15:32

1. Новое поле, видимо, надо обрабатывать экспортом-импортом.
2. Полный вес заказа, видимо, надо показывать на странице корзины, заказа, в письмах о заказе.
3. Будет ли пересчитываться общий вес и все с ним связанное при изменении заказа в админке?

pikasso M
pikasso M
Возраст: 45
Репутация: 10
Сообщения: 128
Зарегистрирован: 31.01.2016
С нами: 8 лет 1 месяц

Сообщение #3 pikasso » 01.03.2017, 17:13

Как я понимаю этот принцип можно использовать и для создания поля Единицы:?
мне нужно выводить поле - шт. метр. мешок. рулон, лист

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #4 makki » 01.03.2017, 17:18

pikasso писал(а):Как я понимаю этот принцип можно использовать и для создания поля Единицы:?
мне нужно выводить поле - шт. метр. мешок. рулон, лист
Можно, но нет смысла добавлять такое поле в таблицу товара. В вашем случае логичнее задать его через Свойства товара.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

pikasso M
pikasso M
Возраст: 45
Репутация: 10
Сообщения: 128
Зарегистрирован: 31.01.2016
С нами: 8 лет 1 месяц

Сообщение #5 pikasso » 01.03.2017, 18:41

Возможно нет смысла...но через свойства параметры человек увидит указание о Единице измерения- только в Характеристиках
а мне например привычней увидеть было бы единицу измерения возле цены .
например
Провод ПВХ 30Х1.5 - 330 руб - метр.погонный или (за 1 метр.пг)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #6 korshunov » 02.03.2017, 05:08

makki писал(а):Можно, но нет смысла добавлять такое поле в таблицу товара. В вашем случае логичнее задать его через Свойства товара.

"Нет смысла" - это смотря в каком смысле.

Если имеете в виду, что есть готовый функционал свойств и не надо ничего программировать дополнительно, а лишь в админке добавить свойство, то, конечно, так проще ДОБАВИТЬ эту характеристику.

А вот ИСПОЛЬЗОВАТЬ ее в шаблоне будет уже затруднительно. Во-первых, она передается лишь в шаблон карточки товара. Для передачи в прочие надо дорабатывать PHP-скрипты. Во-вторых, даже в том шаблоне, куда передается, вытащить единичное свойство простым способом не выйдет - надо либо гонять цикл в шаблоне (что весьма некрасиво), либо опять же переделывать что-то в PHP.

Куда проще и экономнее вставить новое поле именно в таблицу товаров...

Gleb1972
Gleb1972
Репутация: 3
Сообщения: 33
Зарегистрирован: 02.02.2017
С нами: 7 лет 1 месяц

Сообщение #7 Gleb1972 » 02.03.2017, 19:04

pikasso, не подскажите как потом "Вес" вывести в отображении товара после цены?

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #8 makki » 02.03.2017, 19:47

Gleb1972 писал(а):pikasso, не подскажите как потом "Вес" вывести в отображении товара после цены?

Код: Выделить всё

{$product->variant->weight}
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Gleb1972
Gleb1972
Репутация: 3
Сообщения: 33
Зарегистрирован: 02.02.2017
С нами: 7 лет 1 месяц

Сообщение #9 Gleb1972 » 02.03.2017, 19:52

makki писал(а):
Gleb1972 писал(а):pikasso, не подскажите как потом "Вес" вывести в отображении товара после цены?

Код: Выделить всё

{$product->variant->weight}

Это в product.tpl добавить?

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #10 makki » 02.03.2017, 19:56

Gleb1972 писал(а):Это в product.tpl добавить?
Если надо на странице товара, тогда в product.tpl
Если в превью товара, тогда tiny_products.tpl
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Gleb1972
Gleb1972
Репутация: 3
Сообщения: 33
Зарегистрирован: 02.02.2017
С нами: 7 лет 1 месяц

Сообщение #11 Gleb1972 » 02.03.2017, 20:04

makki писал(а):
Gleb1972 писал(а):Это в product.tpl добавить?
Если надо на странице товара, тогда в product.tpl
Если в превью товара, тогда tiny_products.tpl

Как всегда огромное СПАСИБО!!!!
И еще один вопрос, как задать условие если вес не указан или "0" не выводить.

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #12 makki » 02.03.2017, 20:09

Gleb1972 писал(а):И еще один вопрос, как задать условие если вес не указан или "0" не выводить.
Например так

Код: Выделить всё

{if $product->variant->weight>0}{$product->variant->weight} кг{/if}
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

Gleb1972
Gleb1972
Репутация: 3
Сообщения: 33
Зарегистрирован: 02.02.2017
С нами: 7 лет 1 месяц

Сообщение #13 Gleb1972 » 02.03.2017, 20:17

makki писал(а):
Gleb1972 писал(а):И еще один вопрос, как задать условие если вес не указан или "0" не выводить.
Например так

Код: Выделить всё

{if $product->variant->weight>0}{$product->variant->weight} кг{/if}

СПАСИБО!!!!!!!!!!!!!!!!

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #14 makki » 19.04.2017, 10:12

Дополнение к инструкции в шапке, которое добавляет обработку импортом/экспортом поля Вес товара.

6) файл backend/ajax/export.php
6.1) class ExportAjax extends Okay
после

Код: Выделить всё

'price'=>            'Цена',

добавить

Код: Выделить всё

'weight'=>           'Вес (кг)',

6.2) public function fetch()
после

Код: Выделить всё

$v['price']           = $variant->price;

добавить

Код: Выделить всё

$v['weight']          = $variant->weight;


7) файл backend/ajax/import.php
7.1) class ImportAjax extends Okay
после

Код: Выделить всё

'price'=>            array('price', 'цена'),

добавить

Код: Выделить всё

'weight'=>           array('weight', 'Вес (кг)', 'Вес'),

7.2) private function import_item
после

Код: Выделить всё

        if(isset($item['price'])) {
            $variant['price'] = str_replace(',', '.', str_replace(' ', '', trim($item['price'])));
        }

добавить

Код: Выделить всё

        if(isset($item['weight'])) {
            $variant['weight'] = str_replace(',', '.', str_replace(' ', '', trim($item['weight'])));
        }

8) файл backend/files/import/example.csv
после

Код: Выделить всё

Категория;Товар;Цена;

добавить
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Полезные решения для OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 6 гостей