Показать сообщение отдельно
  #6 (permalink)  
Старый 17.10.2017, 10:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сначала по самой корзине. Вот что у вас происходит - total_sum($goods), и это постоянно ибо требуется всегда. А выгоднее не дергать БД постоянно, помещая в корзину минимум нужной информации о товаре. Для этого достаточно иметь структуру товаров в корзине как показано и получение всего товаров в корзине, и их сумма, это просто описать готовыми функциями:

$cart = [
    345 => [
        'count' => 4,
        'price'  => 150,
        'props' => ['name' => 'Печеньки', 'brand' => 'ООО Тесто']
    ],
    224 => [
        'count' => 3,
        'price'  => 250,
        'props' => ['name' => 'Семечки', 'brand' => 'АО Щелкай!']
    ]
];

//количество товаров в корзине
$count = array_sum(array_map('current', $cart));
//или с версии 5.5.0 можно так
$count = array_sum(array_column($cart, 'count'));

//сумма набранного
$total = array_sum(array_map('array_product', $cart));


Писать для этого такие функции как total_sum() и total_quantity() стоит ли?

Названия товаров и прочие параметры хранятся в массиве, значение которого функция array_product, при расчете суммы, возвращает равное 1, а значит не влияет на расчет.

При добавлении товаров в корзину из базы получается цена, название товара, и прочее необходимое. Корзина имеет два представления, но обслуживается одними и теми же данными, а значит для полного представления ее выгоднее иметь информацию уже в ней. То есть обращения к БД сводятся только к одноразовым запросам при добавлении нового товара в корзину.

Если товар добавляется только по одному, непонятен вообще второй аргумент функции addtocart(). И это связано с клиентской реализацией - как HTML структурой, так и функционалом. Обычно в таком случае, это кнопка "Добавить в корзину", серверу отправляется ID выбранного товара, он либо добавляется, либо икремент ранее добавленного. На клиенте при этом у товара будет информация типа "В корзине N штук".

Каким образом у вас клиентская часть организована (покажите результирующий html-код, а не шаблон на сервере с РНР вставками)?

Последний раз редактировалось laimas, 17.10.2017 в 10:35.
Ответить с цитированием