2011-09-29 48 views
3

我有自定义字段运行的Drupal 7和UC 3。我希望能够在购物车中显示这些字段,但似乎无法做到。这是我第一次创建模块!添加自定义字段到购物车显示 - Ubercart 3

我尝试使用hook_form_alter(& $形式,& $ 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功能? 感谢

+0

通过执行print_r(node_load($ form ['items'] [1] ['nid'] ['#value']))来检查额外字段是否在购物车中传递。 。我得到一些像减去不相关的东西'code'stdClass 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 **的值? – Frederic

+0

任何人都可以帮忙吗?我在20年前离开了编程与pascal,但面向对象的东西现在是不同于以前。我不知道如何使用stdClass对象,也不访问他们的数据?任何好的教程?预先感谢... – Frederic

回答

4

这个两个的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))), 
     ); 
     } 
    } 
    } 
} 
+0

做得好,这帮助我与我的问题ubercart :) – NenadP

+0

我是Drupal的新手,你能告诉我如何以及在哪里使用这段代码。 – tdk

+0

在自定义模块中。不要忘记将函数名称中的YOUR_MODULE_NAME更改为您的模块名称。 关于如何制作您自己的模块的教程:https://www.drupal.org/node/1074360 –

相关问题