Tôi đang làm việc trên một trang thanh toán và tôi đang cố gắng cập nhật khung đánh giá giỏ hàng với giá vận chuyển trong khi người dùng chọn tùy chọn giao hàng .
Tôi đã đính kèm thông tin #ajax vào các tùy chọn giao hàng, để cập nhật biểu mẫu đánh giá giỏ hàng khi tùy chọn giao hàng được lưu.
Sửa đổi vận chuyển thương mại gọi lại ajax khi thanh toán
if($form_id == 'commerce_checkout_form_checkout') {
$form['commerce_shipping']['shipping_service']['#ajax']['callback'] = 'mshop_shipping_pane_service_details_refresh';
}
Gọi lại Ajax
function mshop_shipping_pane_service_details_refresh($form, $form_state) {
// Update shipping form
$commands[] = ajax_command_replace('#' . $form['commerce_shipping']['service_details']['#id'], render($form['commerce_shipping']['service_details']));
// Update checkout cart review
list($view_id, $display_id) = explode('|', variable_get('commerce_cart_contents_pane_view', 'commerce_cart_summary|default'));
$commands[] = ajax_command_replace('.view-mshop-cart-shopping-cart-summary', commerce_embed_view($view_id, $display_id, array(arg(1))));
return array('#type' => 'ajax', '#commands' => $commands);
}
Vấn đề: AJAX đang hoạt động, chế độ xem đánh giá giỏ hàng được cập nhật, nhưng tùy chọn giao hàng không được áp dụng.
Tôi đoán là, vì hình thức chỉ được cập nhật và không được gửi, đơn đặt hàng không được lưu. Vì vậy, vì chế độ xem của giỏ hàng dựa trên đơn đặt hàng và tùy chọn giao hàng chưa được lưu theo thứ tự, nó không hiển thị đúng thông tin giao hàng trong đánh giá giỏ hàng.
Bất kỳ cách giải quyết?
BIÊN TẬP:
Nhờ bình luận của milkovsky tôi đã có thể lưu đơn hàng với mức giá vận chuyển áp dụng cho đơn hàng. Sau đó, giao diện xem xét giỏ hàng hiển thị chính xác với tốc độ giỏ hàng được áp dụng.
/**
* Ajax callback: Returns the shipping details form elements that match the
* currently selected shipping service.
*/
function mshop_shipping_pane_service_details_refresh($form, &$form_state, $checkout_pane, $order) {
// Get order from form
list($order, $checkout_pane) = $form_state['build_info']['args'];
// Load up to date order
$order = commerce_order_load($order->order_id);
// Get selected
$service_name = $form['commerce_shipping']['shipping_service']['#default_value'];
commerce_shipping_service_rate_order($service_name, $order);
// Delete any existing shipping line items from the order.
commerce_shipping_delete_shipping_line_items($order, TRUE);
// Extract the unit price from the calculated rate.
$rate_line_item = $order->shipping_rates[$service_name];
$rate_line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $rate_line_item);
$unit_price = $rate_line_item_wrapper->commerce_unit_price->value();
// Create a new shipping line item with the calculated rate from the form.
$line_item = commerce_shipping_line_item_new($service_name, $unit_price, $order->order_id, $rate_line_item->data, $rate_line_item->type);
// Save and add the line item to the order.
$new_line_item = commerce_shipping_add_shipping_line_item($line_item, $order, TRUE);
commerce_order_save($order);
// Update shipping form
$commands[] = ajax_command_replace('#' . $form['commerce_shipping']['service_details']['#id'], render($form['commerce_shipping']['service_details']));
// Update checkout cart review
list($view_id, $display_id) = explode('|', variable_get('commerce_cart_contents_pane_view', 'commerce_cart_summary|default'));
$commands[] = ajax_command_replace('.view-mshop-cart-shopping-cart-summary', commerce_embed_view($view_id, $display_id, array($order->order_id)));
$commands[] = ajax_command_after('.main form', theme('status_messages'));
// $commands[] = ajax_command_after('.'.$form['#attributes']['class'][1].':eq(0)',theme('status_messages'));
return array('#type' => 'ajax', '#commands' => $commands);
}
if($form_id == 'commerce_checkout_form_checkout') { $form['commerce_shipping']['shipping_service']['#ajax']['callback'] = 'mshop_shipping_pane_service_details_refresh'; }
triển khai hook_form_alter
hoặc một số móc thương mại đặc biệt?
$form['commerce_shipping']['shipping_service']['#ajax']['callback'] = ...