sourcehttp://tcpschool.com/php/php_class_basicクラス(class)とオブジェクト(object)オブジェクト(object)とは、実生活では、我々が認識することができるもので理解することができます。これらのオブジェクトの状態(state)と行動(behavior)は、それぞれのプロパティ(property)とメソッド(method)に実装されます。オブジェクト(object)を作り出すための枠組みや設計図のような概念がまさにクラス(class)です。PHPでは、クラスを持っているオブジェクトを作成して使用します。次の例では、Carクラスのオブジェクト(object)を示す例です。私の車(myCar)自動車インスタンスは、すべて上記のようなプロパティとメソッドを持つでしょう。各プロパティの値はインスタンスにすべて異なります。プログラミングでインスタンス(instance)とは、メモリ上に作成されたオブジェクトを意味します。Programming)オブジェクト指向プログラミングでは、すべてのデータをオブジェクト(object)として扱われ、オブジェクトがすぐにプログラミングの中心となります。これにより、コードの管理が容易になり、より少ない労力でも簡単にコードを変更すると、維持管理することができます。オブジェクト指向プログラミングが持つ特徴は次のとおりです。hiding)継承性(inheritance)ポリモーフィズム(polymorphism)カプセル化は、すでに作成されたコードを変更せずに再使用することを目的とします。情報秘匿を介してオブジェクトの実際の実装内容を外部で知られないよう隠し、オブジェクトのインタフェースを介してのみデータにアクセスできるようにして、セキュリティを強化します。継承は、クラス間の階層関係を作って、論理的かつ体系的に他のクラスの機能とデータを使用できるようになります。ポリモーフィズムを介して一つの変数や関数の名前が、状況に応じて別の意味で解釈されることができるようになります。TheVOS2019.10.03A:https://thevos.jp/Manual/37430クラス(class)とオブジェクト(object)オブジェクト(object)とは、実生活では、我々が認識することができるもので理解することができます。これらのオブジェクトの状態(state)と行動(behavior)は、それぞれのプロパティ(property)とメソッド(method)に実装されます。オブジェクト(object)を作り出すための枠組みや設計図のような概念がまさにクラス(class)です。PHPでは、クラスを持っているオブジェクトを作成して使用します。次の例では、Carクラスのオブジェクト(object)を示す例です。私の車(myCar)自動車インスタンスは、すべて上記のようなプロパティとメソッドを持つでしょう。各プロパティの値はインスタンスにすべて異なります。プログラミングでインスタンス(instance)とは、メモリ上に作成されたオブジェクトを意味します。Programming)オブジェクト指向プログラミングでは、すべてのデータをオブジェクト(object)として扱われ、オブジェクトがすぐにプログラミングの中心となります。これにより、コードの管理が容易になり、より少ない労力でも簡単にコードを変更すると、維持管理することができます。オブジェクト指向プログラミングが持つ特徴は次のとおりです。hiding)継承性(inheritance)ポリモーフィズム(polymorphism)カプセル化は、すでに作成されたコードを変更せずに再使用することを目的とします。情報秘匿を介してオブジェクトの実際の実装内容を外部で知られないよう隠し、オブジェクトのインタフェースを介してのみデータにアクセスできるようにして、セキュリティを強化します。継承は、クラス間の階層関係を作って、論理的かつ体系的に他のクラスの機能とデータを使用できるようになります。ポリモーフィズムを介して一つの変数や関数の名前が、状況に応じて別の意味で解釈されることができるようになります。TheVOS2019.10.03A:https://thevos.jp/Manual/37404今お仕事で関わっているEC-CUBEですが、ネット上にはまだまだ情報が少ないです。プラグイン作成でオリジナルフォームを作っても、SC_FormParamクラスを使って、どうやってチェックしたらいいのか調べてもなかなか出て来ません。そこで私が独自で調べた中から、少しづつ情報提供していきたいと思います。※:EC-CUBEのバージョンは2.12.2のものをベースにしています。SC_FormParamの基本的な使い方SC_FormParamクラスを使うには、拡張先であるSC_FormParam_Exクラスをインスタンス化して利用します。ここではPOSTされたデータを設定してみましょう。SC_FormParam_Ex();$objFormParam->setParam($_POST);次に、内容の検証ルールを追加します。ここでは例として名前(性、名)とメールアドレスを必須入力にし、メールアドレスはちゃんとした形式になっているもののみ受け入れるようにしてみます。array('EMAIL_CHECK'));後半に挙げる「オプション」が必要な検証ルールについては、次のようにaddParam()の3番目の引数に設定します。array('MAX_LENGTH_CHECK'));そして最後に検証作業。エラーがあると$arrErr変数にエラーが配列で格納されます。$objFormParam->checkError();検証ルールの最後のパラメーターにある配列型の文字のところがポイントなんですけど、ここに様々なルールを追加していくことでいろんな検証ルールを作ることができます。以下に検証ルール一覧を載せてみたので実際に組み合わせて試してみてください。$objFormParam->addParam()の4番目の引数は入力値をmb_convert_kana()で変換するための変換オプション文字列を指定します。変換オプションを指定した場合は、checkError()を実行する前に「$objFormParam->convParam()」を実行する必要があるので注意してください。URLを正規表現で判定する。IPアドレスでない場合エラーを返す。DOWN_SAVE_REALDIR内に入力パスのファイルが見つからなければエラーを返すお役に立てば幸いです。TheVOS2019.09.28A:https://thevos.jp/Manual/35294本ガイドラインはEC-CUBEの単体テストをPHPUnitを使って行う上でのガイドラインを株式会社SHIFT様(http://www.shiftinc.jp/)のご協力によりまとめたものとなります。テストを含めたフォルダ構成テストコードを含んだフォルダ構成は以下のようになります。tests以下には、テストコード本体の他にテスト用のユーティリティや設定ファイル等が含まれます。テストやインスペクションを行うための設定ファイルです。PHPUnitで使う各種設定を記載したファイルです。SVN上にはphpunit.xml.baseというファイルがありますが、ローカルではこれをコピーしてphpunit.xmlを作成してください。PHP_CodeSniffer(インスペクションツール)用の設定ファイルです。テストに必要なファイルをインクルードするためのクラスです。SVN上にはrequire.php.baseというファイルがありますが、ローカルではこれをコピーしてrequire.phpを作成してください。テスト用のクラスを格納するディレクトリです。他のテストクラスの基底となるクラスです。テスト用に実装を入れ替えているクラスを格納するディレクトリです。テスト用のユーティリティを格納するディレクトリです。テストコードはそれぞれ対応するソースコードと同じ階層に保存します。実行の準備(初回のみ)単体テストを実行するためには、ローカルの環境にPHPUnitをインストールしておく必要があります。インクルードパス等をローカルの環境に合わせて書き換えるため、SVNに含まれているファイルをコピーしてローカル用の設定ファイルを作成する必要があります。手順は下記の通りです。tests/phpunit.xml.baseをコピーしてtests/phpunit.xmlを作成します。<filter><blacklist>タグ以下の「/usr/local/lib」の部分を、ローカルで使われる各種ライブラリが含まれているパスと置換します。この設定はどのファイルをテストのカバレッジ測定の対象にするかを設定するためのものなので、設定をし直さなくても単体テスト自体は問題なく動作します。tests/require.php.baseをコピーしてtests/require.phpを作成します。PHPUnitのモジュールが使用できるように、インクルードパスを設定します。tests/phpunit.xml、tests/require.phpはsvn:ignoreに設定されているため、自由に書き換えてもコミットはされません。全体のテストを行う場合には、phingのtestターゲットを実行します。テストの内容はbuild.xmlの中に定義されているため、実際にはphpunitコマンドが発行されます。testテストが完了すると、結果がreportsディレクトリ以下に出力されます。カバレッジ測定結果のHTML個々のテストを行う場合には、テスト対象のディレクトリを指定してphpunitコマンドを実行します。標準出力ですぐにテスト結果を確認したい場合にはこちらのやり方のほうが良いでしょう。tests/class/pages下の例のようにディレクトリを指定した場合には、ディレクトリ以下にあるテストケースが実行されます。--colorsオプションを付けると、結果が色付きで表示され見やすくなります。tests/class/pages/LC_Page/LC_Page_InitTest.phpカバレッジを測定したい場合には、専用のオプションを指定します。テストクラスの構成テストクラスは、基本的にtests/class/Common_TestCase.phpを継承して作成します。Common_TestCaseの中には、次節で述べるAssertionを一度に行うverify()関数やテストの開始時と終了時にDBの準備・後片付けを行うsetUp()/tearDown()関数が含まれています。個々のテストクラスでは、Common_TestCaseのsetUp()/tearDown()の処理に必要な処理を追加して使います。テストに使用するユーティリティクラスもCommon_TestCaseでまとめてrequireします。Assertion(期待値の確認)の方法PHPUnitにはassertEquals()、assertTrue()など様々な期待値の確認用funcitonが存在します。これらを細かく使用してテストの期待値を確認することもできますが、複数のasseritionを並べると最初の方で失敗した場合に後のassertionが実行されず、全体の修正までに時間がかかってしまう場合があります。これを防ぐため、基本的に期待値と実際の結果はarrayに格納して一度でassertできるようにします。それぞれの値が1つずつの場合はarrayに入れなくても構いません。原則として、1つのテストfunctionで1つの条件をテストします。$this->verify();}「悪い例」の書き方の場合、ケースの中身を確認しないと・何種類のテストを行っているのかが把握できない・どんな観点でテストを行っているのかが把握できないといった問題点があります。1funciton1条件の前提を守った上で、なるべく条件分岐を網羅するようにテストを作成していきます。テストfunctionの命名規則テストfunctionの名称は、テストの内容を分かりやすくするためtest【function名】_【条件】_【期待する結果】()という形式で統一します。命名規則を統一することで可読性が上がり、テストコードを書いた本人でなくてもJenkinsのテストレポートを見るとどのようなテストが行われているかが一目でわかります。条件・期待する結果は日本語で記載することでさらに分かりやすくすることができます。テストクラスの分け方テストクラスはテスト対象のfunction毎に1つずつ分けて作成します。後述する「定数による条件分岐」をテストする場合には条件毎にクラスを分ける必要があるためさらに細分化されます。【対象クラス】_【対象function】Test.phpという名称にします。【対象クラス】_【対象function】_【条件】Test.phpとします。例LC_Page_Products_Detail_ActionTest.phpLC_Page_Products_Detail_Action_HasErrorTest.php条件によってファイル名を分ける場合には、ファイル名は日本語を避けて定義するようにしてください。定数による条件分岐defineを使って定義されている定数は、テスト中に自由に上書きすることができません。そこで、定数の値によって条件が分岐する場合は定数の値ごとにテストコードのファイルを分割します。このテスト専用の定数の設定。AUTH_TYPE=PLAINであることを想定した実際のテストコード}このようにCommon_TestCaseより先に指定したい定数を定義することで、このテストクラスに限定した値を定義することができます。exitする箇所のテストPHPUnitでテストを行う際には実際にphpのプログラムを走らせることになりますが、プログラム中にexitする箇所があるとそこでPHPUnit自体も終了してしまうため、有効なテスト結果を得ることができません。EC-CUBEの場合は、pages以下のクラスでSC_Response_Ex::sendRedirect()やSC_Response_Ex::actionExit()を呼んでいる箇所がそれにあたります。このような部分をきちんとテストするために、テスト実施時はSC_Response_Exの実装を切り替えてexitしないようにします。実装を切り替えた後のクラスはtests/class/replace以下に存在します。このクラスをCommon_TestCaseから呼び出すことにより、テスト時の実装を切り替えます。actionExit()呼び出しを書き換えてexit()させない例です。exit()したかどうかをチェックします。functionを「単体」でテストするfunctionの中でさらにfunctionが呼ばれている場合、いちばん外側のfunctionをそのまま実行すると中の分岐が多すぎてテストしきれない場合があります。そのような場合は、内側のfunctionの実装をモックに切り替えて欲しい値を自由に返すようにし、外側のfunctionだけをテストするようにします。}}この例はそれほど分岐が複雑ではありませんが、内側の関数fuga()の返り値がランダムなのでテストで要求する値を返却させるためにオーバーライドしています。ユーティリティクラスを使ってデータ準備を効率化するテストで常に同じ結果を得られるようにするには、テスト実行のたびにDBの内容を期待値に合わせてリセットする必要があります。そのため、EC-CUBEのユーティリティであるSC_Queryクラスを使ってsetUp()の中でデータの準備を行い、tearDown()でロールバックを行います。}}よく使うデータ定義はtests/class/util以下のユーティリティクラスから取得できるようにしておき、データの再利用性を高めます。ユーティリティクラスを使って端末の種類を設定する端末の種類がPC・モバイル・スマートフォンのいずれになっているかによって条件が分岐する場合は、テスト専用のユーティリティを使用して擬似的に端末の種別を設定します。ユーティリティはtests/class/test/util/User_Utils.phpに定義されています。端末種別をテストケースから自由に設定する例です。ユーティリティクラスを使ってログイン状態を設定するユーザがログインしているかどうかによって処理が分岐する場合は、セッションの情報とDBの値を書き換えることによりテストで要求する分岐を実現します。情報を書き換えるfunctionは、端末種別設定と同じくtests/class/test/util/User_Utils.php内で定義されています。ログイン状態をテストケースから自由に切り替える例です。かわりにタイムゾーン処理用の新しい関数を使用します。意図する場合、Prefix「lf」を省略できる。付加がない場合、「lf」相当とみなす。意図する場合、Prefix「sf」を省略できない。意図するメソッドの場合、Prefix「sf」を省略できる。付加がない場合、「sf」相当とみなす。意図する場合、Prefix「lf」を省略できない。例objクラス変数(オブジェクト)$objQueryarr配列$arrCustmerstplテンプレート変数(リテラル)$this->tpl_csv_id定数名すべて大文字で宣言する.区切り文字としてアンダースコア(_)を使用する.パスに関わるもの(パラメータを含む)は、下記を適用する。相対パス先頭に「/」を含まない。同一の場合、空文字)命名に改善余地あり。現在は利用箇所が無いが、今後利用する必要も考えられるので再考していきたい。(サーバの)ファイルシステム上のディレクトリの絶対パス先頭は「/」。上記に該当しない断片的なディレクトリ情報。先頭に「/」を含まない。上記に該当しない断片的なファイル情報。上記に該当しないもの。上記の複数に該当するもの。3.Xでデフォルトでtitle部分に表示されるものを任意で削除・変更したり、あらかじめ用意されているページのページ名(テンプレート名)を任意のものに変更する方法です。3.0.10で動作確認したもので、デフォルトのテンプレートを使っている想定になります。キャッシュ管理」にある「キャッシュクリア」ボタンを押して再度確認してみてください。TOPページ」という表示になっています。これはこれで今見てるのがTOPページだとわかりやすいのですが、個人的にはわざわざTOPページという表記は必要ないと思うので消してみます。デフォルトテンプレートではtitle部分を表示している記述はdefault_frame.twigというファイルになるので、その中にある下記のような記述(27行目辺り)を探します。%}</title>上記記述を見つけたら、ここに条件分岐を追記していきます。具体的にはtitleの中にTOPページの場合にという条件文を記述(コードハイライト部分)し、TOPページにはショップ名のみを表示させ、その他のページにはデフォルトで使われているショップ名とページ名が表示されるようにします。%}</title>※インデントと改行はソースがわかりやすいように入れているだけなので、必要なければ取り除いて問題ないです。上記変更後にページを確認(必要であればキャッシュクリアをしてから)すると、TOPページのtitleはショップ名のみが表示されているのを確認でき、他のページに関してはこれまで通りショップ名とページ名が表示されているのを確認できます。デフォルトのページ名を変更するこれは自分がやり方を知らないだけの可能性もありますが、EC-CUBEは新たに自分で作成したページは任意のページ名をつけることができますが、例えば「当サイトについて」や「プライバシーポリシー」のように、あらかじめ用意されているものについては任意のページ名に変更することができません。上で紹介したように条件分岐を利用してテンプレート側で直接変更ということもできなくはないですが、その方法だと表側だけ任意のものに変更されて、管理画面のページ管理などでは結局元の名称のままでページ名(テンプレート名)が表示されてしまい微妙です...。これを表でtitleとして表示されるのはもちろん、管理画面でもちゃんと任意で付けたページ名で表示されるようにしたいという時にはデータベースの記述を変更することで可能になります。※データベースは間違った個所を変更してしまったりすると最悪の場合元に戻せないなど起こりうるので、不安な人はあらかじめバックアップをとるなどして作業してください。ここでは「当サイトについて」というページ名を「会社概要」というページ名に変更する形で紹介します。phpMyAdminなどでデータベースにアクセスして自身の環境でEC-CUBEで利用しているデータベースの情報を開き、その中にある「dtb_page_layout」というテーブルを表示します。テーブルの詳細画面が表示されるとデフォルトであればズラッと各ページの情報や項目が表示されると思うので、その中にある「page_name」の項目を探して、且つ「当サイトについて」と記述されている部分を探します。あとは、一覧画面で直接もしくは更に詳細ページに移動してから「当サイトについて」と表示されているところを「会社概要」に変更すれば、表側のtitleや管理画面のページ管理などのページ名表示が変更されているのを確認できます。するだとか、「MYページ」という表記はすべて「マイページ」といったカタカナ表記のみにしたいといったことが可能です。ページ名」という形になっていますが、それを任意の並びにしたり区切り記号を変更したりする方法です。3.0.10で動作確認したもので、デフォルトのテンプレートを使っている想定になります。キャッシュ管理」にある「キャッシュクリア」ボタンを押して再度確認してみてください。当サイトについて」といったように、先頭にショップ名が表示、区切り記号は「/」を使用、その後ページ名を表示という形になっています。このままでも気にならないという人ももちろんいるでしょうが、並びと区切り記号を変更したいという時は以下を変更することで任意の表示にできます。デフォルトテンプレートではtitle部分を表示している記述はdefault_frame.twigというファイルになるので、その中にある下記のような記述(27行目辺り)を探します。ショップ名」に変更してみます。}}といったショップ名やページタイトルをそれぞれ表示するタグの並びを入れ替え、区切り記号も「/」からサンプルコードのハイライト表示部分のように「-」を使う形に変更します。ショップ名」といった形になります。TheVOS2019.04.10A:https://thevos.jp/Manual/17595EC-CUBEの備忘録。デフォルトのテンプレートだとサイドに表示されている商品カテゴリーですが、商品登録がない場合はカテゴリー名が表示されず、商品が登録されていたとしても親カテゴリーのページでなければ子カテゴリー名は表示されないようになっています。これを商品数や表示ページに関わらず、すべてのカテゴリーを常に全表示させる方法です。2.12.4で動作確認しています。画像はデフォルトのテンプレートのトップページをキャプチャしたものです。現在表示されているのはサンプルとして予め登録されている「食品」と「レシピ」という2つのカテゴリーですが、実は表示されてないだけで「雑貨」というカテゴリーも予め登録されています。「食品」というカテゴリーですが、こちらは予め「なべ」と「お菓子」という子カテゴリーが登録されています。実際存在しているカテゴリーなのに表示されないのは、「雑貨」の場合は商品が登録されていないため。「なべ」と「お菓子」の場合は、親となる「食品」ページではなく現在トップページを表示しているという理由で、それぞれカテゴリーが表示されないようになっています。これを常に全てのカテゴリーが表示されるようにする方法です。/data/Smarty/templates/default/frontparts/bloc内のcategory.tplを変更します。1}-->37行目辺り(ライセンスコメント含め)に「表示フラグがTRUEなら表示」というコメントがあり、そのすぐ下に上記のような記述があると思います。trueを追記したものにします。true}-->ここまで行い表示を確認すると、先ほどはトップページでは出ていなかった子カテゴリーも表示されるようになります。次に商品数がない場合でもカテゴリーが表示されるようにします。/data/class/pages/frontparts/bloc内のLC_Page_FrontParts_Bloc_Category.phpを変更します。true);74行目辺り(ライセンスコメント含め)に「カテゴリツリーの取得」というコメントがあり、そのすぐ下に上記のような記述があると思います。これを以下のハイライト表示部分のように、trueとなっていたものをfalseに変更します。false);上記それぞれを変更して表示確認すると、画像のように先ほどは表示されていなかったカテゴリーが全て表示されるようになっているのを確認できます。TheVOS2019.04.10A:https://thevos.jp/Manual/17591引き続きEC-CUBEの備忘録です。商品のタイトルや紹介文が指定した文字数以上になったときに「...」などを表示して、見栄えを揃える方法です。jQueryを使うとかCSSのtext-overflowなんかでも同じ事はできますが、Smartyを使って実装するものになります。2.12.3になります。画像はデフォルトのテンプレートで登録されているサンプル商品の「アイスクリーム」のタイトルと説明文を長くしたものです。見栄えを気にしないのであればこのままでも良いですが、他の商品とのバランスも考えてタイトル、商品説明文をそれぞれ2行で収まるぐらいの文字数になるよう設定し、更に省略された部分は「...」を表示させるようにします。おすすめ商品」からテンプレートを変更します。FTPなどの場合は/data/Smarty/templates/default/frontparts/bloc/内のrecommend.tplが該当ファイルになります。comment"が紹介文を出力している部分になります。これをそれぞれ下記のように変更します。30}-->...<!--{/if}--></p></div>上記コードに変更(ハイライト部分が変更箇所)することで、タイトルは最大文字数が20文字でそれ以上は「...」を表示、商品説明は最大文字数が30文字でそれ以上は「...」が表示されるようになり、見栄えを確認すると以下のようになります。文字数を変更する場合はそれぞれ数値を任意のものに変更し、省略時に表示したいテキストもifの部分で変更ができます。今回はトップページに表示されている「おすすめ商品」をサンプルにしましたが、Smartyであれば商品一覧などの他のテンプレートでも実装できます。TheVOS2019.04.10A:https://thevos.jp/Manual/17588EC-CUBEはもともとスマートフォンやモバイル用のテンプレートが用意されており、それぞれのデバイスで閲覧すると各テンプレートに振り分けらるようになっているのですが、それを無効にする方法です。この機能自体は良いと思うのですが、例えばモバイルまで手が回らないとか、単純に別テンプレートにする必要がないというときに。2.12.3になります。画像はiPhoneでのサイト閲覧時をキャプチャしたもので、このように専用のテンプレートで表示されています。スマートフォンっぽい感じなのは良いですが、PCのデザインの雰囲気とかなり離れている場合は微妙です...。デフォルトでは思いっきりEC-CUBEのロゴが表示されていたりもします。(ここらへんはちゃちゃっとスマートフォン用のテンプレートを直せば良い話ですが)一番好ましいのはもちろんスマートフォンやモバイルのテンプレートもしっかりカスタマイズするのが好ましいですが、納期や予算の問題などでしない(できない)場合は、いっそのこと全てPC用のテンプレートにするのも手だと思います。今回は手っ取り早くできる方法で、具体的には予め設定されているユーザーエージェントを切るという方法になります。/data/class/内にあるSC_Display.phpというファイルの133行目あたりから下記のような記述があります。SC_Display_Ex::$device;}上記コードの一部を下記のように一部コメントアウトし、ユーザーエージェントを無効にします。これにより全てのデバイスで閲覧時にはPCのデザインで表示されるようになります。SC_Display_Ex::$device;}変更・アップロード後に再度スマートフォンやモバイルからアクセスすれば、PCのテンプレートで表示されるのが確認できます。上記ではスマートフォンとモバイルの両方のユーザーエージェントを無効にしていますが、モバイルはそのまま専用テンプレートで表示したいという場合は、スマートフォン部分のみ(DEVICE_TYPE_SMARTPHONE)をコメントアウトするなどしてください。ちなみに、以下のようにして単純に条件分岐の記述を取っ払って全てDEVICE_TYPE_PCにする方法でもいけます。確実に今後必要でない場合などはこの方法で良いですが、後々テンプレートを適応させる可能性が少しでもあるのであれば先程のコメントアウトを用いたほうがいいかと思います。TheVOS2019.04.10A:https://thevos.jp/Manual/17578EC-CUBE自体をまだあまり触ったこともなければ、そんなに頻繁に使わないのもあって、しばらくすると簡単なことでもいろいろと忘れてしまうので備忘録。デフォルトだと「NEW」とか「残りわずか」などで登録されている商品ステータスを任意のものに変更・追加する方法です。2.12.3になります。画像はEC-CUBEのデフォルトテンプレートの商品詳細ページです。現在「NEW」「残りわずか」「ポイント2倍」「オススメ」「限定品」とアイコンが出ているこの部分のテキストや画像を任意のものに変更します。商品ステータスのテキストを変更するテキストと画像のどちらを先に変えてももちろん問題ないですが、今回はテキストから変更します。デフォルトの画像を変えるだけの場合は、ここの部分は飛ばしてください。マスターデータ管理」を選択します。マスターデータ管理ページにいくと、プルダウンがあるので「mtb_status」を選択します。選択後にプルダウン横の「選択」ボタンを押すと下記のようなページになります。見たまま、もともと登録されているものを変更したい場合は、IDと値の部分をそれぞれ変更します。これ以外で新たに登録したい場合は、その下にある「追加のデータ」部分に任意でIDと値(テキスト)を設定します。値:テスト」を追加します。設定が終わったら、一番下にある「この内容で登録する」ボタンで商品ステータスのテキストが変更できます。変更後は、管理画面の商品登録ページなどにも商品ステータスの変更や追加がされています。マスターデータ管理」を選択します。マスターデータ管理ページにいくと、プルダウンがあるので「mtb_status_image」を選択します。選択後にプルダウン横の「選択」ボタンを押すと下記のようなページになります。テキスト変更のときと同様で、もともと登録されているものを変更したい場合はIDと値の部分をそれぞれ変更します。これ以外で新たに登録したい場合は、その下にある「追加のデータ」部分に任意でIDと値(画像へのパス)を設定します。今回はサンプルとしてID:1で登録されている「NEW」の画像をデフォルトから任意のものへ変更し、先程新たに追加した「テスト」にも画像を設定します。ID:1の「NEW」アイコンの画像を変更します。値でimg/icon/ico_01.gifとなっている部分をimg/icon/ico_new.gifへ変更します。次に新たに追加した「テスト」にもアイコンを設定します。IDには先程登録した6を記述し、値にはimg/icon/ico_test.gifというように画像へのパスを記述します。設定が終わったら、一番下にある「この内容で登録する」ボタンで商品ステータスの画像が変更できます。※IDは「mtb_status」に対応したものを記述してください。※画像のパスは環境によって変更してください。2.12.3)でテキスト名や画像名はそのままで、画像のみを差し替えたい場合は/html/user_data/packages/default/img/icon内に画像があるので、ここで同名のファイル名で上書けば変更されます。新たにアップする画像もデフォルトのテンプレートの場合にはここに画像を入れます。※画像サイズが変わる場合は、各テンプレート(detail.tplやlist.tplなど)で指定されているwidthやheightも変更する必要があります。画像は商品ステータス変更後の商品詳細ページで、「NEW」の画像がオレンジのものから赤へと変更されており、「TEST」というアイコンが新たに追加されています。3.Xではもともと用意されているページを利用するだけでなくオリジナルで新規ページを追加することもできるのですが、その場合作成したページのURLに「user_data」が付与されています。この「user_data」という部分をURLから消す方法とそれに関連して新規作成したページのURLをテンプレートタグを使って出力する方法です。3.0.10で動作確認したもので、デフォルトのテンプレートを使っている想定になります。新規作成したページURLから「user_data」を消すEC-CUBEは例えばプライバシーポリシーや特定商取引法に基づく表記などのようにECサイトであれば必要なページはある程度最初から用意されており、さらに表示させる要素やスタイル調整などもある程度できるようにはなっていますが、それらを利用する以外にもオリジナルのページを新たに作成できるようにもなっています。オリジナルページはコンテンツをはじめ、名称・URL・ファイル名なども自由に決めることができるようになってはいるのですが、デフォルトではURLに「user_data」というのが付与されます。こだわり等もなければそのままでいいですが、できれば消したいという要望がほとんどなので、この「user_data」を消してみます。URLから「user_data」を消す方法としては、ファイル移動・DB操作・.htaccessを利用などのいろいろと方法はあるのですが、ここではルーティングを変更する方法を紹介します。src/Eccube/ControllerProviderにあるFrontControllerProvider.phpを開き、41行目に辺りにある下記の記述を見つけます。~の部分を削除もしくはコメントアウトして、その代わりに下記を記述します。'[0-9a-zA-Z_]+')->bind('user_data');上記を記述後に作成したページを確認すると、例えば「example」というURLで作成したページの場合はデフォルトでは「http://example.com/html/user_data/example」のようになっていますが、それが「http://example.com/html/example」というように「user_data」がないURLになっているのを確認できます。この方法は以下EC-CUBEのフォーラムで紹介されていた方法です。フォーラムURLを出力するテンプレートタグa要素でリンクを設定する際など、例えばお問い合わせページであれば「http://example.com/contact」とか「/contact」のような記述で設定するのでも一応ページ遷移もできはするのですが、こういったCMSなどはURLを出力するテンプレートタグなどが用意されていることがほとんどですし、それらを利用していなかったことで後々大変になることもあったりするので、基本的にはそちらを利用するべきです。EC-CUBEでURLを出力するテンプレートはそれぞれ下記のような記述になり、下記は上からTOPページ・お問い合わせ・商品一覧のURLを出力させるものになります。基本的には赤文字部分の中をページ毎に変更し、デフォルトのテンプレートとして用意されている商品一覧やプライバシーポリシーのようにURLの中にディレクトリが複数あるような場合は_を利用して記述します。}}と記述してもリンク先は404となってしまいます。新規作成したページのURLを出力したい時はこれまでとは少し違った記述方法になり、例えば「example」というURLにしたページのURLを出力するときは下記のように記述をします。2GOお客様のビジネススタイルの価値を大切にする企業THEVOSです。THEVOSは、お客様との緊密な外部ITチームです。live:webmaster_20676。