【问题标题】:Add custom fields to shopping cart display - Ubercart 3将自定义字段添加到购物车显示 - Ubercart 3
【发布时间】:2011-11-27 23:26:18
【问题描述】:

我有运行自定义字段的 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 功能? 谢谢

【问题讨论】:

  • 通过执行 print_r (node_load($form['items'][1]['nid']['#value'] ))。我得到类似减去无关的东西codestdClass Object ( [vid] => 7270 [uid] => 1 [title] => Bai Bu ... [field_product_term_grade] => Array ( [und] => Array ( [ 0] => Array ( [tid] => 4 ) ) ) [field_product_botanical] => Array ( [und] => Array ( [0] => Array ( [value] => Stemonae Radix [format] => [safe_value) ] => Stemonae Radix ) ) ) ... code 如何提取 bold**[field_product_term_grade]**bold 的值?
  • 有人帮忙吗?大约 20 年前,我停止使用 pascal 进行编程,但现在面向对象的东西与以前大不相同。我不知道如何使用 stdClass 对象或访问它们的数据?有什么好的教程吗?在此先感谢...

标签: drupal-7 ubercart


【解决方案1】:

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))),
        );
      }
    }
  }
}

【讨论】:

  • 我是 Drupal 新手,你能告诉我如何以及在哪里使用此代码。
  • 在自定义模块中。不要忘记将函数名称中的 YOUR_MODULE_NAME 更改为您的模块名称。如何制作自己的模块教程:drupal.org/node/1074360
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2011-04-28
  • 2018-10-20
  • 1970-01-01
  • 2011-01-30
  • 2021-07-24
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多