こんにちは、なかにしです。
近日、うちにエンジニアの友達が何人か遊びに来るんですが、
そのときに何か作っておもてなしをしようと思ってます。
そこで、エンジニアらしく
自宅用の注文システムを作ってみました。
注文システムの概要
自宅用なので、簡易的にやります。
▽ざっくり設計図
以前学んだ QRコードの作り方 と JqueryのfadeOutメソッド
の知識も組み合わせ、より便利に作ってます!
実装
さっそく実装します。
CSS & メアドなどの個人情報は省略します。
<?php
session_start();
// オーダー済みだったら商品名を取り出す
if (isset($_SESSION['order'])) {
$order = $_SESSION['order'];
$_SESSION = array();
}
$url = "./item.json";
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json, true);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Menu</title>
<link rel="shortcut icon" href="favicon.ico">
<link rel="stylesheet" href="./css/reset.css">
<link rel="stylesheet" href="./css/index.css">
<link href="https://fonts.googleapis.com/css?family=Hi+Melody" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>
<script src="./js/jquery.qrcode.min.js"></script>
<script src="./js/index.js"></script>
</head>
<body>
<div class="wrapper">
<?php if (isset($order)) : ?>
<div class="order">
<p><?= $order ?></p>
</div>
<?php endif ?>
<div class="title">
<div class="logo"></div>
<h1>なかにしんち</h1>
</div>
<div class="items">
<?php foreach ($arr as $value) : ?>
<div class="items__item">
<img src="img/<?= $value['id'] ?>.png" />
<p><?= $value["name"] ?></p>
<form action="./form.php" method="post">
<input type="hidden" name="id" value="<?= $value["id"] ?>">
<button type="submit" class="submit">注文</button>
</form>
</div>
<?php endforeach ?>
</div>
</div>
</body>
</html>
$(function () {
$(".order").fadeOut(5000);
});
<?php
session_start();
$url = "./item.json";
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json, true);
// GETはリダイレクト
if ($_GET) {
header('Location: index.php');
exit;
}
// JsonのIDと照合して名前を取り出す
if ($_POST["id"]) {
$id = $_POST["id"];
$name = $arr[$id - 1]["name"];
$_SESSION['order'] = "{$name}のご注文を承りました!";
}
// HPMailer のクラスをグローバル名前空間(global namespace)にインポート
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
// PHPMailer のソースファイルの読み込み
require 'PHPMailer-master/src/Exception.php';
require 'PHPMailer-master/src/PHPMailer.php';
require 'PHPMailer-master/src/SMTP.php';
// メール設定(個人情報含まれるため省略)
try{
//件名(日本語は文字化けするためMIMEでエンコード)
$mail->Subject = mb_encode_mimeheader('注文があります!');
//メール本文
$mailbody = "・{$name}の注文";
//UTF-8にエンコード
$mail->Body = mb_convert_encoding($mailbody, "JIS", "UTF-8");
$mail->send(); //メール送信
header('Location: index.php');
exit;
} catch (Exception $e) {
echo 'Error: ', $mail->ErrorInfo;
}
?>
コードを書き終わったらサーバーにアップし、
index.phpにあたるドメインをこちらでQRコードに変換して完成です!
動作確認
▽QRを読み取ります(以下はダミーです)
▽メニュー画面で注文します
▽注文完了!
▽メールが届きます
料理を作り、提供。
★5をもらい、ミシュランへ進出します。
おすすめポイント
①メニュー登録が手軽
▽Jsonを更新し、画像を入れるだけです。
②フラッシュメッセージ
▽結構お気に入りです。
フラッシュメッセージの表示自体はPHPのみで実装可能ですが、
ふわっと消えていった方がいいなーと思ったので、
以前実装したJqueryのfadeInメソッドを使って実装しました。
おまけ : Figmaでデザイン
社内のエンジニアさんに デザインアプリ「Figma」 の使い方をご教示いただいたので、
今回のアプリをFigma上で作ってみました!
デザインはやっぱり難しいですね…
練習あるのみなので、次回以降はFigmaでデザインを作ってからアプリを作っていきます🙌
さいごに
▽ラミネートしました
(読み取れないように一部隠してあります)
これでコミュニケーションが苦手な僕でも大丈夫!
今回はここまで!
Enjoy Hacking!!