Hatena::ブログ(Diary)

高橋です このページをアンテナに追加 RSSフィード Twitter

2011年04月21日

EC-CUBE 2.11.0 - セットアップ・インストール手順(エックスサーバ)


f:id:y_guriko:20110421153650j:image:w400

PC、モバイル、スマートフォンに対応してる。ふつうにすごい


純国産オープンソースCMSの「EC-CUBE

数あるECサイトの中でも特に人気がありますね。


私自身はEC-CUBEをセットアップするのが初めてでした。

また、Xサーバ(レンタルサーバです)へのインストールマニュアルは2.4が対象と参考になりません。


せっかくなので、本記事は実際に発生したエラーなども含めて説明しています。


準備


まず、データベースを構築するところからですが

ここはXサーバのマニュアル通りで問題ないです。


空のDBを作成したら、EC-CUBE Version 2.11.0(zip)をダウンロードします。

この時、リンクのすぐ下にある不具合修正ファイルの最新版も同時にダウンロードしておきます。


「eccube-2.11.0.zip」を解凍すると、以下のようになっていると思います。

  • eccube-2.11.0/
    • data/
    • docs/
    • html/
    • test/
    • COPYING

上記のうち、ECサイトそして機能するのに必要なデータは

「data」「html」の2つのフォルダだけです。


セットアップ前に、不具合修正ファイル内にある「data」「html」を

eccube-2.11.0の中に入れて上書きしてください。


これで準備は完了です。


セットアップ


このままアップロードして進めた場合、トップページが

「http://ドメイン/html/」になりますので、トップページを「http://ドメイン/」にしたい場合は

「dataフォルダ」を「htmlフォルダ」に移動してください。


ファイルの移動に伴って「html/define.php」の3行目を以下のように修正

修正前
define("HTML2DATA_DIR", "/../data/");
↓
修正後
define("HTML2DATA_DIR", "/data/");

そして「htmlフォルダ」内のソースをすべてFTPでアップロードする。

f:id:y_guriko:20110421124748j:image:w360


あとは「http://ドメイン/」にアクセスするだけで

ドバっとインストールされるんだろうな、と思っていましたが

f:id:y_guriko:20110421124734j:image:w360

500 Internal Server Error


う…うろたえるんじゃあないッ!

「.htaccess」あたりが怪しい気がする!!


というわけで、「html/.htaccess」を削除!

 「iranai.htaccess」などリネームしてもOK


これで大丈夫だろう、気を取りなおして更新ボタンを押下


f:id:y_guriko:20110421124735j:image:w360


「フゥゥーー……初めてEC-CUBEをやっちまったァ〜〜でも想像してたより、なんて事はないなぁ」


「次へ進む」をクリックすると




f:id:y_guriko:20110421135801j:image:w480


Oh...


まぁ、タイムゾーンを設定してくれー!っていう警告なんでOK大丈夫

「html/define.php」の8行目に以下のソースを追加して保存

/* The system's timezone settings. */
date_default_timezone_set('Asia/Tokyo');

これで問題ない!はず!そう信じて更新ボタンを押下。


f:id:y_guriko:20110421124737j:image:w480


成功ですね、OK〜

あとは問題なくインストールは完了しましたとさ(^O^)/バンジージャンプ


あとはインストールの続きです。


ファイルコピー

f:id:y_guriko:20110421124738j:image:w480


サイト設定

f:id:y_guriko:20110421124739j:image:w480


データベース設定

f:id:y_guriko:20110421124740j:image:w480


データベース初期化

f:id:y_guriko:20110421124741j:image:w480


データベース初期化2(出ない場合も有り

f:id:y_guriko:20110421124742j:image:w480


設定内容の確認

f:id:y_guriko:20110421124743j:image:w480


インストール完了

f:id:y_guriko:20110421124744j:image:w480


ログイン画面(上部に警告)

f:id:y_guriko:20110421124745j:image:w480


「install/index.php」をおとなしく削除。


ログイン画面(すっきり)

f:id:y_guriko:20110421124746j:image:w480


管理画面内

f:id:y_guriko:20110421124747j:image:w480



以上です(^O^)/バンジージャンプ

2011年03月29日

CakePHP - バリデーションのエラーメッセージをシンプルに国際化(i18n)する方法


f:id:y_guriko:20110329173847j:image

いま時のWeb開発で「i18n」は基本である。どうやら(謎の倒置法


まず、CakePHPでの一般的な国際化(i18n)については

CakePHP1.2の簡単国際化 」がとても参考になりました。(1.3でも問題なかったです


上記の記事内のステップがすべて完了すれば

コントローラ内の"__()"で囲まれた部分はすべて国際化されます。


しかしモデル内、特にバリデーションのエラーメッセージには

"__()"が使用できないため"cake i18n"コマンドで抽出できずに英語のままです。


今回はこの部分をシンプルに日本語化する方法を書きます。

 色々やれば抽出させることも可能ですが、色々やらなくてはなりません。


はじめにapp_model.phpに数行のソースを追加しておきます。

//app_model.php
function invalidate($field, $value = true) {
    return parent::invalidate($field, __($value, true));
}

次はpoファイルの作成ですが、作業は単純。


下記ソースをpoファイルの後ろにでもコピペした後

"msgstr" の値を適宜編集してください。

#: Validation :
#: notEmpty
msgid "notempty"
msgstr "必須項目です"

#: Validation :
#: alphaNumeric
msgid "alphanumeric"
msgstr "半角英数字ではありません"

#: Validation :
#: between
msgid "between"
msgstr "文字数が指定範囲内ではありません"

#: Validation :
#: blank
msgid "blank"
msgstr "空白ではありません"

#: validation :
#: cc
msgid "cc"
msgstr "クレジットカード番号ではありません"

#: Validation :
#: comparison
msgid "comparison"
msgstr "比較結果が正しい値ではありません"

#: Validation :
#: custom
msgid "custom"
msgstr "マッチした結果が正しい値ではありません"

#: Validation :
#: date
msgid "date"
msgstr "日付ではありません"

#: Validation :
#: time
msgid "time"
msgstr "時間ではありません"

#: Validation :
#: boolean
msgid "boolean"
msgstr "論理値ではありません"

#: Validation :
#: decimal
msgid "decimal"
msgstr "十進数の数値ではありません"

#: Validation :
#: email
msgid "email"
msgstr "メールアドレスではありません"

#: Validation :
#: equalTo
msgid "equalto"
msgstr "チェック値と同じではありません"

#: Validation :
#: extension
msgid "extension"
msgstr "拡張子が対象ではありません"

#: Validation :
#: ip
msgid "ip"
msgstr "IPアドレスではありません"

#: Validation :
#: minLength
msgid "minlength"
msgstr "指定以上の長さの文字列ではありません"

#: Validation :
#: maxLength
msgid "maxlength"
msgstr "指定以下の長さの文字列ではありません"

#: Validation :
#: money
msgid "money"
msgstr "金額ではありません"

#: Validation :
#: multiple
msgid "multiple"
msgstr "選択されたアイテムの個数、または内容が正しい値ではありません"

#: Validation :
#: numeric
msgid "numeric"
msgstr "数値ではありません"

#: Validation :
#: phone
msgid "phone"
msgstr "電話番号ではありません"

#: Validation :
#: postal
msgid "postal"
msgstr "郵便番号ではありません"

#: Validation :
#: range
msgid "range"
msgstr "数値が指定範囲内ではありません"

#: Validation :
#: ssn
msgid "ssn"
msgstr "社会保障番号ではありません"

#: Validation :
#: uuid
msgid "uuid"
msgstr "ユニークではありません"

#: Validation :
#: url
msgid "url"
msgstr "URLではありません"

#: Validation :
#: inList
msgid "inlist"
msgstr "リストに含まれた値ではありません"

#: Validation :
#: userDefined
msgid "userdefined"
msgstr "定義した内容ではありません"


最後にPoeditなどでコンパイルしてもらえばmoファイルの完成です。

ここまででデフォルトのエラーメッセージを日本語へ変更できました。


あくまでデフォルトメッセージの変更なので

さらにカスタマイズが必要になる可能性がありますね


ま!そこは使うときになったらまた考えますよ


---

PHP 5.3

CakePHP 1.3.8

2011年03月18日

CakePHP - usersテーブルを更新した際に $this->Auth->user() も更新する方法


f:id:y_guriko:20110318123215j:image

データは更新されていても表示は変わらない・・・


 id:hiromi2424 様からのコメントで他の方法があるそうなのでこちらもご覧ください。

 私自身未検証ですが、かなり有力な情報であると思います。


CakePHPのAuthコンポーネントによるログインは

認証に成功するとユーザ情報をセッションに保存します。


保存したセッションは、$this->Auth->user()で取得可能です。


すごく便利なんですけど

usersテーブルが更新されても、Cakeは自動的にセッションを更新しません。


その対策として、usersテーブルが更新された際に使える

セッションを最新にする関数を紹介します。(自動ではないです


// Auth.userのセッションを更新する
function _update_session_auth_user() {
    $this->loadModel('User'); // Userモデルを読み込んでいるなら消してもOK
    $user = $this->User->find('first', array('conditions' => array('id' => $this->Auth->user('id')), 'recursive' => -1));
    unset($user['User']['password']); // 念のためパスワードは除外。どうでもよければ消してもOK
    $this->Session->write('Auth', $user);
}

これで『$this->Auth->user()』に関しては特に問題はなくなりました。


--

PHP 5.3

CakePHP 1.3.7