伊藤清徳の垂直落下式ムーンサルトプレス

PerlとかPHPとかMySQLとか...がんばっても8割だ。

Category: EC-CUBE

不正なページ移動です

EC-CUBEで特に理由もなく「不正なページ移動です」と表示される問題が発生。

動作を見ていたら、どうもセッション周りのエラーっぽい。でIEだけっぽい。
これだからIEは!!!

ググってみるとあちこちで困っているよう。
対策方法もあれこれあったけど、うちの環境の場合は、.htaccessに

php_flag session.auto_start 1

を追記したら直った。

EC-CUBEのカスタマイズガイド本を見たら、
「バグがあり2.4以降なら直ってる」とのこと。
まぁでも古いバージョンでもPHPの設定を変えたら直ったってことは、
確かにEC-CUBE自体のバグでもあるかもしれないのだけど、
PHPがアレってことでもある・・・よね。

EC-CUBEの商品ページ/一覧ページのタイトルを変える

EC-CUBEはデフォルトで、
「店名/ページのタイトル」というタイトルが吐き出されるようになっています。

これではSEO的に???なので、変えたい。

一番基本的なやり方は公式フォーラムに書かれています。

が、なんか個人的に自由度が低くてイヤだ。
テンプレートだけでどうにかしたい(>_<)

ってことで、人によってはそんな実装ダメだと怒られるかもしれない、
力技のタイトル変更方法です。

site_frame.tplを編集します。

<title><!--{$arrSiteInfo.shop_name|escape}-->/<!--{$tpl_title|escape}--></title>

↑ここがタイトルを定義している記述です。

では、力技を実装しましょう。

まず、テンプレートファイルの頭にでも、

<!--{php}-->
$this->assign( 'selfFile', basename( $_SERVER['PHP_SELF' ] ) );
<!--{/php}-->

と書きます。これで、テンプレートファイル変数「selfFile」に今実行されているスクリプトのファイル名が代入されます。(この部分はPHPを実行しているので、「あまりよくない」と指摘される部分です。キレイにMVC分離をしたい人は、上記のロジックをSC_View.phpにでも書いておくと良いかと思います。)

で、上記のタイトル定義部分を

<!--{if $selfFile=='detail.php'}-->
商品詳細ページのタイトル
<!--{elseif $selfFile=='list.php'}-->
一覧ページのタイトル
<!--{else}-->
そのほかのページのタイトル <!--{/if}-->

このように変更すれば、テンプレートで、ページごとのタイトルの切替ができます。もちろん、テンプレート変数がそのまま利用できるので…

<!--{if $selfFile=='detail.php'}-->
<!--{$arrProduct.name|escape}--> <!--{$arrSiteInfo.shop_name|escape}-->
<!--{elseif $selfFile=='list.php'}-->
<!--{$tpl_subtitle}--> <!--{$arrSiteInfo.shop_name|escape}-->
<!--{else}-->
<!--{$arrSiteInfo.shop_name|escape}-->/<!--{$tpl_title|escape}-->
<!--{/if}-->

上記のように実装すれば、、
商品ページのタイトル => 「商品名 店名」
一覧ページのタイトル => 「カテゴリ名 店名」
そのほかのページ => 「店名/ページタイトル」(デフォルトの状態)
とタイトルを変えることができます。

EC-CUBEでメルマガの送信者名を変更

EC-CUBEのメールマガジンの送信元の名前は、
会社名がデフォルトで入力されます。

個人事業主とか、会社名と店名がちがうときとか不便(>_<)

ってことで、メルマガの送信元の名前を店名に変更するメモ。

LC_Page_Admin_Mail_Sendmail.php

のprocess()を

LC_Page_Admin_Mail_Sendmail_Ex.php

へ継承。

まぁここまではEC-CUBEの改造の基本なので言うまでもなし。

継承したメソッドの中で、
$this->objMail->setItem();
を実行しているところがあるので、
そこの
$objSite->data["company_name"]
という引数を
$objSite->data["shop_name"]
に変更すればOK。

EC-CUBEをPostgresqlにするときの注意。

先日までMySQLでEC-CUBEサイトを構築中。

だったのだけれど、商品数1,000を越えたあたりでサイトが激重に。
調べたらMySQLでEC-CUBEつかうのはアレなんですね・・・。

EC-CUBEが使っているMySQL用のクエリがダメダメみたい。
一つ一つSQL文を書き直せばいいのだろうけれど、
そんなのあまりにムダな作業だ!!!

ってことで、PostgreSQLに変更し、
EC-CUBEを意気揚々と再インストールっ♪

でも、接続できないみたいなことを言ってくる?

はぁ?


MySQLにイージーさに慣れすぎて色々忘れてた。
ポスグレってpostgresql.confとpg_hba.confの設定が必須だっけ?
でググったらありましたよ。

http://www.dotconf.com/modules/dev/content0001.html

弊社はクララオンラインさんのPlesk導入サーバーを愛用させてもらっていますが、こちらの記事も同様のサーバー構成(OSは違いますが)のようですから、このままやれば良いだろうーーー。という希望的観測で今日はここまで。眠い。なんか頭イタイ。深夜0時。

ネタ元の記事の方。多謝です。

成功後、この記事に追記します。

【追記&結論】

あれこれ設定を変えてもうまくいかない(>_<)
と12時間近く悩んだあと発見。

クララオンラインのサーバーでPHP→ポスグレ接続するときは、
ホスト名を指定すると接続できません(>_<)

で、EC-CUBEのデータベース接続はどうなってるかと言うと、
PEAR_DBを使ってポスグレやらMySQLに接続をしてますが、
デフォルトの接続文字列が、

pgsql://username:password@hostname:port/dbname

という書式が使われています。ホスト名が見事に設定されています。
ってことで、これを

pgsql://username:password@unix()/dbname

となるように、install.phpとSC_Initial.phpを変更すると接続できるようになりました。
install.phpの方は書き換えなければならない箇所が複数あるので、
見落とさないように注意。

なぜ、このようにしなければならないのか・・・。
まさかこんなところで丸半日悩むとは思いもよりませんでした。