09/07/27 12:47:23
ルールの意味をわかりやすく説明するサンプルコード
my $userdata = {};
$userdata->{test} = 1; ← ① 格納した情報を
require 'test.pl'
Test::testsub
({
config => $config,
userdata => $userdata,
log_error => $log_error,
log_alert => $log_alert,
status => $status,
});
print $userdata->{test}; ← 出力は 2 ④ サブルーチン内で書き換えた内容がちゃんと保持されている
exit;
sub test
{
my $argument = shift;
my $config = $argument->{config};
my $userdata = $argument->{userdata}; ← ② サブルーチン内のローカル変数に格納して
my $log_error = $argument->{log_error};
my $log_alert = $argument->{log_alert};
my $status = $argument->{status};
$userdata->{test} = 2; ← ③ 書き換えているが
}
39:nobodyさん
09/07/27 12:57:27
■ CGIモジュール
モジュールCGI.pmは以下のようにして呼び出される
$userdata->{cgi_query} = CGI->new();
こうすることでCGIオブジェクトはdieしなくなるので、どこからでも呼び出して利用できる
(CGI.pmはフォーム関連の環境変数を消してしまうので2度のuseができない)
[例]
my @param_list = $userdata->{cgi_query}->param();
40:nobodyさん
09/07/27 13:01:32
>>38の訂正 ちょっとだけ
require 'test.pl' > require 'test.pl';
sub test > sub testsub
41:nobodyさん
09/07/27 13:04:51
>>39 ちょっとだけ
2度のuse > 2度のnew
42:nobodyさん
09/07/27 20:55:02
このスレの書き込み、なにがしたいんだ?
43:nobodyさん
09/07/28 00:49:04
誰かがプログラム解析して情報載せてるんだろ
どこかwikiでも紹介したらそちらに行くんじゃ?
44:nobodyさん
09/07/28 01:10:47
ここはWEBプログラミング板だったよな
45:nobodyさん
09/07/28 18:06:54
■ データベース
独自のモジュールを使う
CSV形式
エクセルに対応してるらしい
カラム名を指定して操作する
2種類
通常
商品や会員などを扱う
ログ
レコードの操作があまりできない 読込と追記専門
ローテーションする → 古いレコードは消えていく
データベース操作の方法が特殊で、SQLインジェクションのような脆弱性は考えにくい
46:nobodyさん
09/07/28 18:08:15
基本的な使い方
my $database = Cafemilk_database_basic->connect ← オブジェクト方式connectで呼び出す
({
config => $config,
userdata => $userdata,
log_error => $log_error,
log_alert => $log_alert,
status => $status,
column_filename => 'database/item_column_list.csv', ← カラム名の情報
column_separator => ',',
database_filename => 'database/item.csv.cgi', ← データベース本体
database_separator => ',',
database_mode => '+<',
database_flock => $flock, ← ファイルロックはFLOCK
});
$database->get_record_all(); ← データベースの情報をすべて取得(予約)
my @lines = $database->get_extract_database(); ← 取得(予約)した情報を取り出し
このへんにいろいろと処理
undef $database; ← 終了
47:nobodyさん
09/07/28 18:15:04
レコードのマッチングをしたいとき
$database->get_record_all();
$database->match_database
({
column_name => 'カラム名',
match_word => '値',
});
my @lines = $database->get_extract_database();
レコードのサーチをしたいとき
$database->get_record_all();
my @columns =
(
"サーチしたいカラム1",
"サーチしたいカラム2",
"サーチしたいカラム3",
);
$database->search_database
({
search_column => \@columns, ← 複数のカラムをまたがって検索できる
search_words => $words, ← 半角スペースで区切って複数語検索が可能
character_mode => '1', ← 大文字小文字の区別をしない場合
});
my @lines = $database->get_extract_database();
48:nobodyさん
09/07/28 18:24:32
レコードのソートをしたいとき
$database->get_record_all();
$database->sort_database
({
column_name => 'カラム名',
reverse_mode => '0', ← reverseしない
sort_mode => 'number_quick', ← number_quickかcharacter_quick
});
my @lines = $database->get_extract_database();
特定のレコードを差し替えたいとき
$database->replace_record
({
extract_column_name => 'カラム名', ← ターゲットのレコードを特定するために指定
extract_column_value => '値', ← ターゲットのレコードを特定するために指定
records => \%record, ← 特定されたレコードに\%recordが書き込まれる
});
→ 差し替えは予約になるのでこのあとoverwriteが必要
49:nobodyさん
09/07/28 18:28:03
特定のレコードを削除したいとき
$database->delete_record
({
extract_column_name => 'カラム名', ← ターゲットのレコードを特定するために指定
extract_column_value => '値', ← ターゲットのレコードを特定するために指定
});
→ 削除は予約になるのでこのあとoverwriteが必要
操作したデータベースを格納(予約)
$database->set_extract_database
({
extract_database => \@lines,
});
格納(予約)したものを上書き
$database->overwrite();
→ 格納(予約)しなければmatch search sort replaceされたものを上書き
追記したいとき
$database->postscript(\%record);
→ 予約せずに、また予約があってもそれを無視して追記を行う
50:nobodyさん
09/07/29 13:10:49
特定のレコード(1件)の抽出
my $extract_database = $database->extract_last_record
({
extract_column_name => 'カラム名',
extract_column_value => '値',
});
→ 通常では最初の該当レコードが、ログでは最後の該当レコードが帰ってくる
レコードの内容の取得
→レコードの内容をいろいろ操作するために必要
my @lines = $database->get_extract_database();
foreach my $line (@lines)
{
my %target_values = $database->get_values_argument
({
database_values => $line,
});
いろいろ処理
# print $target_values{hoge}; ← カラム名で値を参照できる
# レコードの内容を変えたい場合
# $target_values{hoge} += 1000; ← 値を変更
# $database->replace_record ← 差し替え ← あとでoverwriteが必要なので注意
# ({
# extract_column_name => 'カラム名',
# extract_column_value => '値',
# records => \%target_values,
# });
}
51:nobodyさん
09/07/29 13:14:27
その他
get_stack ← レコードの数を返す
double_sort_database ← ダブルソート
set_write_forbid ← (何か問題があったときなど)書込禁止命令
merge_database ← 重複のあるログの統合
(ry
52:nobodyさん
09/07/30 12:02:02 9vO1Ag/1
DUMMY接続
データベースの待ち時間の低減や多重なアクセスによるロックを防ぐための
DUMMY接続ができる
my @lines = $database->get_extract_database();
undef $database; ← いったんデータベースへの接続を閉じて
my $database = Cafemilk_database_basic->dummy ← ダミー接続を開始する
({
config => $config,
userdata => $userdata,
log_error => $log_error,
log_alert => $log_alert,
status => $status,
column_filename => 'database/item_column_list.csv',
column_separator => ',',
database_separator => ',',
});
$database->set_extract_database
({
extract_database => \@lines,
});
53:nobodyさん
09/07/30 16:03:06
■ データベースの動作速度と商品点数
CSVでデータベースを運用しているのでソートが遅い
つまり運用可能な商品点数はソートの性能で決まる
→ ソートをまともに使用するなら商品点数は1000点くらいが限度のよう
そこで商品のソートは設定で制限されている
$config->{item_category}{item_sort}{limit} = '100'; ← デフォルトは100点
→ これで5000点くらいまで大丈夫のようだ
54:nobodyさん
09/08/01 00:36:22
2009.07.31 スキン製作例を掲載しました。
55:nobodyさん
09/08/04 16:09:04 8qC9FCVp
■ 携帯に対応するには
標準では未対応となっているのですが、実は超簡単です。
1. main.cgiの以下のコメントをはずす
# 端末を判定します。ケータイ端末かPC端末かということを判定します。
# 判定には川崎有亮(かわさきゆうすけ)氏の phone.pl を使用します。
# phone.pl はなるべく最新版を使用するように心がけてください。
# phone.pl 配布元 : URLリンク(www.kawa.net)
# require './pl/kawasaki/phone.pl';
# $userdata->{agent_type} = &phone_info();
2. あとはスキンを作るだけ
スキンは以下のディレクトリに作成
[cgi-bin/shop/]skin/user/cgi/default/mobile/japanese/yen/default/
56:nobodyさん
09/08/06 05:54:07
キャリア別に表示するには?
1. config_basicの以下の部分に追記
$config->{list}{device_type} = [qw(web mobile)];
↓
$config->{list}{device_type} = [qw(web mobile ezweb docomo jphone)];
2. cafemilk_cookie.plの以下の部分を修正
if (!$userdata->{agent_type}{type})
{
$userdata->{device_type} = $config->{default}{device_type};
}
else
{
$userdata->{device_type} = "mobile";
}
↓
57:nobodyさん
09/08/06 05:56:20
if (!$userdata->{agent_type}{type})
{
$userdata->{device_type} = $config->{default}{device_type};
}
elsif ($userdata->{agent_type}{type} eq 'docomo')
{
$userdata->{device_type} = "docomo";
}
elsif ($userdata->{agent_type}{type} eq 'ezweb')
{
$userdata->{device_type} = "ezweb";
}
elsif ($userdata->{agent_type}{type} eq 'jphone')
{
$userdata->{device_type} = "jphone";
}
else
{
$userdata->{device_type} = "mobile";
}
3. スキン作る
[cgi-bin/shop/]skin/user/cgi/default/ezweb/japanese/yen/default/
[cgi-bin/shop/]skin/user/cgi/default/docomo/japanese/yen/default/
[cgi-bin/shop/]skin/user/cgi/default/jphone/japanese/yen/default/
58:nobodyさん
09/08/06 06:13:59
マルチ端末の話が出たのでおまけ
やろうとおもえば
PCのディスプレイ解像度に合わせた表示もできます
たとえば
$config->{list}{device_type}に PC800 PC1000 PC1200 PC1600 PC1900 といった値を追加して
webスキンからjavascriptでディスプレイの幅を飛ばし
幅の情報から$userdata->{device_type}を設定するようにする
という具合でたぶんOK。(無保証)
59:nobodyさん
09/08/06 06:24:27
さらにおまけ
同じような感覚でマルチ言語もできるはず
$userdata->{language_type}を使う
同じような感覚でマルチスキンを使って表示の切り替えも(ry
$userdata->{template_type}を使う
季節ごととか時間ごととかてきとうに
60:nobodyさん
09/08/07 00:46:32
なにげに拡張性高杉
61:nobodyさん
09/08/09 03:10:27
■ OEM販売
独自カスタマイズ品を自社製品として販売することが可能というもの。
「諸事情」のある企業向けだということ。
価格表がすごい
数量 価格 単価
1 100,000 100,000
2 180,000 90,000
3 240,000 80,000
4 280,000 70,000
5 300,000 60,000
10 500,000 50,000
100 1,000,000 10,000
1000 2,000,000 2,000
62:nobodyさん
09/08/09 03:14:33
■ 現在まで判明している製品のバグ
カート内容の復活
カートをクリアしたあと会員ログインを行うか会員登録を行うか問い合わせ
を行うとカートの内容が復活してしまうことがある。
メールのデコード処理
自動発行メールにて顧客が入力した“&”の文字が“&”になるなど、
一部文字についてデコード処理が行われていない。
商品の数量単位の表示
商品の在庫を指定しなかった場合に数量単位が表示されない
sendまね~るでのサーバーエラー
Windowsサーバにてsendまね~るを使ったメール送信が短時間に連続する
とサーバーエラーが表示されることがある。
63:nobodyさん
09/08/09 03:16:35
全角に訂正
自動発行メールにて顧客が入力した“&”の文字が“&amp;”になるなど、
一部文字についてデコード処理が行われていない。
64:nobodyさん
09/08/09 14:59:00 mmb4vJxL
1000個買って立派なスキン載せて1万で売ったら800万の利益……
65:nobodyさん
09/08/09 15:20:19
これって
中小のWEB制作会社が自社開発のふりをして顧客に納品するんだろうな
66:nobodyさん
09/08/13 13:20:43
V5.1.5リリースの準備がほぼ終わったところです。
簡易バックアップの実装に加えて、ブログがHTMLエディタに対応します。
67:nobodyさん
09/08/14 17:54:35 HASTvfEn
本日、V5.1.5をリリースしました。
簡易バックアップの機能を実装しました
ブログがHTMLエディタ対応になって編集しやすくなりました。
これはopenWYSIWYGを使ってますね
68:nobodyさん
09/08/16 06:56:02
本人なのか第三者なのか、わからん口調だなぁ・・・
69:nobodyさん
09/08/16 14:58:22
リリース情報は公式からのコピペだよ
70:nobodyさん
09/08/19 14:05:16 E4giVJcR
V5.1.6ではおもに以下のような変更が予定されています。
1. ケータイ端末への対応
71:nobodyさん
09/08/20 01:44:28 ay9S4Px5
いちいち報告しなくていいよ
72:nobodyさん
09/08/29 12:11:44 kpDWlVo+
カスタマイズ性は高そうだけど、勉強コストが死ぬほど掛かりそうだな。
「業者が小規模ECをOEMで大量に請け負う」という用途に特化すると活躍しそうだけど、
ちょっとカスタマイズしてみるというのは荷が重いなぁ。
73:nobodyさん
09/08/29 14:09:49
そんなあなたにはEC-CUBEですよ!
74:nobodyさん
09/08/29 15:41:52
これは何だ?
URLリンク(cafemilk.milkcafe.to)
75:nobodyさん
09/09/01 17:57:46
何この明らかな宣伝スレ
76:nobodyさん
09/09/02 17:18:58 /bsIaaKn
発想を変えるんだ!
>>1-63はテンプレに違いない!
77:nobodyさん
09/09/05 10:02:07 YIqkwmYO
タイトル : Re: [開発]V5.1.6関連の情報
記事No : 93 [関連記事]
投稿日 : 2009/09/05(Sat) 00:11
投稿者 : cafemilk
本日、V5.1.6をリリースしました。
ケータイ端末に対応しました。
ケータイ端末への対応は、これまで無効にしていた端末判定の処理を有効に
し、そこにケータイ用のスキンを追加しただけで実現しており、V5製品の基
本性能の高さを証明するものとなっています。
78:nobodyさん
09/09/05 10:40:57
宣伝きめえ必死だな
79:nobodyさん
09/09/07 03:09:45
これはひどいw
80:nobodyさん
09/09/08 01:54:12 RMrK+puP
携帯用スキンに問題があったようですね
早速差分が出てます
しかし告知はされていないような
81:nobodyさん
09/09/08 03:30:58
告知がなければ貼ることもできないという壮大な罠
82:nobodyさん
09/09/08 14:10:51
ワロタ
83:nobodyさん
09/09/25 15:00:44 zCB6UQag
> 2009.09.25 公認マニュアルサイトを掲載しました。
URLリンク(www29.atwiki.jp)
84:nobodyさん
09/09/27 04:14:07
もういいよこの宣伝スレ。
誰か使ってる奴いるの?
85:nobodyさん
09/09/27 11:58:46
とりあえず設置してみたところ(画像以外の)ファイル数が2300ってどうよ?
86:nobodyさん
09/09/27 22:08:05
>>83
公認ってまさか作者以外の人間が作ったの?
>公式の情報より圧倒的に詳しい内容。
URLリンク(www29.atwiki.jp)
作者の自演が酷すぎて泣けてくる
87:nobodyさん
09/09/29 12:46:26
作者ともう一人か二人お手伝いさんがいそうな感じ