教文館の社内ナレッジベースです。

クロネコヤマトB2対応CSV出力

ヤマトのB2クラウドにも対応していて役に立ちますが、

このままでは不具合がいくつもある商品です(そのかわり1080円と安かった。)

不具合箇所

  • 品名文字数(全角25文字まで)に対応していない。
  • 代引発送(コレクト)がうまく機能していない。
  • ネコポスに対応していない。※DM便には何故か対応していた。

以上の不具合をちまちま修正していきたいと思います。

今回は一番簡単な文字数整形。おそらくphp関数で整形可能との予測のもとにコーディングをしていきます。簡単機能なのでアドオンの構造も単純です。

で、今回手を入れるのはschemas > exim ディレクトリの「order_b2.functions.php」です。

このアドオンで使う独自functionの定義をしているファイルで、73行目から91行目までが品名の欄の入力制御になっています。

case 'product1_code':
$keys = array_keys($_sv_data['products']);
$return = $_sv_data['products'][$keys[0]]['product_code'];
break;
case 'product1_name':
$keys = array_keys($_sv_data['products']);
$return = $_sv_data['products'][$keys[0]]['product'];  //←ここが品名1
break;
case 'product2_code':
$keys = array_keys($_sv_data['products']);
if (isset($keys[1])) {
$return = $_sv_data['products'][$keys[1]]['product_code'];
}
break;
case 'product2_name':
$keys = array_keys($_sv_data['products']);
if (isset($keys[1])) {
$return = $_sv_data['products'][$keys[1]]['product'];//←ここが品名2
}
break;

return関数で返される文字列の結果をmb_substr関数をかぶせて文字数整形をします。

 case 'product1_code':
$keys = array_keys($_sv_data['products']);
$return = $_sv_data['products'][$keys[0]]['product_code'];
break;
case 'product1_name':
$keys = array_keys($_sv_data['products']);
$return = mb_substr($_sv_data['products'][$keys[0]]['product'],0,25);
break;
case 'product2_code':
$keys = array_keys($_sv_data['products']);
if (isset($keys[1])) {
$return = $_sv_data['products'][$keys[1]]['product_code'];
}
break;
case 'product2_name':
$keys = array_keys($_sv_data['products']);
if (isset($keys[1])) {
$return = mb_substr($_sv_data['products'][$keys[1]]['product'],0,25);
}
break;

無事にB2に怒られることがなくなりました。タイトルの付け方は今後の課題かな。贈り物に【送料無料】が最初に来るって・・・

 

-うんちく-

「mb_substr関数」

substr関数のマルチバイト版。文字列の一部を取得する。

引数:
第一引数には入力文字列を指定。文字列は’ ‘で囲みますが、個々では中に_sv_data関数があります。

第二引数には開始位置を指定。例えば0を指定しているので入力文字列の最初から文字列を取得します。

第三引数のレングスを指定した場合は、開始位置から数えてレングス数(文字数)分の文字列を取得することになります。この場合25文字を指定しているので25文字でぶつ切りになります。

第四引数の$encodingは文字列のエンコーディングを指定します。単体で使うことはないし無視していいです。日本語を指定する場合はWindowsなら“SJIS”、MacやLinuxなら“EUC-JP”や“UTF-8”を指定します。

返り値:
開始位置及びレングスで指定した文字列の一部を返します。