Столкнулся с сложностью смены пункта выдачи в таблице order_data
Подключился к хуку pre_place_order и создал файл order_managment.pre.php для подключение к сохранению в режиме редактирования заказа, на данный момент есть следующее:
if (!empty($_REQUEST['selected_point'])) {
$selected_point = $_REQUEST['selected_point'];
// Получение старых данных о доставке
$old_ship_data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND TYPE = ?s", $order_id, 'L');
$old_ship_data = unserialize($old_ship_data);
// Обновление данных о ПВЗ
$updated = false;
foreach ($old_ship_data as &$shipping) {
if ($shipping['module'] == 'test') {
$shipping['point_id'] = $selected_point;
$updated = true;
break;
}
}
if ($updated) {
// Сериализация и сохранение данных обратно в базу данных
$new_ship_data = serialize($old_ship_data);
$result = db_query("UPDATE ?:order_data SET DATA = ?s WHERE order_id = ?i AND TYPE = ?s", $new_ship_data, $order_id, 'L');
// Уведомление об успешном обновлении
fn_set_notification('N', __('notice'), __('ПВЗ успешно сохранен в post'));
} else {
fn_set_notification('W', __('warning'), __('Не удалось обновить ПВЗ'));
}
}
Поле selected_point есть на странице редактирования заказа и при его заполнении также проверил что данные не пустые, нужно поменять лишь одну цифру в таблице все остальные данные остаются без изменений. Уведомление об успешно обновлении появляется, но данные не обновляются.
Думаю вы неправильный мод контроллера выбрали, как я помню place_order нужен при создании заказа. А для обноления способа доставки $mode == ‘update_shipping’ или нужно смотреть в моде update. Вроде была функция отвечающая за обновления способа пункта самовывоза. Рекомендую использовать уже существующие запросы в БД.
Менять пункт хочу в админке в режиме редактировании заказа order_management.update, кнопка сохранить использует dispatch[order_management.place_order.save]
Или нужно подключиться дополнительно к другому хуку?
такого нет, пункты выбираются с карты после чего происходит запись номера выбранного пункта в поле selected_point и затем этот номер хотел обновить в таблице
Вы используете модуль “Магазины и пункты самовывоза” ? Если у вас кастомный модуль для самовывозов то придется либо отдельный контроллер сделать или можете примерно так сделать:
if (!defined('BOOTSTRAP')) { die('Access denied'); }
if ($mode == 'update' && !isset($_REQUEST['is_ajax'])) {
$_cart = Tygh::$app['session']['cart'];
if (!empty($_cart['order_id'])) {
$old_ship_data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $_cart['order_id'], 'L');
if (!empty($old_ship_data)) {
$old_ship_data = unserialize($old_ship_data);
foreach($old_ship_data as $group_key => $shipping) {
if (!empty($shipping['module']) && $shipping['module'] == 'store_locator' && !empty($shipping['store_location_id'])) {
Tygh::$app['session']['cart']['select_store'][$shipping['group_key']][$shipping['shipping_id']] = $shipping['store_location_id'];
Tygh::$app['view']->assign('old_ship_data', $old_ship_data);
}
}
}
}
}
if ($mode == "update_shipping") {
if (!empty($_REQUEST['shipping_ids'])) {
foreach($_REQUEST['shipping_ids'] as $group_key => $shiping_id) {
if (!empty($_REQUEST['select_store'][$group_key][$shiping_id])) {
Tygh::$app['session']['cart']['select_store'][$group_key][$shiping_id] = $_REQUEST['select_store'][$group_key][$shiping_id];
}
}
}
}