商品とセット商品の関連付け。(データベースの設計)
物流関連のシステム周りでセット商品の使いについて考えてみた。
以下の書籍を参考にして組んでいる。アプリケーションはPHP(CakePHP3)のMySQL
なにかもっとスマートな方法がありそうな気もするが、こっちの方があれか、
たしかに拡張性が高そうな気もした。多対多のような、セットをセットにしたファミリーセットとかもいけそうだし。
とりあえず、これで進めてみる。
デスク周りをリニューアルしたついでに、1年ほど利用しているモニタアームです。
つかってみてすごく快適で使い勝手もよいのでご紹介。
購入のキッカケはディスプレイのスタンドが大きくて机が狭くなってしまっていた事です。
使っているディスプレイを4Kの’LG 27UD68-W IPSディスプレイ ’に変えたのですが以下の通りディスプレイ自体は薄いのにスタンドで15cmほどスペースをとってしまっている状態。(しかもAmazonのレビューなどでもある通り、スタンドはあまり安定性も良くない感じでした。そこでモニタアームを購入しました。
その後快適に利用しています。いろいろなモニターアームを半年くらいいろいろ物色していたのですが、もっと早く買っておけばよかったなぁと。
このモニタアームで気に入っている点を色々。
結構仕事する上で見た目てきなモチベーションも重要、
この部分までキレイに白なアームはなかなか見つからなかったです。
なんといってもこれ、スペースが広がるのは本当に仕事がはかどります。
ちなみに机も通常より低めのものを利用しています。
同じ姿勢に疲れて来たりした場合に、気分によってモニタの位置、角度を変えれるしもちろん縦にすることもできます。(デュアルディスプレイの人とかは良いかも)
なんといっても、以前抱えていたスタンドの色のデザインの不満、スペースが狭い不満がなくなってストレスフリーになって気持ちよく作業ができるのが一番良かったところです。
LG 27UD68-W IPSディスプレイ
SONY ワイヤレスポータブルスピーカー Bluetooth/Wi-Fi対応 ブラック SRS-X7/B
WordPressで画像をアップした所画像がアップできませんでした。
結果を3行でいうと以下で解決。
以下いくつか段階があったようなのでその解決方法の詳細
この場合はnginxが送信できるhttpのbodyサイズが不足していました。
私の環境の場合は、以下の設定ファイルを書き換えてnginxをreloadして解決しました。
ファイル : /etc/nginx/nginx.conf (共通の設定ファイルの最後当たりに追加)
http {
(中略)
client_max_body_size 50M;
include /etc/nginx/conf.d/*.conf;
}
(ドメインごとの設定ファイルなどで変更ができるように includeの前にいれました。)
しばらく大丈夫だったのですが、今度はWordPressでアップロードした場合に上限だとエラーメッセージがでました。
6000x4028-17M.jpg exceeds the maximum upload size for this site.
これはPHPの設定 ‘upload_max_filesize’ が原因でした。
まずサーバーで値を確認。
# php --info | less
//'upload_max_filesize'を検索。
upload_max_filesize => 2M => 2M
//と2MBにっているさらに'php.ini'で検索してphp.iniの場所を確認。
Loaded Configuration File => /etc/php.ini
/etc/php.iniを編集します。
# vim /etc/php.ini
//以下の部分を元の 2Mから10Mへ変
upload_max_filesize = 10M
//保存して10Mになっていることを確認
# php --info
upload_max_filesize => 10M => 10M
そしてnginx再起動
# systemctl restart nginx
でアップロードすると、あれできない。。と少し悩む。
あーphp-fpmもかと。
# systemctl restart php-fpm.service
として解決
先日So-netの回線で、IPoE接続に切り替えさらに、DS-Lite(iPv6トンネルゲートウェイ)を利用し始めて快適なネット速度が出せるようになってきました。(以下の通り早い場合は200Mbpsくらいもでたりします。)
そこでディスプレイも以前から4Kディスプレイを使っていることもあり、4K60fpsのYoutube動画を快適にみたいのですが、どうしても再生で引っかかってしまいます。なにか良い方法は無いものか。。うーん。。
以下の環境でみているのですが、どうしても見ることができません。なぜだろう
だれか良い方法を知っていたら教えてほしいです。(涙)
Twitter : @yamajiro
MacBook Pro (Retina, 15-inch, Mid 2015)
LG 27UD68-W IPSディスプレイ
BUFFALO WXR–1900DHP2 (利用推奨環境6人・4LDK・3階建)
以前Cakephp3の環境をMacにつくってうまくいっていたのですが、bakeコマンドを使ったところでエラーが発生しました。
(結果を先にいうと、CLIのPHPのphp.iniのpdo_mysql.default_socketの値とMAMPのMySQLのsocketの位置が違ってました。)
以前の環境設定の記事
MacでCakePHP3をComposerを使ってセットアップ
エラーは次のようなエラー
% bin/cake bake all users
Bake All
---------------------------------------------------------------
One moment while associations are detected.
Exception: SQLSTATE[HY000] [2002] No such file or directory in [/Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php, line 47]
2017-08-29 02:34:48 Error: [PDOException] SQLSTATE[HY000] [2002] No such file or directory in /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php on line 47
Stack Trace:
#0 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php(47): PDO->__construct('mysql:host=loca...', 'root', 'root', Array)
#1 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php(104): CakeDatabaseDriverMysql->_connect('mysql:host=loca...', Array)
#2 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/BaseSchema.php(45): CakeDatabaseDriverMysql->connect()
#3 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Dialect/MysqlDialectTrait.php(63): CakeDatabaseSchemaBaseSchema->__construct(Object(CakeDatabaseDriverMysql))
#4 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/Collection.php(52): CakeDatabaseDriverMysql->schemaDialect()
#5 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php(42): CakeDatabaseSchemaCollection->__construct(Object(CakeDatabaseConnection))
#6 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Connection.php(368): CakeDatabaseSchemaCachedCollection->__construct(Object(CakeDatabaseConnection), true)
#7 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Connection.php(387): CakeDatabaseConnection->getSchemaCollection()
#8 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(1016): CakeDatabaseConnection->schemaCollection()
#9 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(968): BakeShellTaskModelTask->_getAllTables()
#10 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(209): BakeShellTaskModelTask->listAll()
#11 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(127): BakeShellTaskModelTask->getAssociations(Object(CakeORMTable))
#12 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(110): BakeShellTaskModelTask->getTableContext(Object(CakeORMTable), 'users', 'Users')
#13 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(97): BakeShellTaskModelTask->bake('Users')
#14 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/BakeShell.php(257): BakeShellTaskModelTask->main('Users')
#15 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php(51): BakeShellBakeShell->BakeShell{closure}('Users', 0)
#16 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/BakeShell.php(258): CakeCollectionCollection->each(Object(Closure))
#17 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Console/Shell.php(494): BakeShellBakeShell->all('users')
#18 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Console/CommandRunner.php(140): CakeConsoleShell->runCommand(Array, true)
#19 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/bin/cake.php(12): CakeConsoleCommandRunner->run(Array)
#20 {main}
エラーを読んでいきます。
Exception: SQLSTATE[HY000] [2002] No such file or directory in [/Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php, line 47]
PDOのドライバーのクラスでファイルが見つからないらしい。該当箇所を見る。
$connection = new PDO(
$dsn,
$config['username'],
$config['password'],
$config['flags']
);
PDOをnewしているところでエラーなのでPDO自体がまずいのか。
phpinfoのPDOを探ってみる。
% php --info | less
//で、PDO部分を検索
PDO
PDO support => enabled
PDO drivers => mysql, odbc, sqlite
pdo_mysql
PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $
Directive => Local Value => Master Value
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
PDO_ODBC
PDO Driver for ODBC (unixODBC) => enabled
ODBC Connection Pooling => Enabled, strict matching
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.15.1
あー、たしかMAMPのmysqlのソケットの場所が違ったはず。と思い出す。
シンボリックリンク作成
% ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock
気を取り直してもう一いっかいで、うまくいきました。
% bin/cake bake all users
Bake All
---------------------------------------------------------------
One moment while associations are detected.
Baking table class for Users...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/UsersTable.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/UsersTable.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/empty`
Baking entity class for User...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/User.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/User.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/empty`
Baking test fixture for Users...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/UsersFixture.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/UsersFixture.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/empty`
Bake is detecting possible fixtures...
Baking test case for AppModelTableUsersTable ...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Model/Table/UsersTableTest.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Model/Table/UsersTableTest.php`
Baking controller class for Users...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Controller/UsersController.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Controller/UsersController.php`
Bake is detecting possible fixtures...
Baking test case for AppControllerUsersController ...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Controller/UsersControllerTest.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Controller/UsersControllerTest.php`
Baking `index` view template file...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/index.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/index.ctp`
Baking `view` view template file...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/view.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/view.ctp`
Baking `add` view template file...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/add.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/add.ctp`
Baking `edit` view template file...
Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/edit.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/edit.ctp`
Bake All complete.
以下の用な関数を作ってコンパイルした時に余分なスペースが入ってun validなCSSになってしまってましたが、戻り値を+で連結するとスペースが入らずvalidになりました。(※gulp-sassを使っての環境でのこと)
(以下 sass記法です)
[関数]
@function px2vw($num)
@return ($num/1024*100)vw
[使い方]
div
width : px2vw(500)
[コンパイル結果:期待値]
div{
width : 48.828125vw
}
[コンパイル結果:実際]
div{
width : 48.828125 vw
}
orz.. vwの前にスペースが入ってエラー。。
[解決方法]
@function px2vw($num)
@return ($num/1024*100)vw
あと以前はPHPStorm上で、Compassを使ってコンパイルしていた場合は出ませんでした。
※以下の方法は、効率的で生産性の高い方法を考えた方法で、ベストではありません。
いろいろレスポンシブなサイトを作ってきて、効率的で生産性の高いほうほうをさぐっていくうちに、以下のよううなレスポンシブの作りを良くします。(私はフロントエンド係)
まずPCは何も考えずに基本pxで組んでいきます。注意する点は以下の2点だけ。
とそのままマークアップ、スタイリングします。
まずどのように同じレイアウトを保つかというとvwの単位をうまく使います。
ブレークポイントを設定して単位のpxをvwに置換していくわけですが、まずPCのコンテンツの幅を1024pxだとした場合の値の求め方は、
vw = PCでの幅(px) / 1024 * 100
となります。これをすべて手動で計算は無いので、以下のようなfunctionを使います。
@function px2vwTablet($num){
@return ($num/$breakPointTablet*100)vw
}
sassのコードは
.wrapper{
width : 500px;
@media screen and (max-width: 1024px) {
width : px2vwTablet(500)
}
}
とすると、PC〜Tabletのレイアウトを同一に保持できます。
次は文字サイズを基本PCではpx、タブレットではvwにする方法は以下の通り
html{
font-size: 10px;
@media screen and (max-width: 1024px) {
font-size: px2vwTablet(10)
}
}
body{
font-size: 1.4rem;
}
このすべてpx > vwに置換していけばPCのレイアウトがそのままタブレットに引き継切できます。
SPについてはPCのレイアウトをそのままで引き継ぐわけには行かないので、通常のレスポンシブの組み方で組んで行ってます。(これでいいのか。。悩
任意にget_post($post_id)などで持ってきた場合は、the_content()とかループ内での関数がつかえないので、setup_postdata($post);を行う必要がある。
$post_id = (int)$_GET['p'];
$post = get_post( $post_id );
setup_postdata($post);
<?php
$args = array(
'cat' => 1,
'posts_per_page' => 5
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
//ここにループするテンプレート
endwhile;
endif;
wp_reset_postdata();
?>
<ul>
<?php
$query = new WP_Query(array('posts_per_page' => 6,'post_status'=>'publish','category_name'=>'event'));
$posts = $query->get_posts();
foreach($posts as $key => $post){
$cat = get_the_category($post->ID);
if(!empty($cat[1])){
$cat = array(
'name' =>$cat[1]->name,
'slug' =>$cat[1]->slug
);
}else{
$cat = array(
'name' =>'',
'slug' =>''
);
}
?>
<li>
<a href="<?php the_permalink() ?>">
<span class="date"><?php the_time('Y-m-d'); ?></span>
<span class="category cat-<?php echo $cat['slug'] ?>"><?php echo $cat['name']; ?></span>
<span class="body"><?php the_title(); ?></span>
</a>
</li>
<?php
}
wp_reset_query();
?>
</ul>
<ul>
<?php
$args = array(
'post_type'=>'product',
'posts_per_page' => -1,
'post_status'=>'publish',
'tax_query' => array(
array(
'taxonomy' => 'product_category',
'field' => 'slug',
'terms' => 'heart',
),
)
);
$query = new WP_Query($args);
$posts = $query->get_posts();
echo "<pre>".print_r($posts,true)."</pre>";exit;
foreach($posts as $key => $post){
?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_query();
?>
</ul>
これまではcompass+sassをgulpのタスクランナーで利用していてコンパイルが重くなってきたのでより高速で快適な環境にするため、良いという噂のLibsassを使った環境に変更してみました。
基本的なコンパイルは Libsassを使えるgulpのライブラリ’gulp-sass’をつかいます。
またベンダープリフィックスの自動付与もgulpのライブラリ’gulp-autoprefixer’を使います。
合わせてインストール。
$ npm install gulp-sass --save-dev
$ npm install --save-dev gulp-autoprefixer
ディレクトリ構成は以下を想定
webroot/
css/コンパイルされたcss
scss/コンパイル前のcscc
gulpfile.js 最少構成
var gulp = require( 'gulp' ),
sass = require('gulp-sass'),
autoprefixer = require('gulp-autoprefixer');
gulp.task('scss',function(){
gulp.src('scss/**/*.scss')
.pipe(
sass({
outputStyle: 'compressed'
})
.pipe(autoprefixer({
browsers: ['last 2 versions'],
cascade: false
}))
.pipe(gulp.dest('css'));
});
gulp.task('watch', function() {
gulp.watch('sass/**/*.scss', ['scss']);
});
ターミナルからgulpを実行してwatchして完了だいぶ高速になり、快適になりました。
$ gulp watch
[12:54:32] Using gulpfile your/project/path/gulpfile.js
[12:54:32] Starting 'watch'...
[12:54:32] Finished 'watch' after 11 ms
以下のようなスピード感。(msとか、μsとか1秒以内)
gulp-sass
gulp-autoprefixer
「compass」をやめて、爆速「Libsass」に変えたら作業が超捗った件。
Powered by WordPress & Theme by Anders Norén