パソコン・インターネット

EC-CUBE2.3.xで納品書を一括出力する

EC-CUBE 2.4.0 で新たに追加された機能として、「納品書の一括出力」というのがあり、これがすごい魅力的だと常々お客様から言われてたので、2.3.4バージョンでも追加してみることに。

変更箇所は

テンプレートファイル(/data/Smarty/templates/default/admin/order)

index.tpl
pdf_input.tpl

この二つは、多分従来カスタマイズしていなければ、2.4.0バージョンのファイルと
そのまま置き換えても問題ないと思う。
ウチは、CSV出力設定へ飛ぶ部分はユーザがいぢれないように制御していたので
そこの部分を注意しながら PDFダウンロードボタンの追加や、
チェックボックスの追加をしました。

クラスファイル(/data/class/pages/admin/order/LC_Page_Admin_Order_Pdf.php)

モードによる条件分岐の部分、
        case "confirm":
の中身で コメント // エラー入力なし 以下の部分を

           if (count($this->arrErr) == 0) {
                $i = 0;
                $objFpdf = new SC_Fpdf($arrRet['download'], $arrRet['title']);
                foreach ( $arrRet['order_id'] AS $key=>$val ) {
                    $arrPdfData = $arrRet;
                    $arrPdfData['order_id'] = $val;
                    $objFpdf->setData($arrPdfData);
                    ++$i;
                }
                $objFpdf->createPdf();
            }

に置き換え。

コメント   // 受注番号があったら、セットする  以下の部分を

            if(SC_Utils_Ex::sfIsInt($_GET['order_id'])) {
                  $arrForm['order_id'][0] = $_GET['order_id'];
            } elseif (is_array($_POST['pdf_order_id'])) {
                    sort($_POST['pdf_order_id']);
                    foreach ($_POST['pdf_order_id'] AS $key=>$val) {
                          $arrForm['order_id'][] = $val;
                    }
            }


に置き換え。

クラスファイル(/data/class/SC_Fpdf.php)

ファンクション SC_Fpdf のパラメータががらりと変わっているので、 
2.4.0の記述の同じファンクションの行とそのまま置き換え。

   旧  function SC_Fpdf($arrData, $tpl_pdf = "template_nouhin01.pdf") {
      ↓   ↓ 
   新  function SC_Fpdf($download, $title, $tpl_pdf = "template_nouhin01.pdf") {

これに伴い、$arrDataで含まれてい筈のデータをセットしている部分を書き換え

 旧
        $this->pdf_download = $arrData[download];   // PDFのダウンロード形式(0:表示、1:ダウンロード)
        $this->tpl_title = $arrData['title'];

     ↓    ↓
 新
       $this->pdf_download = $download;      // PDFのダウンロード形式(0:表示、1:ダウンロード)
        $this->tpl_title = $title;

新しいファンクション setData の追加 
    function setData($arrData) {
        $this->arrData = $arrData;

        // ページ番号よりIDを取得
        $tplidx = $this->pdf->ImportPage(1);

        // ページを追加(新規)
        $this->pdf->AddPage();

        //表示倍率(100%)
        $this->pdf->SetDisplayMode($this->tpl_dispmode);

        if(SC_Utils_Ex::sfIsInt($arrData['order_id'])) {
          $this->disp_mode = true;
          $order_id = $arrData['order_id'];
        }

        // テンプレート内容の位置、幅を調整 ※useTemplateに引数を与えなければ100%表示がデフォルト
        $this->pdf->useTemplate($tplidx);
        $this->setShopData();
        //ロゴ画像
     $this->pdf->Image(PDF_IMG_DIR. 'logo.png', 124, 46, 60);
        $this->setMessageData();
        $this->setOrderData();
        $this->setEtcData();
    }

※ここで注意したいのは、logo.pngの格納場所が2.4.0では変わってしまっているため、
 ロゴ画像をセットしているところについては、従来の記述の部分にすること。

また、このファンクション追加により、ページ番号をセットしていた部分はごそっと削除。

ファンクション createPdf 内の コメント   // PDFをブラウザに送信 以下の条件文を書き換え。

        if ($this->pdf->PageNo() == 1) {
            $filename = "nouhinsyo-No".$this->arrData['order_id'].".pdf";
          } else {
            $filename = "nouhinsyo.pdf";
          }
          $this->pdf->Output($this->sjis_conv($filename), D);

        // 入力してPDFファイルを閉じる
        $this->pdf->Close();
    }

とりあえず、これで複数の受注を選択してPDF出力できるようにはなったんですが、
ページのカウントが全体で行われてしまってます。

折を見て改修します(汗)。

| | コメント (0) | トラックバック (0)

今さら!携帯待受Flash

ちょっと時間が余り気味なので、趣味の要素を盛り込んだ携帯待受のFlashを作ってみることにした。

以前も少し勉強してみて、普通のFlashで使える関数が使えなかったりするあたりは理解していたのだが、待受となるといくらテスト用とは言え、つまらない画像を置いておく気にはなれなかったので、何かいい画像があったら・・・等と放置してたのだ。

ちょうど気に入った画像素材がたまってきたので、早速作成してみることに。

手始めにオーソドックスな、開く度にランダムな画像を出しつつ時間を表示するタイプと、電波の状況によって画像が変化するタイプ2種類を作ってみた。

簡単なものはどちらもサクっと出来たのだが、ランダムな画像を出すタイプの方で画像の種類を増やしてみたところ、プレビュー時に「不正イメージデータです」のメッセージが出て動かなくなってしまった。

Flash Lite1.1 で、作成の環境としては、WindowsのFlash CS4。

出力されたメッセージを元に調査してみると、どうもプレビューに使用されるDevice Central というツールのバグらしいことが解った。

Adobeのサイトに飛び、この現象の回避方法を試してみたのだけど、ダメ。うまく行かない。

そもそも、Device Central CS3に限った不具合のように書かれている。こちらの環境はCS4だ。
ということは回避方法も違うのか? とあちこち検索しまくっているがCS4についての情報があまりにも少なすぎ。

なんか画像の枚数が多くなるとこのエラーが出る、というような情報も見つかった。
つまりは、Device Central とは関係ないエラーなんだろうか?

全体のファイルサイズを確認しても、81KBで押さえてあるのでサイズオーバーということも考えられないけど。

結局、この状態が出るのは Flash Lite 1.1でパブリッシュした時であって、2.xでは出ない。

ということで苦肉の策としては、画像5枚バージョンは Flash Lite1.1で、画像7枚バージョンは Flash Lite 2.0で作った。
古い機種は切り捨てみたいな考え方で少しすっきりしないんですが。

自分のテスト機、docomoの方はFlash Lite2.xに対応しているらしく、無事に画像7枚バージョンが動いているので、とりあえずはこのまま完了ということで。。。。

| | コメント (0) | トラックバック (0)

OpenPNE 備忘録

昨日インストールしたOpenPNEですが、やっといろいろいじり出してみています。

まずはスキンを変更してみました。
実に面白い作りだなぁ、と思いました。

メニューバーのボタン類は、ひとつひとつ細切れの画像ではなく、
バーとして一つの画像になってました。
通常用とマウスオーバー用と2種類用意しておけばいいみたいです。

ただし、CSSにて位置をガチガチに指定してあるので、
好き勝手なボタンの大きさや数に作ってしまうと、その後の調整が大変っぽいです。

その辺りは、もしデザイン会社さんと組んで SNSサイトを作るような事になった場合
デザイン会社さんには理解してもらいたい部分でした。

それと、日記のページでは、投稿した年月日と時間が表示されているのですが、
年月日の部分のカラム幅が微妙に小さくて、

2009年10月06

09:30

こんな感じになっちゃってました(>_<)

Default1_3

なので、どこを直せばいいのかを探してみた結果、
PC用のテンプレートの格納場所は

/webapp/modules/pc/templates

でした。

fh_diary.tpl の 中の
<td style="width:95px;" class="bg_05" align="center" valign="top" rowspan="3">

この部分をコメントアウトし、

<td style="width:105px;" class="bg_05" align="center" valign="top" rowspan="3">

と広げてみました。

もちろん、その隣に来るべきカラムの幅も帳尻を合わせました。

<td style="width:424px;" class="bg_02" align="left" valign="middle">
   ↓↓↓
<td style="width:414px;" class="bg_02" align="left" valign="middle">

日記の本文と、それに対するコメントの分、2カ所修正しました。

テンプレートを修正しても、Smartyが認識してくれなかったみたいなので
手動でキャッシュを消してみました。

キャッシュの場所は

/var/templates_c/

です。

After_3

とりあえず、今日のところはここまで。。。

また、いろいろ改修したら書き留めて置くことにします。

 

| | コメント (0) | トラックバック (0)

XREAにOpenPNEインストール

先日、OpnePNEの案件の話を持ち込まれたので、ちょっと勉強してみようかな、と思い、XREAサーバに OpenPNE-2.10.5 を入れてみました。

osCommerceやEC-CUBEを入れる時に結構苦労を伴うサーバなので、覚悟しておいたのですが、とってもすんなり行きました。

この環境は、同じドメインでEC-CUBE他、Xoopsなども入れており、public_htmlをそのままルートとして使うことはできません。

そこで、public_htmlの下にsnsというフォルダを作り、そこに必要なファイルを格納しました。

非公開エリアに格納する bin,lib,varなどなどのフォルダは public_htmlフォルダのひとつ上の階層に置きました。

それなので、config.inc.php内の require_once の部分に記述するパスを
'../'  → '../../'  に変更しといたくらいが注意点でしょうか。

他のパッケージと違い、データベースに対して、自分でSQLを流さなければならないのは、ちょっと面倒だな、と感じました。
しかも、なぜ create_tableのファイルとInsertのファイルと分かれているのかしら?
一つにしてくれればいいのに。。。

さて、とても呆気なくインストールが終わり、テストとしてフレンド招待のメールを送ってみました。

・・・届きません。

XREAで同じようにメールが届かない、という質問のサイトを見つけ、

config.php内の

// Envelope-From ヘッダを設定するかどうか(safe_mode の場合は false に設定してください)
define('MAIL_SET_ENVFROM', true);

この部分を false にすれば良いということだったので、そのようにしてみたら、無事に解決しました。

備忘録というほどのものにもならないのですが・・・ 一応書き留めて置きます。

| | コメント (0) | トラックバック (0)

EC-CUBE 2.3.3高速化

EC-CUBE2.3.3を使用していて、商品点数が多いサイトでは商品一覧の表示がメチャ遅かったのと、
下手するとサーバから応答が無くなってしまうことがあったので、手を入れることになりました。

DBはMySQLを使用していたのですが、
まずは クエリー内にDISTINCT とGROUP BYが使われているとテンポラリーテーブルを作成する、という情報を得ました。
http://dev.mysql.com/doc/refman/5.1/ja/distinct-optimization.html

さて、実際に作りを見てみると、Viewテーブルにすべての商品中で販売のために「有効」なフラグが立っているものがすべて格納されている状態だったのですが、このViewに DISTINCTとGROUP BYが使われておりました。

さらに、商品一覧画面に「○件見つかりました」を出すために、カテゴリに一致した「有効な商品」の全件数を取得するクエリーと、
ページに表示する商品を取得するクエリーは ほぼ同じものを使っていました。

件数を調べるためには、商品の在庫数や価格を保持しているテーブルにわざわざJOINしなくても良いのに、 ご丁寧に4つも5つもテーブルをJOINしまくっておりました。

そして、ページ単位の商品情報を取得する際に、そのクエリーの最後にLIMITを追加してもういちどデータ取得・・・ そんな作りでした。

今回、件数を取得するためには 商品テーブルとカテゴリテーブルの二つだけを使用するようにしました。

また、今回のデザインと運用では、商品の『規格』ごとに金額が違わないことと、在庫の表示が不要なこと、それと一覧表示の並び順にカテゴリの優先順位が必要でないことから、実際に表示に使わない項目を持つテーブルはJOINから外しました。

実際に作ったクエリーを phpMyAdmin上から流してみると、実行時間は
 EC-CUBE本来の方 ・・・ 1.9546
 今回新しく作った方  ・・・ 0.0021

というような結果が出ました。

一覧表示でもう一つ遅い原因と思われるのが、画像のリサイズ関数をかましていることです。

こちらは外せばいいのでしょうが、デザインにも関わってきますし、扱っている商品が「画像が命」的な部分もあり、ガビガビなのは許されない状態です。

ということで、今回は一覧用のデータ取得の部分のみの手入れで終わりました。

カテゴリの検索結果で108件取得できたページの速度
 改善前・・・ 約20秒~40秒
 改善後・・・  約 5秒~15秒
  ※その時のサーバの負荷の状態により変わります

ちなみに、2.4.0のリスト表示のクラスを見てみたところ、
さすがに「件数取得」の部分のクエリが軽そうなものに変っていました。

「早さが改善された」と言われていましたが、この部分は大きそうです。

| | コメント (0) | トラックバック (0)

EC-CUBEのサーバお引っ越し

今までギガント2に乗せていたEC-CUBEの引っ越し作業してます。

今度はVPSなので、自由度が高いんですが、その代わり共用サーバでは普通に設定されているような事が初期値になってなかったりして、php.iniをEC-CUBE向けに変更した点を忘れないように書いておきます。

safe_mode = Off
↑Onになっているとダメです。

max_execution_time = 60     ; Maximum execution time of each script, in seconds
↑商品CSVの点数が多すぎてタイムアウトになってしまうので長くしました。

memory_limit = 64M      ; Maximum amount of memory a script may consume
↑これも商品CSVの作成の時にエラーになるのを防ぐため多くしました。

upload_max_filesize = 8M
↑商品CSVのアップロード対応。長めの商品説明文のようなので余裕を持って多くしました。

mysql.connect_timeout = 180
↑管理権限のセッションが切れてしまう不具合はここを長めにすると良いという情報のもと、長めにしてみました。

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
↑これらがコメントアウトされていると、CSVアップロードで文字化け発生。

以上デス。
また変更したものがあったら、随時追加していきます。

| | コメント (0) | トラックバック (0)

EC-CUBE 携帯からの注文確認メールにヘッダを付ける

携帯サイトから商品注文された際に、ユーザに自動で送られるメールの中にヘッダ・フッタが付かない、という現象が発生しました。

注文の際に自動で送られるメールのテンプレートIDは、携帯の場合は2です。(PCは1)

これは、マスター管理で自由に変更ができるのですが、実はやっちゃいけないことがわかりました。

というのは、商品注文のプログラム中で、テンプレートIDを固定で指定してしまっているからです。 びっくりですねぇ、怖いですねぇ。

で、さらに モバイル用のテンプレート中には ヘッダとフッタが記述されていませんので、

<!--{$tpl_header}-->

<!--{$tpl_footer}-->

を追加してみました。

ところが、テンプレート設定画面で設定した、モバイル用のヘッダ・フッタではなく、 PC用の受注確認メールに設定したヘッダ・フッタが付加されるんです (@_@;

で、原因を調べましたら・・・

/data/class/helper/SC_Helper_Mail.php

このファイル中の88行目付近に、ヘッダ・フッタを取得してくる関数があります。

$arrRet = $objQuery->select("subject, header, footer", "dtb_mailtemplate", $where, array('1'));

これって・・・ Where区がID1固定ですから PC用のヘッダ・フッタを取得してくるのは当たり前ですよね。。。

ということで、この行を以下のように変更しました。

$arrRet = $objQuery->select("subject, header, footer", "dtb_mailtemplate", $where, array($template_id));

これで、テンプレートIDに応じたヘッダ・フッタを取得してきてくれるようになりました。

HAPPY♪ です。

| | コメント (0) | トラックバック (0)

EC-CUBE 「この商品を買った人は、こんな商品も購入しています」

よく、アマゾンなんかでもあるパターン。
「この商品を買った人は、こんな商品も購入しています」

これをEC-CUBEでもやろうかな、と思ってソースを見ていると、なんだか用意されているような感じ!!!

でも、実際にテンプレート側に、 arrRelateProducts というのに格納されている名前やら価格やらを設定して表示してみると、あれあれ、自分と同じ商品が出てくるではないですかΣ(@ロ@

ということで、今回はクラスファイルに手を入れるのではなくて、
きちんとお作法どおり、拡張クラスの方で修正してみました。

今回はDBが MySQLでしたので、viewテーブルが作成されていないため、
allclsをベタで書いたので すごい長いSQL文になっちまってますが・・・

    function lfGetRelateProducts($tmp_id) {
        $objQuery = new SC_Query;
        //自動抽出
        $objQuery->setorder("random()");
        //表示件数の制限
        $objQuery->setlimit(RELATED_PRODUCTS_MAX);
  $temp_limit = RELATED_PRODUCTS_MAX;
        //検索条件
/*    ・・・・・・LC_Page_Products_Detail.phpと同じ記述はコメントアウト 
        $col = "name, main_list_image, price01_min, price02_min, price01_max, price02_max, point_rate";
        $from = "vw_products_allclass AS allcls ";
        $where = "del_flg = 0 AND status = 1 AND (stock_max <> 0 OR stock_max IS NULL) AND product_id = ? ";
        $arrval[] = $tmp_id;
*/
  $sql = "SELECT
  A.product_id,B.name,B.main_list_image,B.price01_min, B.price02_min, B.price01_max, B.price02_max, B.point_rate,
  B.stock_max, B.stock_unlimited_max,B.stock_min,B.stock_unlimited_min FROM `dtb_order_detail` as A
  inner join

   (SELECT T1.product_id,
           product_code_min,
           product_code_max,
           price01_min,
           price01_max,
           price02_min,
           price02_max,
           stock_min,
           stock_max,
           stock_unlimited_min,
           stock_unlimited_max,
           del_flg,
           status,
           name,
           comment1,
           comment2,
           comment3,
           main_list_comment,
           main_image,
           main_list_image,
           product_flag,
           deliv_date_id,
           sale_limit,
           point_rate,
           sale_unlimited,
           create_date,
           deliv_fee,
           rank
           ,(SELECT rank AS category_rank
               FROM dtb_category AS T4
              WHERE T1.category_id = T4.category_id) as category_rank
           ,(SELECT category_id AS sub_category_id
               FROM dtb_category T4
              WHERE T1.category_id = T4.category_id) as category_id
      FROM (SELECT T0.product_id,
                   T0.del_flg,
                   T0.status,
                   T0.name,
                   T0.comment1,
                   T0.comment2,
                   T0.comment3,
                   T0.main_list_comment,
                   T0.main_image,
                   T0.main_list_image,
                   T0.product_flag,
                   T0.deliv_date_id,
                   T0.sale_limit,
                   T0.point_rate,
                   T0.sale_unlimited,
                   T0.create_date,
                   T0.deliv_fee,
                   T00.category_id,
                   T00.rank
              FROM dtb_products AS T0
         LEFT JOIN dtb_product_categories AS T00
             USING (product_id)) AS T1
RIGHT JOIN (SELECT product_id as product_id_sub,
                   MIN(product_code) AS product_code_min,
                   MAX(product_code) AS product_code_max,
                   MIN(price01) AS price01_min,
                   MAX(price01) AS price01_max,
                   MIN(price02) AS price02_min,
                   MAX(price02) AS price02_max,
                   MIN(stock) AS stock_min,
                   MAX(stock) AS stock_max,
                   MIN(stock_unlimited) AS stock_unlimited_min,
                   MAX(stock_unlimited) AS stock_unlimited_max
              FROM dtb_products_class GROUP BY product_id) AS T2
                ON T1.product_id = T2.product_id_sub
            )
   as B on A.product_id = B.product_id and B.del_flg = '0' AND B.status = '1'
  AND (stock_max <> 0 OR stock_max IS NULL)
  WHERE order_id in
  (
  SELECT AA.order_id  From dtb_order_detail as AA WHERE
   AA.product_id = $tmp_id group by AA.order_id
  )
   AND A.product_id <> $tmp_id
  group by A.product_id ORDER BY rand() limit $temp_limit;";

        //結果の取得
//       $arrProducts = $objQuery->select($col, $from, $where, $arrval);
        $arrProducts = $objQuery->getall($sql);

        return $arrProducts;
    }

これを data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
のデストラクタの後にゴソッと追加。

ちょっと実行速度が気になりますが、それはまた後で。。。

| | コメント (0) | トラックバック (0)

JavaScriptのマウスストーカー XHTML編

JavaScript でマウスを追いかけるヤツを設置する依頼があった。

昔からあるよくあるヤツだし、NN6とIE対応になっていたし、ということでタカをくくってた。

普通にテスト用の簡単なページに貼り付けてた時は、確かにどのブラウザでも動いていたのに、
いざ本番用のページに設置したら、FF,Safari,IE6ともに動いていない。動くのはIE7のみ!!

ぐぐってみたら、
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'

HTMLの先頭にこの記述があると、うまく動かないという情報が見つかったのだけど、
この一文を外してしまうと IE6のデザインが崩れまくる。

そもそも、この一文がある意味を考えてみると、やはりJavaScriptの記述に
間違いがあるのでは、という気持ちが強くなって いろいろ試しました。

直した箇所は沢山あるのだけど、Firefoxの場合、位置の指定の時に
単位を付けないとダメ、というのが一番「そうだったのか~」と思えたので覚え書きです。

document.getElementById("xxxx").style.left = NX_POS +"px";
document.getElementById("xxxx").style.top = NY_POS +"px";

こんな感じ。

今は無事、動いております。

| | コメント (0) | トラックバック (0)

CPIサーバでEC-CUBE

CPIサーバでEC-CUBEを使ったら モバイルサイトの方でハマりましたので備忘録。

■html/mobile/ のところに、php.ini を設置しなければならない。

 php.iniはdataフォルダ直下にあるphp.ini を取得してきて、且つ以下の一文を追加。※1
session.use_trans_sid = 1

■同じく html/mobile/に .htaccess を設置しなければならない。

 中身は以下の2行
 AddHandler x-httpd-php524 .php
 suPHP_ConfigPath /usr/home/*******/html/mobile/

最初から簡単インストールが用意されている割には、片手落ちだなぁと思った次第。

※1KUMAOのPC備考録を参照にさせていただきました。

| | コメント (0) | トラックバック (0)

EC-CUBE 納品書でポイント値引きが変

またまた EC-CUBEネタです。

今やってるサイトは 1ポイント10円に設定してます。(システム設定のパラメータ設定、POINT_VALUE を10に設定)

受注管理で納品書を作成するときに、使ったポイント分が「値引き」の欄に表示されるんですけど、 そこでの表示だけが なぜか1ポイント1円として表示されてしまってました。

他の計算は合ってるんですけど・・・?

てな事で、今回は場所を探しました探しました。

\data\class\SC_Fpdf.php   の中にある、

$arrOrder[$i][3] = "- ".number_format($this->arrDisp['use_point'] + $this->arrDisp['discount']).$monetary_unit;
↑ここが値引き額の計算の部分でしたので、以下のとおりに修正しました。↓

$arrOrder[$i][3] = "- ".number_format(($this->arrDisp['use_point'] * POINT_VALUE) + $this->arrDisp['discount']).$monetary_unit;

PDFを出力してみたところ、 ちゃんと1ポイント10円で計算された値引き額になっておりました。

よかった~♪

| | コメント (1) | トラックバック (1)

考慮不足のバグ発生

相変わらず、EC-CUBEネタです。

EC-CUBEでは商品に対して「規格」というものが登録できます。
一つの商品でも、色違いとか、サイズ違い みたいなものを扱うときに、規格を「色」として登録し、規格の中に分類として「赤」とか「白」とか、登録して紐付けできるんですネ。

で、商品に対して画像はメインとサブ×6種類 しか登録できませんので、もし 7色以上分類がある商品は画像なしー? ってな事になってしまうため、 規格分類ごとに画像を持てるような仕組みに改造をしました。

dtb_products_class にイメージの項目を追加し、ファイルアップロードの画面を追加してきちんと動いているように見えていたのですが・・・ 思わぬところに「穴」がありました。

というのも、「規格登録」の画面では、規格ごとの在庫数などもメンテできるため、商品の登録後は運用として何度も使う訳ですが、規格登録をしなおすと、規格分類ごとの画像が消えてしまう! というバグが発生している、とお客様からご指摘を受けたのです。

そこで、ハッ!と前回の「規格登録エラー」でほじった内容を思い出しました。

『あっ そうだ。Delete-Insertしている画面だった!! ということは、自分で追加したカラムの情報を自動でInsertしてくれてるハズがないょね~』

早速中身を見てみると・・・まさに原因はそこにありました。

なので、情報を取得するクエリーに画像のカラムも項目として追加し、規格登録のテンプレートにも画像名の情報をhiddenで持つようにし、Insert文にはPOSTされてきた画像名をまたDBに登録してあげるような記述を付け加えて一件落着です。

前回、この規格登録の部分をほじほじしておいてよかった~

いや、まさに「考慮不足」だったので 本当にお客様にはご迷惑をおかけしましたm(_ _)m

| | コメント (0) | トラックバック (0)

EC-CUBEを 会員限定サイトに

EC-CUBEは会員登録しなければ購入ができないような仕組みがもともとあるんですが、
「会員でなければ価格を表示されないようにして欲しい」
「会員になるには、フォームからの登録後、管理者が審査をする仕組みにしたい」

というような依頼を受けたので、ちょっとカスタマイズしました。

そこで、まぁ予想したソースに手を入れて問題なく動いてる・・・と思いきや、
以外な部分で「あれっ?」って現象にブチ当たりました。

PCサイトでは、会員登録の申込みメールのみが管理者に届くのですが、
モバイルサイトでは、管理者宛にも、申込者にお送りするはずのメールが届くんです。

ということで、LC_Page_Entry.phpをよーくよーく見てみると
モバイルの時だけBCCに管理者のメアドが入ってました。

なぜ、このときだけにBCCが入ってるのか? しかも、設定とかじゃなくて決めウチでBCCが。
ちょっとしたトラップだぁ~と思ったので 覚え書きしときます。

| | コメント (0) | トラックバック (0)

EC-CUBEカスタマイズ その2

前回のEC-CUBEカスタマイズに続き、またまた「ふ~。やれやれ」状態になったので覚え書きします。

■管理画面「admin」のテンプレートは \data\Smarty\templates\default\admin内にあるものを直接変更する。

■MySQLを使っている場合は、インストール時にビューテーブルを作成しないので、ビューは使っていない。 →商品テーブルに列追加などを行った場合は、\data\class\db\dbfactory\SC_DB_DBFactory_MYSQL.php のクエリー文を修正する。

■データの登録の部分に手を加える場合は、ポストされてきたデータをDB用のパラメータとして登録する関数があるので、それを使う。
(SC_FormParam.phpにある、addParam関数。)
ただし、パラメータの詳細の意味は不明・・・ --;

function addParam($disp_name, $keyname, $length="", $convert="", $arrCheck=array(), $default="", $input_db="true")  ってなってるけど、コメントなど説明は一切なし。

以下パラメータを推測するに

$disp_name は、恐らくバリデータでエラーを出したときに表示される項目名とするものだと思う。

$keyname は、ポストされてきた名前。

$length は有効にしたい文字列の長さかと。バリデータでチェックする時にこの長さと比較するんではないかな。 省略可能。

$convert これは意味不明。 たまたま使ってる箇所を例としてみてみると、"KVa" って直接書いてある。 なんだろう? 省力可能なので省略してみたけど (^^;A

$arrCheck は 配列形式で、チェックする項目を指定。
例によれば array("EXIST_CHECK","SPTAB_CHECK","MAX_LENGTH_CHECK") って感じに文字列を配列にしてた。 →それぞれが何用のチェックで他に何があるかは今後調べてみなくちゃ。
これも省略可能。

$default は、未入力だった場合にセットする初期値となるデータかと。省略可能。

$input_db は "true" か "false" で指定。 省略すると "true"となるみたい。
データベースに登録する値かどうか、を判断するフラグっぽい。

・・・・とまぁ 覚え書きとしてはこんな感じ。

多分、これからしばらくEC-CUBEとお付き合いしなければならないため、
もっとわかることが多いと思うので その3も書くハメになりそうです。

| | コメント (0) | トラックバック (0)

EC-CUBEのカスタマイズ

EC-CUBEのカスタマイズ 「ブロックの新規作成」でハマりました >_<

テンプレートは管理画面から簡単に作れたので、
あとは データベースから値を抽出するクラスを作って、
そのクラスを使うPHPファイルを作って・・・と ここまでは出来たのに、
ブロックは確かに張り付いているのにデータが呼び出されていない。

そもそも、PHPファイルはどうやって呼び出されているんだ?
テンプレートはSmartyそのものなので、直接クラスを使ったりはしないし、
このテンプレートを呼び出している側は、PHPファイルを使ってくれているのか?

規約どおりの名前にすると自動で呼んでくれるのか?とか思って
PHPファイルの名前とかテンプレートファイルの名前とか変えてみたりしたけど
一向にデータは抽出されない。

SQL文が間違えているのか?とか思って phpMyadminのSQLから実行すると
ちゃんと値が返ってきているし。。。。

EC-CUBEのサイトなどで ブロック追加の方法などを読んでも、
全然情報乗ってないしーーーーっ >_<

答えは、データベースの dtb_block にありました。
ううう・・・ 4時間も悩んでしまいました。

| | コメント (0) | トラックバック (0)

携帯用の素材

昔、ez-web用の壁紙を作ったくらいで、携帯用の素材というものに手を出してなかったことに気づいて、ちょっとやってみようと思った。

で、せっかくFlashCSがあるので、簡単な待ち受け画面なんか作ってみることに。

バージョンは、Flash Lite 1.1を選択。

まずは、普通に何かテキトーな画像を貼ってから、ダイナミックテキストを用意して、インスタンス名と変数名を付けた。

一番最初の読み込みの部分で、現在の時間を取得してから変数に格納するという超簡単なActionScriptを書いた。

で、パブリッシュ・・・エラーが出まくり。

例によってググって、何がいけないかを調べてみる。

Flash Lite 1.1用の時間取得の関数が別にあるらしい。
それから、テキストボックスにインスタンス名は不要らしい。

なるほど、専用の関数さえわかればこっちのもの。
思い立ってから20分くらいで、パブリッシュも通って無事動作するようになった。

うーん、あとは「かわいいキャラ」とか「面白い動き」とか、携帯に限らない当たり前の要素が必要・・・です(汗

まぁ、かわいいキャラや面白い動きができたら、携帯ツールに限らずとも、ブログパーツとして公開したいなぁ。。。。(いつのことやら)

| | コメント (0) | トラックバック (0)

設計支援ツール JUDE

アクティビティ図を作るのに、やっぱりツールが欲しい~ということで、前々から欲しかった、設計支援ツールJUDEを購入してしまいました。

1ライセンスで 29400円(税込み)。

JUDEについては
http://www.objectclub.jp/technicaldoc/uml/try_uml
にいろいろ乗ってます。

私はJAVAの人ではないのだけれど、やはりこういうツールを使って、レイアウトなどストレスをなるべく少なくして設計に打ち込めるのは魅力的です。

| | コメント (0) | トラックバック (0)

お問合せフォームの入力チェック

最近、「WEBだと、他社はどんな入力チェックをやっているんだろう?」というのが妙に気になって、WEBデザイン会社の【お問い合わせ】のページなどで 必須項目を抜いて入力してみたり、メールアドレスに「a」とだけ入力したみたり、電話番号にアルファベット入れてみたりして送信ボタンを押してみたりする。

当然、チェックもかかるだろうし、確認画面も出るんだろうな~と思ってると、案外コレがなくて メールアドレス「a」のまま送信されちまったりするのが多い。

業務システム系のプログラムでは、こんなゆるいチェックはまずあり得ないから、(いや、たまに何の考慮もされていないプログラムにもお目にかかれるけど) とってもとってもビックリする。

特にWEBでは、送信ボタンをクリックしたつもりが無くても、Enterキーで送信されてしまうことが多いため、確認画面も無いのに、入力形式もチェックされていないとなると、ちょっと不安だなぁ~。 しかし、それで良い世の中になってしまっているのかも?

ああ、そういえば蛇足ですが、WEBのレイアウトデザインをお願いすると、入力フォームや完了画面のデザインはきちんとしてくるんですが、約5割が、入力エラーになった場合のデザインをスコーーーン!とお忘れになられてます。

「ユーザーは入力間違いをしない」という前提なのかも知れないですけど、常に「間違えてしまったらどうする?」は意識したいかな、と。

| | コメント (0) | トラックバック (0)

その他のカテゴリー

パソコン・インターネット