オプション属性「文字毎の価格」で価格が3倍になります

困った時はこちらで質問してください。回答を担当する人は特に決まっていませんので、分かる方は回答をお願いします。
アバター
Kindmania
記事: 9
登録日時: 2012/2/02 10:03
連絡を取る:

オプション属性「文字毎の価格」で価格が3倍になります

投稿記事by Kindmania » 2014/1/29 10:26

こんにちは
Zen Cart 1.3.0.2-l10n-jp-8
を使用しステッカーの制作販売をしています。

入力内容に応じたカッティング文字の販売をしたく、

・商品価格0円
・商品オプション属性で「文字毎の価格」を60円

にし、商品ページから「あいうえおかきくけこ」10文字でオーダーすると

600円になるはずが1800円になってしまいます。

半角アルファベット「absdefghij」10文字では600円になります。

全角文字なので2倍の1200円になるのであれば商品の説明で済ませそうですが、
なぜか3倍になってしまいます。

同じような現象現れますでしょうか。
解決方法ご存知の方みえましたら宜しくお願いいたします。
Kindmania
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: オプション属性「文字毎の価格」で価格が3倍になります

投稿記事by kimono » 2014/1/29 11:32

こんにちわ。kimonoです :)

これは文字数で価格を決めるところを日本語対応(マルチバイト対応)していないのが原因ですね。
ちなみに3倍になるのは、UTF-8だからです。EUC-JPの場合は2倍です。
そのため、動作的には問題なく、日本語対応だけをしてやればいいということになります。

これですが、最新版の1.5.1でも修正していないので、両方共修正が必要になりますので、また新しく修正しておきます。
とりあえずは下記が修正です。

admin/includes/functions/functions_prices.php
1109行目辺り

コード: 全て選択

      $string = trim($string);
      $word_count = substr_count($string, ' ');
      return (($word_count+1) - $free);


コード: 全て選択

      $string = trim($string);
      $word_count = mb_substr_count($string, ' ');
      return (($word_count+1) - $free);

1136行目辺り

コード: 全て選択

    if (TEXT_SPACES_FREE == '1') {
      $letters_count = strlen(str_replace(' ', '', $string));
    } else {
      $letters_count = strlen($string);
    }


コード: 全て選択

    if (TEXT_SPACES_FREE == '1') {
      $letters_count = mb_strlen(str_replace(' ', '', $string));
    } else {
      $letters_count = mb_strlen($string);
    }


includes/functions/functions_prices.php
1154行目辺り

コード: 全て選択

      $string = trim($string);
      $word_count = substr_count($string, ' ');
      return (($word_count+1) - $free);


コード: 全て選択

      $string = trim($string);
      $word_count = mb_substr_count($string, ' ');
      return (($word_count+1) - $free);

1181行目辺り

コード: 全て選択

    if (TEXT_SPACES_FREE == '1') {
      $letters_count = strlen(str_replace(' ', '', $string));
    } else {
      $letters_count = strlen($string);
    }


コード: 全て選択

    if (TEXT_SPACES_FREE == '1') {
      $letters_count = mb_strlen(str_replace(' ', '', $string));
    } else {
      $letters_count = mb_strlen($string);
    }

と修正すれば正しい動作になりますね。
アバター
Kindmania
記事: 9
登録日時: 2012/2/02 10:03
連絡を取る:

Re: オプション属性「文字毎の価格」で価格が3倍になります

投稿記事by Kindmania » 2014/1/29 11:59

kimono 様

さっそくご教授いただきありがとうございますm(_ _)m

本当にたすかります、今からご教授いただいた該当ファイルを編集してみます。
Kindmania
アバター
Kindmania
記事: 9
登録日時: 2012/2/02 10:03
連絡を取る:

Re: オプション属性「文字毎の価格」で価格が3倍になります

投稿記事by Kindmania » 2014/1/29 12:24

2014-01-29 12.21.12.jpg
2014-01-29 12.21.12.jpg (33.88 KiB) 閲覧数: 7950 回


更新完了し全角日本語、半角英語とも対応する事ができました。

ありがとうございます :D
Kindmania
アバター
kimono
記事: 1995
登録日時: 2005/9/27 13:30
お住まい: 大阪府大阪市天王寺区上本町
連絡を取る:

Re: オプション属性「文字毎の価格」で価格が3倍になります

投稿記事by kimono » 2014/1/29 15:06

こちら1.5.1の最新版にて修正を行い、ファイルを入れ替えておきました。

“Zen Cart 質問コーナー” へ戻る