UberCartのアドレスパネル | Color Balance

UberCartのアドレスパネル

何か、DrupalでEコマースという­と、いつの間にかUberCar­tが標準になってしまっていますよね。

どうせなら、ストアもコンテ­ンツタイプのようにしてくれれば、マーケットプレイ­スに出来るのに・・・と、いつもの如く不満を漏らし­ておりますが。

さて、海外製の宿命として、­チェックアウトのアドレスパネルの順番が、日本向き­に出来ていなく、そのまま使うのはあまりかっこよく­ないですよね。

そんなわけで順番を変え、つ­いでに郵便番号から住所の自動入力をやってしまうた­めのテーマです。

いつも日本語ローカライズば­かり使わせていただいているので、感謝を込めて :)

function theme_address_pane($form) {
  drupal_set_html_head('<script src="'. check_url(url('http://ajaxzip3.googlecode.com/svn/trunk/ajaxzip3/ajaxzip3.js')) .'" type="text/javascript"></script>');
  $req = '<span class="form-required">*</span>';

  if (isset($form['copy_address'])) {
    $output .= drupal_render($form['copy_address']);
  }

  $output .= '<div class="address-pane-table"><table>';

  $fields = element_children($form);
  $sorted = array('billing_address_select', 'billing_last_name', 'billing_first_name', 'billing_company',
    'billing_postal_code', 'billing_country', 'billing_zone', 'billing_city', 'billing_street1', 'billing_street2', 'billing_phone');
  $fields = array_intersect($sorted, $fields);

  $form['billing_postal_code']['#attributes'] = array_merge(
    $form['billing_postal_code']['#attributes'],
    array('onKeyUp' => 'AjaxZip3.zip2addr("panes[billing][billing_postal_code]", "", "panes[billing][billing_zone]", "panes[billing][billing_city]");')
  );

  foreach ($fields as $field) {
    if (substr($field, 0, 9) == 'delivery_' || substr($field, 0, 8) == 'billing_') {
      $title = $form[$field]['#title'] .':';
      unset($form[$field]['#title']);
      if (substr($field, -7) == 'street1') {
        $title = uc_get_field_name('street') .':';
      }
      elseif (substr($field, -7) == 'street2') {
        $title = ' ';
      }
      $output .= '<tr><td class="field-label">';
      if ($form[$field]['#required']) {
        $output .= $req;
      }
      $output .= $title .'</td><td>'. drupal_render($form[$field]) .'</td></tr>';
    }
  }
  $output .= '</table></div>';

  foreach ($fields as $element) {
    $output .= drupal_render($form[$element]);
  }

  return $output;
}

ただし、郵便番号~のスクリ­プトはnonSecureなため、セキュアな環­境でご利用の場合は、すべてダウンロードしてきた方­が良いですね。

しかし、このarray_in­tersetでソートしてしまう­というのは中々良い方法のような気がする :p

なるほど^^; 配送情報にも上記のテーマ関数が利用されるの

なるほど^^;
配送情報にも上記のテーマ関数が利用されるのですね。

となると、判定と切り替えのコードが必要になりますね・・

なかなかサックと行かないものですね

配送情報と請求情報の2つのフォームを表示させようとした場合

私の場合、配送情報と請求情報の2つのフォームを表示させようとした場合、だめでした。
請求情報だけ表示の場合ですと、きちんと動きました。
わたしのほうでもしかすると、大きな勘違いをしているのかもしれません。。

んーぅ。 やっぱり、ソース見てもコメントしかないのですよね

んーぅ。
やっぱり、ソース見てもコメントしかないのですよね・・・>501行目

なにか、改造していたりはしていないのでしょうか?・・

UCのバージョン

ご返信大変ありがとうございます。
当方のUCのバージョンも6.x-2.2
となっております。。

コメントありがとうございます。 日本のeコマースにもDru

コメントありがとうございます。
日本のeコマースにもDrupalが使われるようになるのは嬉しいですね。

ソースを見てみたのですが、該当する部分がコメントになっていました。
UCのバージョンはいくつでしょうか?

当方6.x-2.2で試しております。

早速導入させていただこうと思ったのですが..

大変使えそうな変更ありがとうございます。
早速書き換えて使わせていただこうかと思ったのですが、
warning: array_merge() [function.array-merge]: Argument #1 is not an array in /var/www/drupal/sites/all/modules/ubercart/uc_cart/uc_cart_checkout_pane.inc on line 501.
のエラーが出力されてしまいました。
何かわかりますでしょうか…