Developer

魁!小野の塾 小さな管理機能を作ってみようの巻 第4話
2021.03.17
Lv2

魁!小野の塾 小さな管理機能を作ってみようの巻 第4話

小さな管理機能を作ってみよう 第4話

初心者向け、PHPプログラム構築講座です。
初心者といっても、PHPの勉強を少し行い、LAMP環境が自分で構築でき、少しアプリケーションを作成しているレベルを対象とします。
まったくの初心者の場合は、わからない部分が出てくると思います。
できるだけ細かく説明は入れていきますが、説明がわからない場合は、PHPやMySQLの初心者講座をご覧ください。

対象のスキルレベル

  • LAMP環境の構築
  • PHP言語が読める
  • HTML, CSS, Javascriptが少しわかる
  • Bootstrapのドキュメントをみて、HTMLが書ける
  • Ajax(非同期通信)を利用したことがある
  • SESSIONを利用したことがある

構築環境

  • Windows10
  • XAMPP(PHP7.3.2, MariaDB 10.1.38)

Dashboard実装

フレームを実装しましたので、Dashboardの中身を構築していこうと思います。
大きく、カード要素が2つとグラフが2つある画面になります。
グリッドを作成し、4つの領域に4つのカード要素を入れていきます。
Grid systemに関しては、バージョンごとに違いがあるため、しっかり読んでおくとよいと思います。
v4.4から完全にflexboxで構築してあると明記されるようになりました。これにより、グリッドの横幅、縦幅、位置の調整など、flexboxで指定できるような柔軟な設定が可能になりました。

※参考 Grid system (グリッドシステム)
※参考 Cards (カード)

さて、早速、グリッドを定義し、カードを入れていきます。

index.html(抜粋)コンテンツエリア
[html highlight=””] <main class="contents">
<section class="container-fluid">
<header>
<h1><i class="fas fa-tachometer-alt"></i> DASHBOARD</h1>
</header>
<div class="row">
<div class="col-lg">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
</section>
</main>
[/html]

画面は以下のようになります。

上のカード(2つ)と下のカード(2つ)がくっついています。画面を小さくしてみると、カードがくっついて、縦並びになってしまいます。

これでは見ずらいので、マージンを入れていきます。.mb-3 今回は下にマージンを入れていきます。

※参考 Spacing

index.html(抜粋)コンテンツエリア
[html highlight=”7,13,21,27″] <main class="contents">
<section class="container-fluid">
<header>
<h1><i class="fas fa-tachometer-alt"></i> DASHBOARD</h1>
</header>
<div class="row">
<div class="col-lg mb-3">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg mb-3">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card">
<div class="card-body">
</div>
</div>
</div>
</div>
</section>
</main>
[/html]

画面は以下のようになります。

画面を小さくした場合は、以下のようになります。

カードでは存在感がないので、それぞれシャドーを付けてみましょう。.shadow-sm 今回は控えめにつけてみます。

※参考 Shadows

index.html(抜粋)コンテンツエリア
[html highlight=”8,14,22,28″] <main class="contents">
<section class="container-fluid">
<header>
<h1><i class="fas fa-tachometer-alt"></i> DASHBOARD</h1>
</header>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
</div>
</section>
</main>
[/html]

以下のようになります。少し存在感がでたのではないでしょうか。

続いて、上のカード部分から作成していきます。
まずは、ユーザ登録数、部署登録数のタイトルと、数字を表示していきます。

index.html(抜粋)コンテンツエリア
[html highlight=”10,11,18,19″] <main class="contents">
<section class="container-fluid">
<header>
<h1><i class="fas fa-tachometer-alt"></i> DASHBOARD</h1>
</header>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
<h3>ユーザ登録数</h3>
<p>0</p>
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
<h3>部署登録数</h3>
<p>0</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
</div>
</section>
</main>
[/html]

画面は以下のようになります。

カード内の要素(テキスト)が左に寄っていますので、中寄にしてます。.text-center を利用します。
テキスト部分は、Bootstrap5から、左寄せが text-left から .text-start、右寄せが text-right から .text-end と変更になっております。flexboxを意識している為なのですが、Bootstrap4までのあまり変更のない部分の変更なので、確認しておくと良いと思います。

※参考 Text (テキスト)

登録数の数字が小さい気がするので、大きくしてみます。.display-3 を利用します。

※参考 Typography (タイポグラフィ)
※参考 Display headings

index.html(抜粋)コンテンツエリア
[html highlight=”8,11,16,19″] <main class="contents">
<section class="container-fluid">
<header>
<h1><i class="fas fa-tachometer-alt"></i> DASHBOARD</h1>
</header>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm text-center">
<div class="card-body">
<h3>ユーザ登録数</h3>
<p class="display-3">0</p>
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm text-center">
<div class="card-body">
<h3>部署登録数</h3>
<p class="display-3">0</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
<div class="col-lg mb-3">
<div class="card shadow-sm">
<div class="card-body">
</div>
</div>
</div>
</div>
</section>
</main>
[/html]

反映すると以下のようになります。

見た目はかなり良いのではないかと思います。

魁!小野の塾