Добавить настраиваемые поля для отображения корзины покупок - Ubercart 3 - PullRequest
3 голосов
/ 29 сентября 2011

У меня Drupal 7 и UC 3, работающие с настраиваемыми полями. Я хочу отображать эти поля в корзине, но не могу этого сделать. Это моя первая попытка создания модуля!

Я пытаюсь использовать hook_form_alter (& $ form, & $ form_state, $ form_id) {} ​​в пользовательском модуле:

function swcart_form_alter(&$form, &$form_state, $form_id) {
  switch($form_id) {
    case 'uc_cart_view_form':

      // Adding Grade column
       $form['items']['#columns']['grade'] = array('cell' => 'Grade', 'weight' => 3.5);

      for($i=0; $i < count($form['items']); $i++) {
    if(isset($form['items'][$i]['nid'])) {
          // Loading the node so we can retrieve the information we need.
      $product = node_load($form['items'][$i]['nid']['#value']);

          // Adding the 'Grade' to the product that is in the user's cart.
      $form['items'][$i]['grade']['#value'] = $product -> field_product_term_data;
    }
      }
      break;
  }
}

Появляется столбец «Оценка», но в таблице нет данных. Что я должен делать? Должен ли я изменить таблицу TAPir? подключить другую функцию uc_cart? Спасибо

1 Ответ

4 голосов
/ 15 июня 2012

Эти две ссылки Ubercart 3 API должны помочь: hook_tapir_table_alter uc_cart_view_table

В первой ссылке есть пример добавления столбца с данными.

РЕДАКТИРОВАТЬ: Закончено с добавлением цены за 1 столбец продукта с использованием такого кода. Надеюсь, что это поможет кому-то преодолеть негибкость Ubercart.

function YOUR_MODULE_NAME_form_uc_cart_view_form_alter(&$form, &$form_state) {
  $form['items']['#columns']['remove']['weight'] = 6;
  $form['items']['#columns']['total']['weight'] = 5;
  $form['items']['#columns']['qty']['weight'] = 4;

  $form['items']['#columns']['price'] = array(
      'cell' => t('Price'), 
      'weight' => 3,
  );
}
function YOUR_MODULE_NAME_tapir_table_alter(&$table, $table_id) {
  if ($table_id == 'uc_cart_view_table') {
    foreach (element_children($table) as $key) {
      if (!empty($table['#parameters'][1][$key]['nid'])) {
        $node = node_load($table['#parameters'][1][$key]['nid']['#value']);
        $table[$key]['price'] = array(
          '#markup' => theme('uc_product_price',array('element' => array('#value' => $node->sell_price))),
        );
      }
    }
  }
}
...