Word bench富山4月富山市 wordpressで作る会員管理システム
-
Upload
youichi-okada -
Category
Internet
-
view
88 -
download
1
Transcript of Word bench富山4月富山市 wordpressで作る会員管理システム
WORDPRESSで作る会員管理システム
マルチメディア⼯工房 陽
とある学会の会員管理• 1000⼈人弱の会員を管理する
• 年に1〜~2度発⾏行物がある
• 年会費の⼊入⾦金処理がある
• 担当者は⼀一⼈人 ←
とある学会の会員管理• 1000⼈人弱の会員を管理する
• 年に1〜~2度発⾏行物がある
• 年会費の⼊入⾦金処理がある
• 担当者は⼀一⼈人 ← 担当者は⼀一⼈人 ←
担当者は⼀一⼈人
しかも本業は別
( ゜Д゜)ポカーン
とある学会の会員管理• 1000⼈人弱の会員を管理する
• 年に1〜~2度発⾏行物がある
• 年会費の⼊入⾦金処理がある
• 担当者は⼀一⼈人
• それをエクセルで ←
とある学会の会員管理• 1000⼈人弱の会員を管理する
• 年に1〜~2度発⾏行物がある
• 年会費の⼊入⾦金処理がある
• 担当者は⼀一⼈人
• それをエクセルで ← それをエクセルで ←
それをエクセルで
( ゜Д゜)ポカーン
そこで⼀一⼈人の漢(オトコ)が⽴立ち上がった
古川 陽⼀一
こうして僕たちの戦いが始まったのだった
第⼀一部 完
つづく
改めて• エクセルで会員管理
• 会員数は1000⼈人弱
• 年次処理(⼊入会、退会、休会、⼊入⾦金)アリ
• 住所に向けて発⾏行物あり
エクセルは便利だけど…• エクセル != システム
• エクセル != データベース
エクセルで管理すると…• あちこちでフォーマットがぐちゃぐちゃ
• どの項⺫⽬目を列挙するか定まらない
• いわゆるモデリングができていない
• データがどこにあるか分からない
エクセルで管理すると…• ⼊入⼒力が⼤大変
• でもオートフィルは便利
• 履歴の管理不可
• 複数⼈人運⽤用不可
古川さんの提案したこと• Webシステムで作る
• データベースで管理
• 帳票とかの出⼒力が可能
• 絞り込み検索可能
•いわゆる会員管理システム
会員管理システム• システム業界では良くある事例
• 顧客だったり、製品だったり、商品だったり
• ○○管理システム
• 帳票とかもよく必要とされる
帳票 って皆さんご存じです?• 業務に関わる書類のこと
• ⾒見積書、請求書、給与明細、⼀一覧表など
• 例1) 三⽉月に仕⼊入れた品物⼀一覧
• 例2) 当⽉月の全社員分の給与明細
昔からあるシステム• 30年ほど前
• オフコン、DB2、COBOL…
• 15年ほど前
• VBA、Access…
• 最近だと
• Webでの管理システム
WEBでの管理システム• ブラウザで操作可能
• 昔はそうじゃなかった!
• パソコンを限定されない
• 複数⼈人アクセス可能
会員管理システムって何が必要?• 1000⼈人ほど会員がいて
• 会員には名前とか住所とかの属性があって
• 会員ごとに絞り込みとかかけて
• 印刷したい
うーん⼤大変そうだなぁ…
あれ?でもこれWORDPRESSで⾏行けそうじゃん?
会員管理システムって何が必要?• 会員ごとに絞り込みとかかけて
• => WP_Queryとか
• 印刷したい
• => テーブルレイアウトとCSS
会員管理システムって何が必要?• 1000⼈人ほど会員がいて
• => カスタム投稿タイプ
• 会員には名前とか住所とかの属性があって
• => カスタムフィールド
いける!
WORDPRESSなら• ログイン周りOK
• 編集画⾯面OK
• テーマあるから流⽤用できちゃう
• 並び変えとかも結構できちゃう
というわけでWORDPRESSでの開発を
決めました
第⼆二部 完
つづく
第三部
こんなのできました
作ってみたまとめ• ⽤用意されてる機能が豊富なので早い
• フルスクラッチ開発(ゼロから開発)するより圧倒的に早い
• カスタム投稿タイプとかそれなりにつくってくれる
第四部
開発で使ったテクニック
問題• postmetaで並び変えしたい
• しかも複数のキーで並び変えしたい
• 例) 会員番号 + ⽣生年⽉月⽇日
ぶっちゃけ• ⽣生のSQLなら余裕なのに…
• ORDER BY meta1 DESC, meta2 ASC など
• WordPressで⽤用意されているorderby
• metakeyは⼀一つだけ
ソースコードを⾒見てみると• 本体のコードだとmeta_key⼀一つしか来ない前提のコード
• 書き換えたい衝動に駆られる
本体のコードを変えると…• アップデートごとに当てなければならないパッチ
• そして当たらなくなるパッチ
• (もういいや…、アップデートは諦めよう)
本体への改変
イコール
地獄の第⼀一歩(確信)
それにしても• 本体改変 => アップデートできなくなる
• どこかで聞いたような…
テーマ
⼦子テーマ
⼦子テーマを使うと• ⼦子テーマには親テーマとの差分のみを記述する
• 書き換えた箇所以外のアップデートであればそのままでおk
本体のコードでも同じ事ができないだろうか…
できます!
アクションフック
アクションフック(フィルター)
• WordPressで決められた箇所で、特定の処理を⾏行いますよーって宣⾔言されたもの
• the_contentを呼び出すときにはthe_contentってフィルターを呼びますよ
• じゃぁ僕the_contentへ全部富⼭山弁にするフィルター書いちゃおう 的な
アクションフック(フィルター)• フックやフィルターの箇所
• API
• API⼀一覧は公開されてます
が、ORDERBYは無い
APIが無い…
• 年々APIの数は増えているけれども、要望の少ない箇所、処理がフクザツな箇所はAPIが無い
• orderbyとかかなり内部的な所なのでAPI無し
でもここで負けてらんない
(数⽇日前)
古川さん「ここ並び変えさせたいけどできる?⼤大変かな?」
ぼく「⼤大丈夫ですよ古川さん、僕WORDPRESSの事ならだいたいなん
でもできます」
⾏行った⼿手前、後には引けない
会員番号 ⼊入会年⽉月⽇日1 2010-10-10
2 1999-07-01
15 2011-03-03
30 2014-04-01
1992-02-02
2008-01-01
2002-07-28
2012-08-15
空欄はnull
会員番号 ⼊入会年⽉月⽇日1 2010-10-10
2 1999-07-01
15 2011-03-03
30 2014-04-01
1992-02-02
2008-01-01
2002-07-28
2012-08-15
空欄はnull
ここを
会員番号 ⼊入会年⽉月⽇日1 2010-10-10
2 1999-07-01
15 2011-03-03
30 2014-04-01
1992-02-02
2002-07-28
2008-01-01
2012-08-15
空欄はnull
こうしたい
改めて問題は• 本体を書き換えればorderbyできる
• でも書き換えると運⽤用に⽀支障(ずっとパッチ or アップデート不可)
• 専⽤用のプラグインを作って呼び出す
• それはコスト(⽇日数 = お⾦金)がかかる
ということで• 本体を書き換えつつ
• アップデートに耐えられる仕様
メソッドオーバーライド
メソッドオーバーライド• クラスのメソッドを上書きする機能
• クラスの他の部分には影響を与えない
• => アップデートに強い
やってみた• WP_Queryクラスを継承したMy_WP_Queryクラスを作成
• parse_orderbyというメソッドを上書き
• 使う箇所ではMy_WP_Queryのインスタンスを利⽤用
会員番号 ⼊入会年⽉月⽇日1 2010-10-10
2 1999-07-01
15 2011-03-03
30 2014-04-01
1992-02-02
2002-07-28
2008-01-01
2012-08-15
空欄はnull
ばっちり!
実際には• metakeyを⼆二つ使うにはテーブルを⼆二つjoinする必要がある
• 独⾃自のキーワードだけに反応
• ‘orderby’ => array(‘meta_key’ => ‘member_code’);
• とかを
• ‘orderby’ => array(‘my_metakey’ => ‘something’);
• にする
使うにあたって• 本体のソースコードを注意深く読む
• デーブル構成を把握する
• ⽣生成されるSQLを把握する
• debugbar最⾼高
• 努⼒力あるのみ
振り返って• メソッドオーバーライド⾃自体はそんなにスゴイテクニックじゃ無い
• でもWordPressだと情報が少なし
• WordPress以外、PHP以外にも⼿手を広げると良いことあるよ
振り返って• WordPress以外のシステムも使ってみると良い
• フレームワークとか
• フルスクラッチ開発をすると基礎が⾝身につく
• DBばかりに注⼒力するのもよし
でも• ⼤大変なシステムは丸投げでおk
• エンジニアがフヒヒとか⾔言ってやってくれる
• WordBenchには豊富な⼈人材が揃っています
最後に• WordPressでも⼗十分システム開発できるよ
• WordPressなら開発早いよ
• WordPressで挫けそうな時でも頑張ればなんとかなったりするよ
• それでもダメなら⼈人に頼ろう
お疲れ様でした