Callback для изменения quantiiy в commerce cart

Главные вкладки

Аватар пользователя ХулиGUN ХулиGUN 18 сентября 2012 в 16:41

Вывожу форму корзины блоком. Требуется без перезагрузки корзины при смене quantity апдейтить корзину. Решил допилить dc_cart_ajax. Навесил аякс на quantity field

<?phpforeach (element_children($form['edit_quantity']) as $k) {
        $form['edit_quantity'][$k]['#ajax'] = $ajax;
      }?>

Стандартный калбек этого модуля:

<?phpfunction dc_cart_ajax_form_views_form_commerce_cart_form_ajax_submit(&$form, &$form_state) {
  $order = commerce_cart_order_load($GLOBALS['user']->uid);
  $is_empty = empty($order->commerce_line_items);
  $output = '';
  if ($is_empty) {
    $output = menu_execute_active_handler('cart', FALSE);

  }

  $commands[] = array(
    'command' => 'dc_cart_ajax',
    'output'  => $output,
    'message' => theme('status_messages'),
    'form-id' => str_replace('_', '-', $form['#form_id']),
  );

  return array('#type' => 'ajax', '#commands' => $commands);
}?>

Для всех остальных кнопок(edit_submit, edit_delete) работает безупречно, но на изменение quantity он не действует. Нужно писать свой калбек. Помогите плз написать калбек для quantity. В калбеке мне всего лишь нужно сохранить значение quantity. Даже возвращать ничего не нужно. Я так понимаю, что сначала надо вызвать форму корзины и перезаписать её, но скила не хватает. Хелп плз. Буду рад любой помощи. Уже несколько дней бьюсь над этой проблемой

Комментарии

Аватар пользователя Worth Worth 18 сентября 2012 в 23:33

Вы не указали до конца переменную $ajax вот здесь вот

<?php foreach (element_children($form['edit_quantity']) as $k) {
        $form['edit_quantity'][$k]['#ajax'] = $ajax;
      }?>

Я бы вам советовал её определить примерно следующим образом:

    '#ajax' => array(
      'callback' => 'simplecalc_callback',
      'wrapper' => 'answer',
      'method' => 'html',
    ),

ну и затем уже

/**
 * AJAX callback
 */

function simplecalc_callback($form, $form_state) {
  return strval($form_state['values']['number1'] + $form_state['values']['number2']);
}

Тут держите полный модуль с примером http://xandeadx.ru/blog/drupal/159
Вообще лучше бы гуглили по запросу "drupal ajax"