[PHP]strtotimeのnext month、+1 month には注意

ご、ごごごごご、ゴキブリがでたー!
でかいの!とりあえずゴキジェットって本当に殺せる(?)んですね。
ちっこいゴキブリっぽいの(ゴキブリかはわからない)のはいっぱい出てたけどでかいのでちゃった。これは間違いなくゴキブリだ。。。
バルサン的なのやっぱしないとなのかなあ。
アパート用のノンスモークな奴買ってはあるんですけどね。パソコンとか食器とかに袋被せないととか思うとめんどくさくて・・・。

ってことでこんにちは。ANDくんです。

PHPのstrtotimeっていう関数があります。
この関数は特定の日時から文字列としてつなげて +1 month とか next month とかしてあげると次の月を取得できたりするのですが、

次の月の1日を取得する例

date('Y-m-01',strtotime("2014-05-30"." next month"))
//2014-06-01

これだと問題無いのですが

date('Y-m-01',strtotime("2014-05-31"." next month"))
//2014-07-01

こうなると出力結果が7月となって返ってしまうんですよね。
なんか6月31日なんて無いから次の月に繰り上がってしまうようです。

それで今回は

date('Y-m-01',strtotime(date('Y-m-01',strtotime("2014-05-31"))." next month"))
//2014-06-01

とすることにしました。
なんか冗長っぽいですが、一度その月頭を取得してから次の月にすることで何とか対応。

よくあるバグっぽいですが、よくある事だからこそ周知されるべきですかね。
うーんでも、普通の感覚で5月31日に一ヶ月後って言われた場合・・・7月になるのが正しいといえば正しいのかな・・・?
次の月を出すわけではなく、一ヶ月後を出すということですね。

ECCUBEプラグイン WpPostのカスタマイズ スマートフォンで表示

どうもこんばんわANDくんです

本日はECCUBEプラグインのWpPostのスマートフォン版でも有効にさせる方法を書いていきます。

WpPostは足りない機能の一つとしてスマートフォン版で使えないって事がありますね。

今回の修正はデータベースの変更を行いますので、よくわからないとかがある場合はECCUBEのストアで販売してあるプラグインを購入いただくのがいいと思います。
でもまあデータベースを修正できるのであればそんなに難しくは無いかなと思います。

また、WpPostはインストールされている前提で話を進めていきますね。

まず、ブロックについて

スマートフォン版にブロックを先に管理画面から作成します。そのブロックをWpPostのブロックとなるようにデータベースで指定します。

dtb_blocテーブルをいじっていくことになります。mysqlやpsqlやphpmyadminやらいろいろ環境があると思いますのでそこは各自にお任せします。

データベースをチラッと見て、今追加したブロックを確認、bloc_idを覚えておきます。

where句は device_type_id = 2 and bloc_id = (該当するid番号) みたいな感じで変更するのを指定します。
bloc_idはdevice_type_idが違った場合に被る事があるので、device_type_idとbloc_id両方で指定する必要があります。

変更するカラムは

php_path
deletable_flg
plugin_id

この3つのカラムをPC版のWpPostのブロックに習い同じように変更します。

frontparts/bloc/plg_WpPost_list.php 
0
(数字 環境による)

それぞれおそらく 空 1 空 の形から上記に変更します。これでブロックの設定は完了。
くれぐれも別のブロックを書き換えないでくださいね!

次はwppost/plg_WpPost_category.php wppost/plg_WpPost_post.php の二つについて。

まず先ほどと同じように今度はページを新規で2つ作ります。 対象が2つだから2つ作成します。

ページ名: WordPressポスト表示
ファイル名: plg_WpPost_post
ページ名: WordPressカテゴリ表示
ファイル名: plg_WpPost_category

とりあえずはこんな形で2ページ作成しておきます。わかりやすいのでPC版と合わせる形ですね。

セレクト文をしてみます。弊社はPostgresqlです。他の環境ではわからないですが(特にPHPから触る系)まあほとんど同じでしょう。

select device_type_id,page_id,page_name,url,filename,edit_flg from dtb_pagelayout where page_name like '%WordPress%';

セレクト文をすると弊社のカスタマイズ時では下記のように

 device_type_id | page_id |       page_name       |                url                |           filename            | edit_flg
----------------+---------+-----------------------+-----------------------------------+-------------------------------+----------
             10 |      40 | WordPressカテゴリ表示 | wppost/plg_WpPost_category.php    | wppost/plg_WpPost_category    |        2
             10 |      39 | WordPressポスト表示   | wppost/plg_WpPost_post.php        | wppost/plg_WpPost_post        |        2
              2 |      39 | WordPressポスト表示   | user_data/plg_WpPost_post.php     | user_data/plg_WpPost_post     |        1
              2 |      40 | WordPressカテゴリ表示 | user_data/plg_WpPost_category.php | user_data/plg_WpPost_category |        1

そうしたら今度はDBの修正し、上記のdevice_type_idが2の物をPC版の物と同じようにします。

update dtb_pagelayout set url = replace(url,'user_data','wppost'),filename = replace(filename,'user_data','wppost'),edit_flg = 2 where device_type_id = 2 and (page_id = 39 or page_id = 40);

上記の場合なら具体的にはこう。

この後、ECCUBEからもう一度スマホ版の二つのページを編集で再登録しなおし(スマホ版のWpPostページのtplの再作成)してひとまずOKです。

PC版のテンプレートを参考にスマホ版を作成していきましょう。

また、スマホ版のuser_dataフォルダに最初にページを作成しようとした分のゴミが残ってるかと思いますが、気になる場合は削除しておくといいでしょう。

こんな感じですね。ECCUBEをわかってみるとそこまで難しくないカスタマイズとなります。