Revision of Ubercart 客製化 from Wed, 2013-01-02 15:52

最近在做一個 ubercart 的 customization
主要是管理頁面有新的選項和結賬的時候橧加一組必填資料
是 Drupal 6 的客製化,而在 Drupal 7 和 commerce 的出現之後
其實這些都不太重要了
但不記錄下來的話便會更加浪費
所以還是簡單的記錄一下

管理頁面新的選項
例如在 /admin/store/orders/1005243/edit 增加一組 form 元素
hook_order_pane 定義 pane
傳入 callback,最後當然是返回 form API 定義:

<?php
/**
 * Implementation of hook_order_pane().
 */
function hook_order_pane() {
 
$panes[] = array(
   
'id' => 'example',
   
'callback' => 'example_pane',
   
'title' => t('Example'),
   
'desc' => t('Select'),
   
'class' => 'pos-left',
   
'weight' => -1,
   
'show' => array('view', 'edit'),
  );
  return
$panes;
}

/**
 * Handle delivery date and time on order pane
 */
function example_pane($op, $arg1) {

  switch (
$op) {
    case
'view':
      return
'Example';
    case
'edit-form':
     
$form['driver']['driver_id'] = array(
       
'#type' => 'select',
       
'#title' => t('Select'),
       
'#default_value' => 0,
       
'#options' => $options,
      );
      return
$form;
?>

以上代碼輸出一個新的 select 到修改 order 表單
但記錄到 database 的部份還需要以下代碼:

<?php
/**
 * Implementation of hook_order().
 */
function hook_order($op, &$arg1, $arg2) {
  switch (
$op) {
    case
'save':
     
db_query($sql);
      break;
  }
    case
'load':
     
$result = db_query($sql);
      if (
$data = db_fetch_object($result)) {
       
$arg1->example['key'] = $data->example;
      }
      break;
}
?>

以上三個 hook 便可以簡單新增一個管理者專用的 dropdown
可以記錄例如送了貨沒有,簡單的客戶回應等等
下一篇續說明一下結賬時新增表單的 hooks

p.s. 話說真的應該花點時間將這個 blog upgrade 到 Drupal 7 了

Google