2014年8月28日木曜日

Magentoの注文と返品翻訳対応になっていないのを修正

テンプレートコードをみてみるとそもそも翻訳対応コードになっていなかった。
<select name="oar_type" id="quick_search_type_id" class="select" title="" onchange="showIdentifyBlock(this.value);">
  <option value="email">Email Address</option>
  <option value="zip">ZIP Code</option>
</select>

青字の部分が翻訳できない。
ロケールファイルが適応されない。

修正するためには以下のようにコードを修正します。

<select name="oar_type" id="quick_search_type_id" class="select" title="" onchange="showIdentifyBlock(this.value);">
  <option value="email"><?php echo $this->__('Email Address') ?></option>
  <option value="zip"><?php echo $this->__('ZIP Code') ?></option>
</select>

赤字部分が修正部分です。
Mage_Sales.csvで定義されているEmail AddressとZIP Codeに対応させます。
Magento本体が対応してないので、
バグというか忘れ物な気がします。

ただ、Magento本体のコードからあくまでも切り離したいので、
自分の名前空間のテンプレートをいじってください。

ざっとしか見てませんが以下の2つで翻訳対応してない部分がありました。
template/sales/guest/form.phtml(34-45行目)
template/sales/widget/guest/form.phtml(43-44行目)

修正したらキャッシュを削除して更新して修正されていることを確認してください。


他にも翻訳対応してないところありそうだな。。。

2014年8月22日金曜日

Galleriaの左上にキャプションが表示されてしまう問題

Galleria初期化時に
$j('#galleria').galleria({
  _toggleInfo: false,
  showinfo: false,
  imagePosition: 'center',
  thumbPosition: 'top right',
  responsive: true,
  lightbox: true,
  swipe: true
});

としているにも関わらずshowinfoオプションが全然機能しない!!

目的は表示させないこと。
イラっとしたので根本的に表示させないようにした。
galleria.classic.jpの54〜57行目付近を編集しました。
        } else {
            /*info.show();*/ ←こいつをコメントアウトした
            this.$('info-link, info-close').hide();
        }

もう二度と表示されないように願う。

Magento Connectでインストールエラーが出たら


Can't open file package.xml for writing. Permission denied.

こんなエラーが出たら。。。

var/package/tmp/package.xml

の権限が444になっていないかチェックする。
666に変更してあげましょう。

Magentoでインデックスが再構築できなくなる問題

Magentoでインデックスが「xxxxが実行中です」みたいのが表示されて、
実行できないことが発生しました。

ちょっと強引なやり方かもしれませんが、
データベースのindex_processテーブルの内容を全部削除してしまうことで回避しました。

mysql> delete from index_process where status="pending";

削除後Magentoの管理画面で
1、キャッシュ管理でキャッシュを削除する。
2、インデックス管理でインデックスを全て再構築する。

これでとりあえず動くようになります。

2014年8月21日木曜日

Magentoで顧客の名前の表示を日本に合わせる

Magentoについての説明は他のサイトにお任せして割愛します。

例として以下の名前の登録の場合(ミドルネームは省略します)、
姓:日本
名:太郎

顧客の名前表示は次のようになってしまうはずです。
デフォルトの状態:太郎 日本様など

ここで厄介なのが姓名が逆転して表示されてしまう。
グローバルなお店では問題ないかもしれませんが、
日本国内で商売する店なら「日本 太郎」と表示したいところ。

テンプレートごとにやってもいいと思います。
explode関数などでゴリゴリやるのもありです。

全部のテンプレートファイルをチェックするのも面倒ですし、
見落としが合ってもいやなので根本的な解決法を手探りで探しました。

とりあえず、対策した方法を紹介します。
もっとよい方法があったら教えてくださいm(_ _)m

【注意事項】
・ファイルパスなどは適宜に読み替えて下さいね。
・バックアップをとりましょう。
・自己責任でお願いします。
編集するファイル(code/core/Mage/Customer/Model/Customer.php)の236行目あたり。

【修正箇所】
・標準の国設定を取得するようにした(※日本とそれ以外の国で表示を変えたいため)
$countryCode = Mage::getStoreConfig('general/country/default');
・日本の場合とそれ以外の国で場合分け(※日本のコードはJPでした)
if ($countryCode === 'JP')
 特定の国の表示を変更したい場合はもっと分岐を増やせば対応できそう。
・名前の表示順序
できるだけもとのソースコードを流用したかったので汚いソースコードですが、
そのままif分にぶっこみました。

修正前と修正後の関数を下記に載せておきますので参考までに。

■修正前の元の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
            $name .= $this->getPrefix() . ' ';
        }
        $name .= $this->getFirstname();
        if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
            $name .= ' ' . $this->getMiddlename();
        }
        $name .=  ' ' . $this->getLastname();
        if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
            $name .= ' ' . $this->getSuffix();
        }
        return $name;
    }

■修正後の関数
    public function getName()
    {
        $name = '';
        $config = Mage::getSingleton('eav/config');
        // Get store country
        $countryCode = Mage::getStoreConfig('general/country/default');
        // Japan
        if ($countryCode === 'JP') {
            $name .=  $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= ' ' .$this->getFirstname();
        }
        // Other
        else {
            if ($config->getAttribute('customer', 'prefix')->getIsVisible() && $this->getPrefix()) {
                $name .= $this->getPrefix() . ' ';
            }
            $name .= $this->getFirstname();
            if ($config->getAttribute('customer', 'middlename')->getIsVisible() && $this->getMiddlename()) {
                $name .= ' ' . $this->getMiddlename();
            }
            $name .=  ' ' . $this->getLastname();
            if ($config->getAttribute('customer', 'suffix')->getIsVisible() && $this->getSuffix()) {
                $name .= ' ' . $this->getSuffix();
            }
        }
        return $name;
    }