EC-CUBE 管理者ページを追加する方法 その2

EC-CUBE 管理者ページを追加する方法 その2

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

前回追加したsubnavi.tplを確認する。

<!--{* サンプル *}-->
<li<!--{if $tpl_subno == 'sample'}--> class="on"<!--{/if}--> id="navi-basis-sample"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/sample.php"><span>サンプル</span></a></li>
<!--{* /サンプル *}-->



<!--{if $tpl_subno == 'sample'}--> class="on"<!--{/if}-->

上記に、サンプルページを表示しているときは、class=”on”を追加しろと書いてある。
これは、メニューの表示に使われるのだろう。(表示しているページのメニュー色を変えたりするのやつ)

<a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/sample.php"><span>サンプル</span></a>

上記に、「サンプル」メニューをクリックしたときのリンク先の記述がある。
よって次に作るファイルは、

html/admin/basis/sample.php

ファイルとなる。

つづく。

EC-CUBE 管理者ページを追加する方法 その1

EC-CUBE 管理者ページを追加する方法 その1

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

前回までの「EC-CUBE 新規に独自ページを追加する方法」で、独自ページを追加できるようになった。これで、DBから適当な値を抽出してそれなりのページを作ることができる。

次に、管理者メニューをカスタマイズしたいと思う。
今回は、「管理者メニューの基本情報管理にサンプルページを追加」してみようと思う。

まず、管理者メニューのファイル構成は以下のとうりになっている。



テンプレートも同様、data/Smarty/templates/admin/ 以下に存在する。

テンプレートの基本情報管理の中にサブナビメニューがある。
data/Smarty/templates/admin/basis/subnavi.tpl



ulでリスト形式のサブナビ一覧の記述があるので、適当な場所(今回は一番後ろ)に他の記述を真似てサンプルというサブナビを追加してみる。

<ul class="level1">
<li<!--{if $tpl_subno == 'index'}--> class="on"<!--{/if}--> id="navi-basis-index"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/<!--{$smarty.const.DIR_INDEX_PATH}-->"><span>SHOPマスター</span></a></li>
<li<!--{if $tpl_subno == 'tradelaw'}--> class="on"<!--{/if}--> id="navi-basis-tradelaw"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/tradelaw.php"><span>特定商取引法</span></a></li>
<li<!--{if $tpl_subno == 'delivery'}--> class="on"<!--{/if}--> id="navi-basis-delivery"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/delivery.php"><span>配送方法設定</span></a></li>
<li<!--{if $tpl_subno == 'payment'}--> class="on"<!--{/if}--> id="navi-basis-payment"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/payment.php"><span>支払方法設定</span></a></li>
<li<!--{if $tpl_subno == 'point'}--> class="on"<!--{/if}--> id="navi-basis-point"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/point.php"><span>ポイント設定</span></a></li>
<li<!--{if $tpl_subno == 'mail'}--> class="on"<!--{/if}--> id="navi-basis-mail"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/mail.php"><span>メール設定</span></a></li>
<li<!--{if $tpl_subno == 'seo'}--> class="on"<!--{/if}--> id="navi-basis-seo"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/seo.php"><span>SEO管理</span></a></li>
<li<!--{if $tpl_subno == 'kiyaku'}--> class="on"<!--{/if}--> id="navi-basis-kiyaku"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/kiyaku.php"><span>会員規約設定</span></a></li>
<li<!--{if $tpl_subno == 'zip_install'}--> class="on"<!--{/if}--> id="navi-basis-zip"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/zip_install.php"><span>郵便番号DB登録</span></a></li>
<li<!--{if $tpl_subno == 'holiday'}--> class="on"<!--{/if}--> id="navi-basis-holiday"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/holiday.php"><span>定休日管理</span></a></li>
<!--{* サンプル *}-->
<li<!--{if $tpl_subno == 'sample'}--> class="on"<!--{/if}--> id="navi-basis-sample"><a href="<!--{$smarty.const.ROOT_URLPATH}--><!--{$smarty.const.ADMIN_DIR}-->basis/sample.php"><span>サンプル</span></a></li>
<!--{* /サンプル *}-->
</ul>

ブラウザで管理者メニューを開き、確認する。



サンプルというサブメニューが確認できた。
ただし、動作はまだ記述していない。

つづく。

EC-CUBE 新規に独自ページを追加する方法 その5(ラスト)

EC-CUBE 新規に独自ページを追加する方法 その5

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

「インストール段階ですでに存在するページの構造」と違うので、同じようなファイル構成に変更してみる。

※ファイルを分離するだけなので、個人的な趣味の範囲だと思う。
※ボク自身はファイルが増えるのはあまり好きではないし・・・。
※というわけで、補足として。

html/user_data/sample.php の中の

1)
class LC_Page_User extends LC_Page_Ex {
から
}
までを全てカット。

2)
require_once CLASS_EX_REALDIR . ‘page_extends/LC_Page_Ex.php

require_once CLASS_EX_REALDIR . ‘page_extends/LC_Page_Sample_Ex.php
に変更。
※ LC_Page_Sample_Ex.php はまだ存在しない。

3)
上記変更に伴い、
$objPage = new LC_Page_User();

$objPage = new LC_Page_Sample_Ex();
に変更。

新しい sample.php は以下の通り。

<?php
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php';

$objPage = new LC_Page_Sample_Ex();
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
$objPage->process();

次にLC_Page_Sample_Ex.phpを作成する必要があるので、
data/class_extends/page_extends/LC_Page_Sample_Ex.php を新規作成。
中身は、以下の通り。

<?php
require_once CLASS_REALDIR . 'pages/LC_Page_Sample.php';

class LC_Page_Sample_Ex extends LC_Page_Sample {

    /**
     * Page を初期化する.
     *
     * @return void
     */

    function init() {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */

    function process() {
        parent::process();
    }

    /**
     * デストラクタ.
     *
     * @return void
     */

    function destroy() {
        parent::destroy();
    }
}

最後に、LC_Page_Sample.php を作成する必要があるので、
data/class/pages/LC_Page_Smaple.php を新規作成。
中身は、以下のとおり。

<?php
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php';

class LC_Page_Sample extends LC_Page_Ex {

    /**
     * Page を初期化する.
     *
     * @return void
     */

    function init() {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */

    function process() {
        parent::process();
        $this->action();
        $this->sendResponse();

    }

    /**
     * Page のアクション.
     *
     * @return void
     */

    function action() {
        $this->arrData = SC_Helper_DB_Ex::sfGetBasisData();
    }

    /**
     * デストラクタ.
     *
     * @return void
     */

    function destroy() {
        parent::destroy();
    }
}

ブラウザにて動作を確認する。



以上。

EC-CUBE 新規に独自ページを追加する方法 その4

EC-CUBE 新規に独自ページを追加する方法 その4

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

前回までで、ひととおり「管理者メニューから新規ページを作成した場合」の構造について説明した。

もし、管理者メニューを利用せずに新規ページを追加したい場合は、

1./html/user_data/○○○.php を作成。(中身は前回のをコピー)
2./data/Smarty/templates/default/user_data/○○○.tpl を作成。
3.データベースの dtb_pagelayout へ1行追加。

以上で出来る。

<<インストール段階ですでに存在するページの構造>>

ファイルが増えているので違うのかと思ったが、どうやら同じようだ。以下は、例として「当サイトについて」と比較している。


管理メニューで作った/html/user_data/sample.phpにあたる処理が、3つのファイルに分かれており、
/html/abouts/index.php から
/data/class_extends/page_extends/abouts/LC_Page_Abouts_Ex.php を読み込んでおり
その LC_Page_Abouts_Ex のベースクラスが
/data/class/pages/abouts/LC_Page_Abouts.php となっているだけである。

つづく。

EC-CUBE 新規に独自ページを追加する方法 その3

EC-CUBE 新規に独自ページを追加する方法 その3

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

EC-CUBEをカスタマイズする際に一番手っ取り早いのが、似たような処理を探してきてそのソースを読むこと。
なんでこんな記述か?と思う部分もソースを読めば理解できる。
ただし、同じような処理でもいろんな記述があるのでごっちゃになることには気をつけること。
あと、バージョンが変わると記述もがらっと変わっているので注意。

<<データベースの値を取得して表示してみる>>

前回は、ただ単にPHPファイルに記述した文字列を出力した。

今回はデータベースから値を取得して出力してみる。

<<便利なクラス>>

EC-CUBEには便利なクラスが多く用意されている。

SC_Query_Ex ・・・ データベース用便利クラス

これを使ってみる。

<<使い方>>

使い方は正直言って、EC-CUBEの中の別ページで使われている記述をコピーするのが楽だとおもう。

それでは以下のファイルを変更する。

== /html/user_data/sample.php ==

function action() {
    // データベースクラス作成
    $objQuery =& SC_Query_Ex::getSingletonInstance();
    // SQL文作成
    $cols = 'shop_name';
    $from = 'dtb_baseinfo';
    // SQL実行
    $this->arrData = $objQuery->select($cols, $from);
}

同様に、
== /data/Smarty/templates/default/user_data/sample.tpl ==

ショップ名:<!--{$arrData[0].shop_name|escape}-->

ブラウザで開いて確認する。



正しく表示されている。

今回のようにSQLで抽出した行が1行だけと決まっている場合ならば、

== html/user_data/sample/php ==

function action() {
    $objQuery =& SC_Query_Ex::getSingletonInstance();
    $cols = 'shop_name';
    $from = 'dtb_baseinfo';
    $retData = $objQuery->select($cols, $from); /* 変更行 */
    $this->arrData = $retData[0]; /* 変更行 */
}

== data/Smarty/templates/default/user_data/sample.tpl ==

ショップ名:<!--{$arrData.shop_name|escape}-->

と書いても良い。というかEC-CUBEでは1行だけの場合は主にこう書いてあった。

閑話休題

データベースのアクセスに今回はSC_Query_Exクラスを利用して店舗情報を取得した。
が、実はSC_Query_Exは汎用的に使えるもので便利だが、店舗情報を取得するならばもっと便利なクラスが用意されていた。
SC_Helper_DB_Ex だ。

では、それを使って早速先ほどと同様の処理を行なってみる。

== html/user_data/sample/php ==

function action() {
    $this->arrData = SC_Helper_DB_Ex::sfGetBasisData();
}

tplファイルはさきほどのまま。

これでブラウザで確認すると同じように表示された。
SC_Helper_DB_Exクラスは標準でdtb_baseinfoテーブル(SHOPマスター)を抽出するメソッド「sfGetBasisData()」を持っているため、dtb_baseinfoテーブルなどの指定をしなくても取得できるのだ。

閑話休題2


<!--{$arrData|@debug_print_var}-->

データベースから抽出して出力するといった処理がよくあると思うが、その際に正しく値が入っているかを配列チェックする。

sample.tpl を上記に書き換えてブラウザで確認。



上記のように、配列変数の中身を確認することができる。

つづく。

EC-CUBE 新規に独自ページを追加する方法 その2

EC-CUBE 新規に独自ページを追加する方法 その1

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

前回のつづき
(※前回の最後にsample.phpのファイルの場所などを変更したが、話がややこしくなるので変更前のモノで説明)

EC-CUBEのフロントページの表示については以下の感じで動いている。



<<自動作成された /html/user_data/sample.php の全文>>


<?php
require_once '../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php';

/**
 * ユーザーカスタマイズ用のページクラス
 *
 * 管理画面から自動生成される
 *
 * @package Page
 */

class LC_Page_User extends LC_Page_Ex {

    /**
     * Page を初期化する.
     *
     * @return void
     */

    function init() {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */

    function process() {
        parent::process();
        $this->action();
        $this->sendResponse();
    }

    /**
     * Page のアクション.
     *
     * @return void
     */

    function action() {
    }

    /**
     * デストラクタ.
     *
     * @return void
     */

    function destroy() {
        parent::destroy();
    }
}


$objPage = new LC_Page_User();
register_shutdown_function(array($objPage, 'destroy'));
$objPage->init();
$objPage->process();

※最後に?>が無いが、PHPの記述としてそれが正しいらしい。
逆に?>を付けてしまうと、その後に改行などがあった場合にエラーが出ることがあるらしい。

このsample.phpの中で主要な部分は、action()である。

ここにページ読み込み時に動作する処理を書く。

function action() {
}

<<PHPファイルで設定した値を表示する>>

ここを下記の様に書き換えてみる。

function action() {
    $this->testData = "これはテストデータです。";
}

この$testDataをテンプレートで出力するために、sample.tplを以下の様に書き換える

<!--{$testData}-->

そして、/html/user_data/sample.phpを開いて確認。



正しく表示された。

つづく。

EC-CUBE 新規に独自ページを追加する方法 その1

EC-CUBE 新規に独自ページを追加する方法 その1

※EC-CUBEのversionは2.12.2
※EC-CUBE歴が短いので間違っている可能性がある。気づいた点は適宜修正。

1.管理者メニューより追加する方法。
2.同様の事を管理者メニューを使用せずに行う。

まず、

<<1.管理者メニューより追加する方法>>

管理者でログインし、「デザイン管理 > PC > ページ詳細設定」を開く。



「ページ詳細設定」ページで、適当に入力して登録する。
今回は名称を「サンプル」、URLを「sample」、そのほかは適当で登録した。


以上で完了。

/user_data/sample.php をブラウザで開いて確認。
(僕の場合は、http://localhost/ec_test/html/user_data/sample.php)

独自ページが表示される。




<<解説>>

ソースを見ると、以下の変更があるようだ。

ファイル側の変更。
/html/user_data/sample.php が新規作成。
/data/Smarty/templates/default/user_data/sample.tpl が新規作成。
(※ default は今回の使用テンプレート)


データーベース側の変更。
dtb_pagelayout に1行追加されている。


device_type_id : 10 ・・・ 10はPC用のページであることを示す。
page_id : 29 ・・・ 同じdevice_type_idでかぶらない数値。
page_name : ページネーム(管理ページで表示している名前)
url : user_data/sample.php
filename : user_data/sample ・・・ tplファイルの場所だろう。
edit_flg : 1 ・・・ 削除可能フラグ
update_url : http://localhost/~ ・・・ これは不要?


<<ちょっと変更してみる>>

では、現在のフロント(訪問客が見るページ)のURLを
/html/user_data/sample.php
これを /html/sample/index.php に変更してみる。


データベースのdtb_pagelayoutのurlカラムの値を
user_data/sample.php → sample/index.php に変更。



そして、ファイル側も変更。
/html/user_data/sample.php を
/html/sample/index.php へ移動&ファイル名変更。


ブラウザで /html/sample/ へアクセスして確認する。



正しく表示されている。

つづく。

[迷惑電話]ブレンズ社の曽根と申します

非通知で会社に電話が掛って来た。

曽根という人 「私、ブレンズ社の曽根と申します。システム開発の担当者様はいらっしゃいますでしょうか」

私 「非通知で掛ってきてますよ」

曽根という人 「はい」

私 「通知で掛け直し・・・」

ブチッ ツーツーツー・・・

なんだこの会社は。

[迷惑メール]アドバイヤーズグループ

以下メール内容
————–
はじめまして。
アドバイヤーズグループ、マーケティング担当の川本と申します。
弊社では大手旅行会社エクスペディアをクライアントに持っており、エクスペディアの広告をテキストリンクにて掲載して頂けるサイト(旅行関連サイトに限らず)を探しております。
貴社の運営サイト、リンクビルディングサービス、料金等についてお知らせ頂けますでしょうか。お忙しいところ大変恐縮ですが、上記メールアドレスまでご返信頂けますでしょうか。
宜しくお願い致します。
————–

上記のメールがわざわざメールフォームからきた。

返信先は adbuyersgroup@yahoo.co.jp
(ヤフーメールって・・・)

電話番号は 877-475-6614 って書いてある
(アメリカじゃん・・・適当すぎる)

ここの人はわざわざ返信したみたいだ。

正直、SEO対策はもううんざりって感じです。

よくSEOの会社から「SEO対策しませんか。外部リンク○○○件でxxx円です」みたいなのがきます。
朝電話が掛ってきて「外部SEOする気なんでけっこうですわー」って断ったのに、昼には同じ会社の別の人から同じ内容の電話が掛ってきます。

「朝も電話あって断ったんですわー」っていうと、「え、そうなんですか。それはすいません」って言うくせに「それでですねー・・・」って話を進めようとします。

こんなやり取りが毎月あります。・・・わざとじゃん。