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

PerlとかPHPとかMySQLとか…がんばっても8割だ。
8月 26

SQLiteで文字列結合ってどうやるんだー!!!???
ってだいぶ悩んでやっと分かった!!!

「||」でつなげるらしい。。。

んなあほなっ!!!!!


「||」ってどうしても「または」を思い出すんですけど・・・。なんで「||」にしたんだろうか・・・。

8月 24

今日は前回に引き続きお友達のWEBデザイナーさんからの依頼で、プログラミングにおける「関数」とは何ぞやという話をしてくれということで書いてみます。

高卒以上のレベルの人でプログラム言語に慣れ親しんでない人が「関数」と聞くと、数学で習った「二次関数」とかの「関数」を思い出すと思います。
※「高卒レベルの人」でと誤解される書き方をしていました。申し訳ありません。正しくは上記の通り「高卒以上のレベルの人」です。

数学で習った「関数」は、ちょっと意味は似ているところがありますが、この際きれいさっぱり忘れたほうがいいです。ということで数学の関数は忘れて話をすすめます。

で、関数っていうのはプログラミング言語やプログラマーによって結構考え方や概念が異なりますので、BASIC(VBではない)やPerlで育ってきた僕の個人的な考えで書いていきます。

お友達デザイナーがActionScriptを勉強していて躓いたらしいですので、僕はASが書けないってことでJSで書いていきます。




まず、簡単なお話から。

Javascriptの入門向け命令辞典を読んでいて、たとえば、「特定の文字列をURLエンコードしたい」というときは以下のような命令を書けと書いてあることがあります。

var str = '文字列';
str = encodeURIComponent(str);
document.write( str );

これを実行すると、「%E6%96%87%E5%AD%97%E5%88%97」と表示されると思います。

encodeURIComponent()という命令を使うことで、「文字列」という文字列を簡単にURLエンコードできます。

実はこの「encodeURIComponent()」が「関数」です。




関数とは、ざっくりと簡単に言えば、決まった手順を一まとめにしておいて、再利用できるようにしたものです。

Javascriptの入門書などで「関数」と言えば、上記のような説明をした上で、

function 関数名( 引数1, 引数2... ){
    手順;
    return 返り値;
}

と書け。みたいなことが書いてあります。

まったくもって、間違いじゃないんですけど、その前に、自分で作らなくても、

Javascriptには最初から前述「encodeURIComponent()」のような便利な関数はたくさん用意されているんです。

たとえば他に
document.write()
alert()
confirm()
window.close()
などなどあります。

こうやって書いてみると、どうでしょうか?プログラミングの初心者でも、これまで書いたプログラムのコードの何割かは関数を使っている部分で埋められているのではないでしょうか?関数は現在の発展したプログラミングにおいては、とても有用なもので、プログラミング言語によって最初からたくさんの関数が用意されています。

前述の「function」を使った「自分で作る関数」は、最初から用意されている関数のほかに、決まった命令をまとめておいたり、それを再利用したりしたい時に作る関数で、一般的に「ユーザー定義関数」などと呼ばれます。言語が最初から用意している関数に対して、自分で作る関数だから「ユーザー定義関数」。分かりやすいネーミングです。はい。

※完全な低級言語やC言語のような低級に近い言語は関数は少なくなるかも。
※window.close()などはオブジェクトのメソッドなので厳密には「最初から用意された関数」ではない。
↑ここの※部分はお友達デザイナは無視したほうがいいですwwww



まず、関数の使いどころです。ここからは入門書を片手に読んでください。

前述の通り、関数は決まった手順をまとめておくもの、そしてそれを再利用できるようにしたものです。

料理で言うと、ダシとかスープみたいなものかな。前もって「一番ダシ」とか用意しておくことがあると思います。関数は、それに近いかな。

「引数」は、そこに醤油や塩などの追加調味料や、メインとなる食材など、目的とする料理に合わせて何かを追加してひとつの料理として完成させたり、また違うひとつの材料にしていったりして行くわけですね。材料を入れたりして加工したものが「返り値」に近いですかね。

では実例。まず関数を使わない例です。

例1

var str_1 = 250;
str_1 = Math.floor( str_1 * 1.05 );
alert( str_1 + '円です。' );

var str_2 = 500;
str_2 = Math.floor( str_2 * 1.05 );
alert( str_2 + '円です。' );

端数切捨てで消費税額を計算して、その結果をalert()するという内容ですね。

上記例の場合、2つの額に対して消費税計算をしていて、同じような処理を繰り返しています。
この場合同じパターンが2つですから、まだマシですけど、3つ4つ・・・となっていくとなんだかなぁとなります。

こういった決まったパターンがあるときに使うのが関数というわけですね。




では、実際に関数を使って書き直してみましょう。

関数を使うといっても、プログラム全体の設計によっていくつかの関数の実装が考えられます。
例1においてもそうです。




関数実装例パターン1

例1のプログラムを見て重複している部分は、
・変数に1.05をかける。
・1.05をかけた変数を小数点以下切り捨てる。
・この変数のあとに「円です」をつけてalert
という流れです。

ここを関数にします。

例2

//↓ここで関数定義!
function taxAndAlert( str ){
	str = Math.floor( str * 1.05 );
	alert( str + '円です。' );
}


//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );

var str_2 = 500;
taxAndAlert( str_2 );

こんな感じです。 例1と比べるとMath.floorなどの何回もあった面倒な手続き一式がまとめられています。ここが関数。実行文のところでは作った関数「taxAndAlert」を実行しているだけで、Math.floorを何度も書いたりなど面倒が少しラクになります。




関数には、手続きをまとめてラクにするだけではなくて、後々修正がラクになるという効果もあります。例1・2では消費税計算をしているわけですが、2009年8月現在では、そう遠くない未来に消費税率アップがされることが目に見えています。仮に消費税率が8%になったとすると、例1では「1.05」を「1.08」へ書き換える箇所が複数ありますが、例2ではそれが関数の中1箇所だけで済みます。これは大きなプログラムにとってはメンテ性の向上につながります。


関数実装例パターン2

さて、話は少し戻り、関数の実装パターンはいくつか考えられるということを書きました。次のパターンを考えてみましょう。

例3

//↓ここで関数定義!
function taxAndReturn( str ){
	str = Math.floor( str * 1.05 );
	return str;
}

//↓ここから実行文
var str_1 = 250;
alert( taxAndReturn( str_1 ) );

var str_2 = 500;
alert( taxAndReturn( str_2 ) );

↑ 例2と比べてみると、関数の中でalertを実行していないことが分かります。

ぱっと見、「あれ?繰り返しやっていることをなぜ関数にしないのだ」と思うかもしれません。確かに例1を関数で書き換えるのであれば、例2が最もいい例なのかもしれません。しかし、消費税計算というのは非常によく使う計算ではありますが、alertを使って表示するということはそれほど多くありません。

関数には返り値(かえりち)というものが用意されていて、返り値を使うことで、関数の中で計算させた結果を、元のプログラムに戻してやることができます。元のプログラムはその返り値を使って、好きなことができるわけですね。たとえば、返り値を積算していけば、合計値を計算することができたりします。返り値をうまくつかうことで、関数の機能をシンプルにして、関数の再利用性をあげることもできるのです。

このように関数は、すべてをひとつにまとめるのではなく、本当に繰り返しが多く、まとめるべき手続きをまとめるのも、関数の利用価値を高めるポイントです。



関数実装パターン3

でも、やっぱりこの際、alertも関数でやっちゃいたいよ!と思うこともありますよね。
次の例はどうでしょうか。

例4

//↓ここで関数定義!
function taxAndReturn( str ){
	str = Math.floor( str * 1.05 );
	return str;
}
function taxAndAlert( str ){
	alert( taxAndReturn( str ) );
}

//↓ここから実行文
var str_1 = 250;
taxAndAlert( str_1 );

var str_2 = 500;
taxAndAlert( str_2 );

例4では、関数を二つ作りました。関数の中から関数を呼び出しています。そう、消費税計算をする関数と、その関数を呼び出してalertする関数の二つを作ったわけです。こうすれば、消費税計算に限定することで利用価値をあげた関数の価値をそのままに、alertを呼び出すという手続きも再利用できるようになったわけです。




かなーりざっくりした話でしたが、以上が、関数の使いどころです。

・繰り返しを関数にすることで、プログラムの可読性があがる。何度も同じことを書かなくていい。
・繰り返しを関数にすることで、プログラムを後日改修するときにラクになる。

というところがポイントで、

・関数はプログラム全体を見渡して、関数の内容はシンプルに。
・関数をいくつかつくり、関数と関数を関連させていくことでさらに便利に。

ここが関数の運用・設計において重要な点です。

個人的には、関数は、プログラミングを嫌いにならないためのひとつの道具でもあると思います。何度も同じことして「うがぁっ!!!」みたいなストレスが一番人間にとってよくないと思うからです。関数。頑張って覚えましょう。

8月 23

OSCnagoyaに行きました。

お目当ては敬愛してやまないプログラミング言語「なでしこ」の出展となでしこの作者くじら飛行机さんです。

だったんですが、仕事で少しトラブって出発が遅れて、名市大についたのが17時少し前。
なでしこブースは片付けられていました・・・ガーン…orz
WEBの仕事にシステムやサーバトラブルはつきものですが、なぜ今日に限って・・・。




代わりというわけではないですが、収穫がありました。MagentoというEC用CMSのお話を聞くことができました。
担当されていたのがこちらの方です。
ほとんどマンツーマンで詳しく教えていただけました。
Magentoの存在は以前より知っていましたが、試す機会もなかなかなく本当に頭の片隅にいただけでしたが、今回触ってみようと思いました。

【良さそうなところ】
・PHP + MySQLで動作が良さそう。
・MySQL利用にも関わらず、かなりの商品点数を取り扱うECサイトでの運用実績がある。
・海外産のため世界中で利用実績がありバグつぶしは他のオープン製品より優秀。

【懸念される点】
・PHPのオプション拡張にかなり依存しているので、レンタルサーバーの場合、サービスを選ぶ。
・デザインに関して、テンプレートエンジンを利用せず生PHPで組み立てるため、デザイン部門とシステム部門が別になっている企業では、運用の検討が必要。(良くも悪くもある)
・海外製ECシステムによくある、海外商習慣と日本の商習慣の違いによる機能の過不足。

今のところこんなイメージを持っています。あとは、どこまで自分でPHPを使ってカスタマイズがしやすいかもポイントですので、ここは実際に自分で動かして確認したいと思います。




この後、別の要件があり、OCSには30分もいることができませんでした(T_T)
また開催する機会があれば、なでしこのブースを訪れたいと思います。

20090822-1

久しぶりに大学という場所に足を踏み入れました。キャンパスにはバンドサークルのドラムの音が響き渡っていて、大学時代バンドサークルに所属していた私は少しノスタルジーな感じになりました。

8月 22

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

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

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

php_flag session.auto_start 1

を追記したら直った。

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

8月 18

近頃はトランザクションを使いたいので、データベースエンジンの選択はもっぱらSQLiteかPostgreSQL。(別にMySQLがトランザクションないわけじゃないけど)
そんな話はまぁどうでもよくて。
久しぶりにPHPでMySQL使ったら文字化け起こしたので、
「SET NAMES」
を使おうとしたら、どうもPHPからSET NAMESを使うのはご法度っぽいΣ( ̄□ ̄;

こちらのサイトに良くまとめられている。

なるほど。

早速対策しなくちゃ。

要するに、MySQLが悪いわけじゃなくて、PHPがアレなのねと。。。

ちょっと前には当たり前のノウハウも、今やバッドノウハウ。
毎日勉強しないと置いていかれるわい。

8月 14
switchな話
icon1 admin | icon2 Javascript | icon4 08 14th, 2009| icon3No Comments »

お友達のWEBデザイナーが switch文の使いどころが??みたいな話をしてました。

私は、職業プログラミングをPerlからはじめたのですが、Perlにはswitchがない。その影響からか他の言語を書くときもめったにswitchは使いません。要するに使わなくても困りません!これ結論。(笑

まぁそれじゃだめなので、色々例示してみましょう。

意味としてはelse ifの構文とほとんど一緒ではあるのですが。。。。以下JSで書きます。



まず、基本。

例1:

var i = 1;
if( i == 0 ){
    document.write( '0だよ!' );
}
else if( i == 1 ){
    document.write( '1だよ!' );
}
else if( i == 2 ){
    document.write( '2だよ!' );
}
else{
    document.write( '0から2以外だよ!' );
}

例2:

var i = 1;
switch( i ){

    case 0 :
        document.write( '0だよ!' );
        break;

    case 1 :
        document.write( '1だよ!' );
        break;

    case 2 :
        document.write( '2だよ!' );
        break;

    default :
        document.write( '0から2以外だよ!' );

}

例2は例1をswitch文で書き換えたものです。

結果はどちらも「1だよ!」と表示されます。

switchは基本的には、判定する変数がひとつの複数条件分岐に使います。



switch文につき物の「break;」。

「break」はブロックを抜けろという意味の命令文。ブロックとはものすごくざっくり言うと「{」と「}」に囲まれた部分。switch構文の中に書けば、switch構文のところを抜けろという意味になります。

これを踏まえて、以下を。

例3:

var i = 1;
switch( i ){

    case 0 :
        document.write( '0だよ!' );

    case 1 :
        document.write( '1だよ!' );

    case 2 :
        document.write( '2だよ!' );

    default :
        document.write( '0から2以外だよ!' );

}

例3は例2から「break;」を取り払った内容です。

これを実行すると結果出力は「1だよ2だよ0から2以外だよ!」になるはずです。

ここがswitch文の特徴のひとつです。
else if構文では、条件にあったところだけを実行して、その後のブロックは無視されます。
switch構文では、条件にあったところ以降(breakが出てくるまで)すべてのステートメントを実行してしまいます。



例3を踏まえて、以下を。

例4:

var i = 1;
switch( i ){

    case 0 :
    case 1 :
        document.write( '0か1だよ!' );
        break;

    case 2 :
        document.write( '2だよ!' );
        break;

    default :
        document.write( '0から2以外だよ!' );

}

この場合、結果は「0か1だよ!」になるはず。まぁ当たり前。で「var i = 1;」を「var i = 0;」にしても結果は同じく「0か1だよ!」になります。
switch構文は、条件に合致したところ以下、break;が出てくるまで実行し続けます。
上記の例なら、「iが0だったとき」にbreakが用意されていないので、その下の「iが1だったとき」のステートメントが実行され、その中にbreakがあるので、そこでswitch文を抜けます。

つまり意味としては
「iが0だったとき」または「iが1だったとき」
という意味になるんですね。

例5

var i = 0;
if( (i == 0) || (i == 1) ){
    document.write( '0か1だよ!' );
}
else if( i == 2 ){
    document.write( '2だよ!' );
}
else{
    document.write( '0から2以外だよ!' );
}

例4をif/else if構文で書き換えるとこんな感じ。「または」の意味を「||」でつないでいるのが分かります。例5の場合、「または」の条件が2つなのでまだマシですけど、これが3つ4つになると鬱陶しいですよね?

要するに可読性が上がるというわけですな。(案外これ重要)
どこのサイトか忘れましたけど、JSでswitch使ったときと、else ifを使ったときでどっちが早いかということを実験してたところがありました。switch構文を使ったほうが早いということだったのは覚えています。




ちなみに!逆転の発想でこんなこともできたり・・・。

var array = new Array();
array[0] = false;
array[1] = false;
array[2] = true;
array[3] = false;
array[4] = false;

switch( true ){

    case array[0]:
        document.write( '0がTRUE!' );
        break;

    case array[1]:
        document.write( '1がTRUE!' );
        break;

    case array[2]:
        document.write( '2がTRUE!' );
        break;

    case array[3]:
        document.write( '3がTRUE!' );
        break;

    case array[4]:
        document.write( '4がTRUE!' );
        break;

    default:
        document.write( 'どれもTRUEじゃなかった(T_T)' );
}

条件にtrueを渡しておいて、caseに出てくる変数のどれがtrueかを判定する。
上記例の場合は、true|falseですが、数値とか文字列もいけるはず。

多少パフォーマンスを犠牲にしてますが、可読性はあがるのでは。と。。。




まとめ!

あまり使いどころの説明にはならなかったなこの記事・・・。反省。

8月 10

WCAN 2009 SUMMERなるイベントにいってきました。

レポ書くと2,000円分のamazonクーポンがバックというムフフな企画があるらしいので便乗で(笑

WCANへの参戦は、今回で4回目だったかな?今回はうちのスタッフとお取引のある印刷会社さんのシステム担当さんを引き連れ3人で参戦でございます。


SESSION(1) CMS導入のメリットを探る。

CMS選定のポイントに関するお話。「できること」より「制約」に注目せよ!というお話だった。確かにそうかも。「何でもできます」って一言に謳ってるCMSが多いのですが、向き不向きがあるのも事実。制約に注視したほうが、選定がラクかもしれない。
データの活用(出力とか)もCMSの重要な要素ということもおっしゃっていた。これはプログラマーを自称する私にとっては非常にグっとくる話だ。CMSに限らず作れたらおしまいっていう案件がおおいので、それじゃぁなぁと。。。


SESSION(2) Lightning Talks
5分の短いお話の詰め合わせ。全部で4組。

1:WPをCMSとして使う際の向き不向きについてお話。このブログもWPでできてますが、使ってみて思うのはやっぱり「ブログツール」なんですよね、WPって。なので、WPをCMSとして使う場合のヒントになりました。

2:XOOPSに関して。正直、「いまさらXOOPSかよ!?」って思ってしまうくらい古参のCMSです。2004年ごろ私も使っていて、2005年ごろには、出力HTMLがアレだとか、プラグインの設計がアレだとか騒がれだし、ここ最近は利用を避けていたのですが、コアの再設計がされたりなど、ずいぶん改善している模様。ちょっと見直したいと思います。

3:Nucleusが生き残っているわけ。というポジディブにもネガティブにもとれるタイトルの話。Nucleusという物自体は知ってましたが、あまりコミュニティが活発ではなさそうだったので利用をさけていたのですが、コミュが死んでいるのではなく、コミュが緩いそうなんです(^-^; 話を聞く限り、思ったよりよさそうなCMSでした。

4:Concrete5について。これは以前使ったことがあります。まだオープンソースになったばかりの頃、日本語版がなかった頃です。オープンソースに精通した中津川篤司さんのブログMoonGiftを拝見し、衝撃を受け、使ってみて衝撃を受け。それくらい非常に良くできたCMSです。知らないうちに日本語版ができてました(^-^;


SESSION(3)クライアントから見た a-blog cms

愛知を代表、いや日本を代表するブログツール「a-blog」の遺伝子を引き継ぐCMS「a-blog CMS」についてのお話。
ポイント
・更新画面がエンドユーザーが見る見た目からできる
・更新画面にWYSIWYGがない
後者は少し衝撃だったが、データをキレイに分割するという意味では、確かにWYSIWYGじゃないほうがいい。
「データとしてのコンテンツをマネージメントするシステム」というスタンスでCMS選びをするときは選択肢の筆頭に上げていいCMSだ。

あと、a-blogCMS専用のDWスニペットが同梱されていて、制作側の作業にも考慮されている点もポイント。いかにも日本人的なCMSのように思った。


SESSION(4)「bingo!CMS」で“ひらめきをドラッグ&ドロップ”

WCAN2009SUMMERの開催をきっかけに知ったCMS。D&Dでブロック配置をしていくという、ありそうでなかったCMS。それが「bingo!CMS」。構築の説明についてお話いただけた。
勉強いらずというコンセプトだが、他のCMSとずいぶん趣が違うので、bingo!用の勉強は必要。その点は気になるところだが、慣れてしまえば確かにこれ以上ないインターフェイスだ。
(機能が制限されたGPL版はあるが)無料のライセンスでないだけに、もう少し、どういった場面で強みが発揮できるのか、話していただけると、よかったなぁと。。。


SESSION(5)SOY CMSのご紹介。こんなときに使ってください!

SOY CMSについてのお話。かなり優秀なCMSだということは公開当初から有名で、私も公開のニュースが出たとき、ちょっと使ってみた。現行バージョンはさらに進んでいた。
・とにかくテンプレートエンジンの設計がすばらしい。
・最も「汎用」という言葉に近いCMSかも?
ここがポイント。

また、SOYと連携できる半独立したアプリケーション「SOY APP」という構想がプログラマー的に最強!

おはなししていただいた、株式会社日本情報化農業研究所の古荘さんが、はおり袴ってとこも最強!


SESSION(6) MTについて

ブログの定番ソフト「MovableType」。ブログの標準仕様そのものといっていいMTの開発元シックスアパートのスタッフさん自らの参戦。実に神々しい。いつの間にかMTも5までバージョンアップ。5ではCMSとしての側面がかなり押し出されて、サイト管理ソフトウェアとして、ようやく一歩を踏み出した感じ。好敵手のWPとの棲み分けが進みそう。
CMSはブログを包括する言葉だが、ここを分けるラインははっきりしていたほうがいいと思っている。ちょっと、その辺で今後MTが迷走したり、ゴチャっとしないか不安。もともと高機能ゆえ導入の敷居は高かったので、余計に。もう少し見守りたい。


まとめ。

個人的にConrete5は最強だよといっておきます。英語版の頃でおもったのだから、日本語になればさらにオススメですよ。

で、今回の収穫はやっぱりSOY CMS。現在ある悩みどころをほとんど解消してくれそう。
サードパーティとしてSOY APPの開発にも参入します。断言。

それと、以前よりオープンなものは金銭的コストは低いが、開発・導入コストは高くなる可能性があるという指摘があり、オープンなものとプロプライエタリなもの両方のお話がありましたが、やはり、オープンなものは、(時間的な)導入コストは高いなと。というのは、やはりオープンなCMSはドキュメントなりAPIなりがしっかり整備されていない印象は否めませんでした。前述のとおりSOY APPの開発に参入を希望し、開発も許可いただきましたが、APIこそありますが、ドキュメントはなく、今公開されているSOY APPを解析して作ってくれということでした。

機能面でなく、オープンかプロプライエタリかも選択の重要な要素のひとつであろうかと思います。

8月 10

完全に個人的な日記はじめました。


こちらからどうぞ

8月 7

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}-->

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

8月 6

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。

 ANZXCvg