ECCUBEのブロックでPOSTが使えない件

私はECUBEでページを作成するときに、
固定ページの作成であっても、
空のページを作ってからそこにブロックを使って作成します。
まぁどこかで使う可能性とか考えるとそっちの方がのちのち便利かなと・・・

で、ECCUBEを2.11.1にしてから(実際には2.11からかな?)
ブロックでPOSTができない問題がおきた。
データを送信しすると
「不正なページ移動です」となってしまう。

で、何が問題かというと
トランザクションIDを送信してないのが問題で、
Formタグの中に下を追加すればいいって問題だけじゃ済まなかった。

<input type=”hidden” name=”<!–{$smarty.const.TRANSACTION_ID_NAME}–>” value=”<!–{$transactionid}–>” />

実際には
トランザクションIDが取得できていないので
上の$transactionidはNULLになってしまっている。
この問題はブロックのみに起きている問題で固定ページには問題が起きない。

固定ページとブロックでは継承するクラスが違うため
固定ページの場合はデフォルトでトランザクションIDを取得しているのに対して
ブロックでは取得してない。

そのため、ブロックのロジックファイルに

$this->doValidToken();
$this->setTokenTo();

を追加すればトランザクションIDを取得するので
POSTした際に不正なページでなくなる。

ロリポップにECCUBEをインストール

ロリポップサーバーでECCUBEのインストールに挑戦してみたいと思います。
これから記述する内容はロリポップで作業した内容になりますが
他のサーバーでも同様に作業すればできます。
PHPのセーフモードの設定といったレンタルサーバーによって設定の違いや
変更する方法が異なりますので、そこはサーバーの設定を確認して下さい。

ロリポップサーバーにインストールするには予めサーバーの設定を変えておく必要があります。
1.設定を変更する。
ロリポップにログインしてWEBツールからPHP設定
インストールするドメインの設定変更へをクリック
・sefe_modeをoff
・magic_quotes_gpcをoff
に設定する。

2.ECCUBEをダウンロードして解凍する。
ECCUBEはDLはここから。
インストールしたECCUBEのバージョンは2.11.1となりますので
バージョンが異なる場合に以下の手順インストールできない場合があるかもしれません。

3.解凍したファイルをサーバーにアップロードする。
今回はサブドメインを作らないでやります。
しかし、今のドメインにはWordPressがインストールしているので
サブディレクトリにインストールします。
ディレクトリ名は「ecube」とします。
つまりURLがhttp://www.nigolf.info/eccube/になるようにします。

このディレクトリ内に解凍したファイルをFTPでアップロードします。
最初にdata,docs・・・といった
htmlディレクトリ以外のファイルをアップロードします。

次に同じ場所(階層)にhtmlディレクトリ内のファイル(.htaccess以外)をアップロードします。

4.パスの変更
htmlディレクトリのファイルの場所を変えたので
設定ファイルのパスを変える必要があります。
eccube内のdefine.phpの3行目を
define(“HTML2DATA_DIR”, “../data/”);
から
define(“HTML2DATA_DIR”, “./data/”);
に変更します。

5.インストール
http://www.nigolf.info/eccube/install/
にアクセスします。

項目に合わせて記述していきます。
適当に店名や管理ID,パスワードを入力する。
インストール画面

データベースの設定は予め作成しておいたDB名等を入力します。
私のロリポップのプランだとDBは一つしか作ることができません。
そのため、すでにWordPressをインストールしているデータベースにECCUBEのデータを保存するようにします。
ロリポップ管理画面のWEBツールデータベースの項目に
DB名やパスワードがあるので確認する。
接頭辞に関してはECCUBEは変更できない(?)かもしれないです。
ECCUBEはdtb_ と mtb_ の2つを使うのでWordPressの方がこれと違うのであれば問題ないです。
もし、かぶっている場合はちょっと自分では対応できないっす。

※複数DBを作成できるなら、別々に用意したほうがいいです。
アクセス(もしくはデータ量)が多くなるほど、DBの負荷が高くなりパフォーマンスが落ちる可能性が考えられます。
実際にはわかりませんが・・・

データベースはそのままインストールする。
初期化しないにチェックをいれるとエラーになります。
初期化と言ってもWordPressのデータは消えません。

これで完了です。

後は速やかに/install/index.phpのファイルを削除してください。
万が一アクセスされるとやばいので・・・