タグ: PHP

【EC-CUBE】モバイルでのポイント使用が出来るように改造する

ロジックは、あるから、テンプレの変更で対応できる。

1)/data/Smarty/templates/default/mobile/shopping/deliv_date.tpl

の33~35行目を

<!–{if $tpl_login == 1}–>
<!–<input type=”hidden” name=”point_check” value=”2″>–>
<!–{/if}–>

↓このように変更。

<!–{if $tpl_login == 1}–>
■ポイント利用<br />
現在の所持ポイントは「<!–{$tpl_user_point|default:0}–> pt」です。<br />
所持ポイント以上のポイントはご利用いただけません。<br />
<input type=”hidden” name=”point_check” value=”1″ />
<input type=”text” name=”use_point” istyle=”4″ />
<!–{/if}–>

2)/data/Smarty/templates/default/mobile/shopping/confirm.tpl

の72行目に以下を挿入。

【購入金額】<br>
商品合計:<!–{$tpl_total_pretax|number_format}–><br>
送料:<!–{$arrData.deliv_fee|number_format}–><br>
<!–{if $arrData.charge > 0}–>手数料:<!–{$arrData.charge|number_format}–><br><!–{/if}–>
(ここへコードを追加。)
合計:<!–{$arrData.payment_total|number_format}–><br>
(内消費税:<!–{$arrData.tax|number_format}–>)<br>

↓このように。

【購入金額】<br>
商品合計:<!–{$tpl_total_pretax|number_format}–><br>
送料:<!–{$arrData.deliv_fee|number_format}–><br>
<!–{if $arrData.charge > 0}–>手数料:<!–{$arrData.charge|number_format}–><br><!–{/if}–>
<!–{assign var=discount value=`$arrData.use_point*$smarty.const.POINT_VALUE`}–>-<!–{$discount|number_format|default:0}–>円
合計:<!–{$arrData.payment_total|number_format}–><br>
(内消費税:<!–{$arrData.tax|number_format}–>)<br>

【EC-CUBE】現在のページのURLを取得してテンプレートで(QRコードを)表示する。

ページのQRコードを動的に生成させる場合などに、現在のページそのもののURLを取得してテンプレートへ出力するには、PHPでURLを取得して、変数を定義しておく→tplファイルで、その変数を表示、というやり方も使える。

要は、

https://bton.papalabs.net/?p=355

https://bton.papalabs.net/?p=358

↑この記事の複合技。

先の記事は、EC-CUBEでプロダクトやカテゴリの変数を情報として使う前提でコードを組んでいるので、その他のページには使えない。でも、こちらのやり方であれば、その他のシステムにも応用が利く。但し、一覧ページの場合は、そのページそのものというのは、一覧のページということになるから、「一覧ページで各商品ページのURLをQRコードで表示したい」という場合は、先のやり方を使う。

1)現在のページURLを取得するPHPコードを保存する。

下記のコードを「urlget.php」という名称で作成し、EC-CUBEのルートディレクトリへ保存。(別に変えてもかまわない。)

<?php

$thisURL=’http://’.htmlspecialchars($HTTP_SERVER_VARS[‘HTTP_HOST’],ENT_QUOTES).htmlspecialchars($HTTP_SERVER_VARS[‘REQUEST_URI’],ENT_QUOTES);

define(’CONFIG_THIS_URL’,$thisURL);  
?>

2)作成した「urlget.php」を読み込む。

/require.php

の適当な位置(Ver.2.3RC1の場合、L27とかが分かりやすい。)に

require_once($require_php_dir . “/urlget.php”);

と追記し、「urlget.php」を呼び出す。

3)テンプレートに表示用のコードを追加。

そのページそのもののQRコードを表示させたいテンプレートに、

<img src=”<!–{$smarty.const.SITE_URL}–>php/qr_img.php?d=<!–{$smarty.const.CONFIG_THIS_URL}–>&e=M&s=3&t=j”>

または、

<img src=”<!–{$smarty.const.URL_DIR}–>php/qr_img.php?d=<!–{$smarty.const.CONFIG_THIS_URL}–>&e=M&s=3&t=j”>

と記載する。(QRコード表示用のPHPへのパスの表示が変わるだけで結果は同じなので、どっちでもOK。)

qr_img.phpへのパスと格納ディレクトリに矛盾がないか確認のこと。(アップロードしたディレクトリ構造によって上記パスは変わる)

【EC-CUBE】商品一覧の表示順(昇順・降順)の変更・追加

商品一覧ページの一覧上下に表示されているソートリンクを追加(または変更)して、降順・昇順の並べ替えボタンを作ることができる。

例えば、
「価格:高い順 安い順 新しい順 古い順
に並べ替えというようなことが可能。

1)/data/class/pages/products/LC_Page_Products_List.php を編集。

        //表示順序
        switch($orderby) {

という記述を探します。(Ver.2.3RC1の場合、L387あたり。)

その下の、

「case ‘ ○○ ‘:」

という部分が、それぞれのソートのルールを決めている部分。

この中の、「$order =” ○○ “;」というところがソートの指定。ここに、ソートに使用したい項目を入れる。優先順も。降順にしたい場合は、項目の後に半角スペースを入れて、「disc」と記述。

仮に、価格降順(高いほうから安いほうへ)のソートルールを作るのであれば、

        case ‘price’:
            $col = “DISTINCT price02_min, product_id, product_code_min, product_code_max,”
                . ” name, comment1, comment2, comment3,”
                . ” main_list_comment, main_image, main_list_image,”
                . ” price01_min, price01_max, price02_max,”
                . ” stock_min, stock_max, stock_unlimited_min, stock_unlimited_max,”
                . ” point_rate, sale_limit, sale_unlimited, deliv_date_id, deliv_fee,”
                . ” status, product_flag, create_date, del_flg”;
            $from = “vw_products_allclass AS T1”;
            $order = “price02_min, product_id”;
            break;

をコピーして、「case ‘price2’:」などとして、「$order = “price02_min, product_id”;」→「$order = “price02_min disc, product_id”;」とすればよい。

2)/data/Smarty/templates/default/list.tpl テンプレートにソーとリンクを追加表示させる。

L69行目以下の適当な場所/L188行目以下の適当な場所に表示リンクを追加(または修正)する。

先の例で、価格降順のリンクを追加する場合としたら、

<!–{if $orderby != ‘price2‘}–>
        <a href=”javascript:fnModeSubmit(”, ‘orderby’, ‘price2‘)”>価格順</a>
    <!–{else}–>
        <strong>価格順</strong>
    <!–{/if}–>&nbsp;

こういう形のコードを追加し、「価格順」という文字を「価格昇順」と変更すれば、価格のソートは、高いほうからも安いほうからも並べ替えできるようになる。

【EC-CUBE】お問い合わせフォームに項目追加

例として「お問い合わせ」のお客様情報入力欄に「会社名」欄を追加する

1)\data\class\pages\contact\LC_Page_Contact.php を修正。

  1. 「フォーム値変換用カラム」部分の「お名前」の前に会社名分を追加。 (Ver.2.3Rc1の場合、L79あたり)
    array( “column” => “cname01”, “convert” => “aKV” ),
  2. 「エラーチェック処理部」部分の「お名前」の前に会社名分を追加。 (Ver.2.3Rc1の場合、L188あたり)
    $objErr->doFunc(array(“会社名”, “cname01”, MTEXT_LEN), array(“SPTAB_CHECK” ,”MAX_LENGTH_CHECK”));

2)\data\Smarty\templates\default\contact\index.tpl を修正。 

会社名入力枠を「お名前」の前に追加する。 (Ver.2.3Rc1の場合、L37あたり)

<tr>
<th>会社名</th>
<td>
<input type=”text”
class=”box380″
name=”cname01″
value=”<!–{$cname01|default:$arrData.cname01|escape}–>”
maxlength=”<!–{$smarty.const.STEXT_LEN}–>”
style=”<!–{$arrErr.cname01|sfGetErrorColor}–>” /> 
</td>
</tr>

3)\data\Smarty\templates\default\contact\confirm.tpl

会社名表示枠を「お名前」の前に追加する。 (Ver.2.3Rc1の場合、L38あたり)

<tr>
<th>会社名</th>
<td><!–{$arrForm.cname01|escape}–></td>
</tr>

4)\data\Smarty\templates\default\mail_templates\contact_mail.tpl

会社名を「お名前」の前に追加。 (Ver.2.3Rc1の場合、L42あたり)

■会社名:<!–{$arrForm.cname01}–>

【EC-CUBE】SEO対策の続き。GOOGLE MAP用サイトマップ内のURLも変更。

EC-CUBEのサイト内URLをSEO用に静的HTML化した。で、今度は、GOOGLEサイトマップ用のXMLファイル内のリンクも同じように静的HTML化する。

※これは、自サイトの記事(https://bton.papalabs.net/?p=325)で、既に一覧や詳細ページなど全体的な静的HTML化の設定が出来ていることを前提とする。

/data/class/pages/LC_Page_Sitemap.php

を修正。

(Ver.2.3Rc1の場合)
L240

            $page = array(“url” => SITE_URL . sprintf(“%sproducts/list.php?category_id=%d”, $mobile, $result[$i][‘category_id’]));

↓↓↓下記のように変更。

            $page = array(“url” => SITE_URL . sprintf(“%sproducts/list%d.html”, $mobile, $result[$i][‘category_id’]));

L264

            $page = array(“url” => SITE_URL. sprintf(“%sproducts/detail.php?product_id=%d”, $mobile, $result[$i][‘product_id’]),
                          “update_date” => $result[$i][‘update_date’]);

↓↓↓下記のように変更。

            $page = array(“url” => SITE_URL. sprintf(“%sproducts/detail%d.html”, $mobile, $result[$i][‘product_id’]),
                          “update_date” => $result[$i][‘update_date’]);