Правка shopFrontendCartAdd.controller.php
Подскажите, нужно добавить переменные в таблицу БД shop_cart_items при добавлении товара в корзину, к примеру переменная test, поле таблицы в БД тоже test. Есть исходный код файла shopFrontendCartAdd.controller.php:
if (!$item_id) { $data = array( 'create_datetime' => date('Y-m-d H:i:s'), 'product_id' => $product['id'], 'sku_id' => $sku['id'], 'quantity' => $quantity, 'type' => 'product' ); if ($services) { $data_services = array(); foreach ($services as $service_id => $variant_id) { $data_services[] = array( 'service_id' => $service_id, 'service_variant_id' => $variant_id, ); } } else { $data_services = array(); } $item_id = $this->cart->addItem($data, $data_services);
Если я правильно понимаю, то за запись переменных в базу отвечает последняя строчка, правлю код на такой:
if (!$item_id) { $data = array( 'create_datetime' => date('Y-m-d H:i:s'), 'product_id' => $product['id'], 'sku_id' => $sku['id'], 'quantity' => $quantity, 'type' => 'product' ); if ($services) { $data_services = array(); foreach ($services as $service_id => $variant_id) { $data_services[] = array( 'service_id' => $service_id, 'service_variant_id' => $variant_id, ); } } else { $data_services = array(); } $test = array( 'test' => '123' ); $item_id = $this->cart->addItem($data, $data_services, $test);
но в поле test в БД ничего не записывается, подскажите что делаю не так, если можно для чайника
24 ответа
public function addItem($item, $services = array()) ничего не знает про ваши новые параметры поэтому ничего не добавит
Спасибо за быстрый ответ, но если можно для чайника чуть подробнее
Записывает в базу метод addItem из shopCart.class.php, поэтому вместо 3-го параметра вам видимо необходимо расширить массив $data.
Пробовал делать вот так
все равно не помогает
ну подскажите где покапаться?
посмотрите метод waLog::log() и расставьте нужное логирование для проверки данных.
подскажите подробнее пожалуйста, я с методом waLog::log() совсем не знаком
Например
waLog::log(var_export($data, true));
запишет содержимое переменной $data в wa-log/error.log
можете расставить примерные конструкции по файлу и узнать где и когда что передаётся.
Хотя вы наверно что-то странное пытаетесь реализовать и стоит использовать https://developers.webasyst.ru/hooks/shop/cart_add...
Хотел обойтись без плагина
лог файл
значение передается, но в БД не попадает
дело в том, что переменная test везде присутствует и передается правильно, она просто не хочет записываться в базу данных, если вместо test подставить уже существующее в БД поле, например quantity, то это поле запишется и обновится и т.п.. А вот любое новое поле не записывается никак. Пробовал по разному,
делал это в файле shopCart.class.php
попробовал этот код добавить после $this->clearSessionData();
Всё работает и добавляется, Можете через инсталлер кэш очистить
Проверьте всё же вывод команды show CREATE TABLE `shop_cart_items` в pma. должно быть что-то типа:
Очистка кеша не помогает, а вывод команды в pma выдает это:
Также написано, что данная таблица не содержит уникального столбца. Это что может значить?
Полный код
И вот такое сообщение:
Данная таблица не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление не доступно.
Возможно что-то в базе мешает записывать значения?
Попробовал обычным php обновить, все получается, а средствами шоп скрипт не получается
Получилось вот таким образом:
Наверно не совсем корректно, но зато работает
Немного не в тему, но почему waLog::log(var_export($data, true)); а не просто waLog::dump($data); ?
Насколько я помню, при первом варианте в логах очень неудобочитаемо получается =)
ну вполне норм получается:
неужели у шоп скрип это такая большая проблема - записать данные в БД?
А такой своевременный вопрос. В таблице shop_cart_items вы создали столбец `test` ?
ну конечно, а где бы я проверял его содержимое)))
а есть возможность через ЛОГ файл посмотреть какие данные отправляются в БД, и какой ответ возвращает БД. Как это правильно записать через waLog::log?
Скопируйте метод insert из wa-system/database/waModel.class.php в wa-apps/shop/lib/model/shopCartItems.model.php
В новом методе воткните логирование получившегося sql запроса и потом попробуйте его напрямую в мускуле исполнить. Смотрите результат.
Можно конечно и системный класс логирование воткнуть временно.
А вообще освойте xdebug - спасает кучу времени на дебаге.
Благодарю за помощь и советы!