Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * @file
- * Drupal Commerce Cart Ajax module.
- * Ajax features for Drupal Commerce Cart. Quick item removal and quantity changes.
- */
- /**
- * Implements hook_form_FORM_ID_alter().
- * Alter to cart form to add #ajax properties.
- */
- function pie_cart_ajax_form_views_form_alter(&$form, $form_state, $form_id) {
- $alter = strpos($form_id, 'views_form_commerce_cart_form_') === 0;
- if ($alter) {
- _pie_cart_ajax_form_views_form_alter($form, $form_state, $form_id);
- }
- }
- function _pie_cart_ajax_form_views_form_alter(&$form, $form_state, $form_id) {
- unset($form['#action']);
- $submit = $form['#submit'];
- unset($form['#submit']);
- $ajax = array (
- 'callback' => 'pie_cart_ajax_update_cart_callback',
- 'progress' => array(),
- 'effect' => 'fade',
- );
- // Update Cart Button
- $form['actions']['submit']['#ajax'] = $ajax;
- $form['actions']['submit']['#submit'][] = 'pie_cart_ajax_update_cart_submit';
- // Checkout Button
- $form['actions']['checkout']['#type'] = 'button';
- $form['actions']['checkout']['#ajax'] = array(
- 'callback' => 'pie_cart_ajax_checkout_redirect_callback',
- 'progress' => array(),
- );
- if ($form_state['submitted']) {
- if (!empty($form['edit_quantity'])) {
- foreach (element_children($form['edit_quantity']) as $j) {
- $line_item_id = $form['edit_quantity'][$j]['#line_item_id'];
- $form['edit_quantity'][$j]['#default_value'] = round($form_state['line_items'][$line_item_id]->quantity);
- }
- }
- }
- // Delete Buttons
- if (!empty($form['edit_delete'])) {
- foreach (element_children($form['edit_delete']) as $k) {
- $form['edit_delete'][$k]['#value'] = t('X');
- $form['edit_delete'][$k]['#ajax'] = $ajax;
- $form['edit_delete'][$k]['#submit'][] = 'pie_cart_ajax_update_cart_submit';
- }
- }
- dpm($form);
- return;
- }
- function pie_cart_ajax_checkout_redirect_callback() {
- ctools_include('ajax');
- ctools_add_js('ajax-responder');
- $commands[] = ctools_ajax_command_redirect('checkout');
- print ajax_render($commands);
- exit;
- }
- function pie_cart_ajax_update_cart_submit($form, &$form_state) {
- $form_state['storage'] = array(
- 'trigger' => $form_state['triggering_element'],
- 'start_quantity' => $form_state['complete form']['edit_quantity'],
- 'end_quantity' => $form_state['values']['edit_quantity'],
- 'view' => $form_state['build_info']['args']['0']->result, // OPTIONAL: only needed for callback additional process
- );
- $form_state['rebuild'] = TRUE;
- }
- function pie_cart_ajax_update_cart_callback($form, $form_state) {
- global $user;
- $cart = pie_cart_ajax_cart_reload(); //Retrieve the new cart view
- $errors = drupal_get_messages('status', TRUE); // Clear cart related messages
- $commands = array();
- //additional processing code not related to ajaxifying the cart goes here
- $commands[] = ajax_command_replace('.view-commerce-cart-form', $cart);
- //$commands[] = ajax_command_append('.view-commerce-cart-form', $errors);
- return array('#type' => 'ajax', '#commands' => $commands);
- }
- function pie_cart_ajax_cart_reload() {
- global $user;
- $view_name = 'commerce_cart_form';
- $cart_order = commerce_cart_order_load($user->uid);
- if (!$cart_order || empty($cart_order->commerce_line_items)) {
- $cart = '<div class="view-commerce-cart-form">' . theme('commerce_cart_empty_block') . '</div>';
- }
- else {
- $args = array($cart_order->order_number);
- $display_id = 'default'; // The display id of for the view.
- $view = views_get_view($view_name);
- if (!$view || !$view->access($display_id)) {
- return;
- }
- $view->set_display($display_id);
- $view->set_arguments($args);
- $cart = $view->preview();
- }
- return $cart;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement