読者です 読者をやめる 読者になる 読者になる

メルマガ原稿作成ツールを作ってみた。

先日、いつも通っているコワーキングスペース茅場町 Co-Edoハッカソンが行われていたを横目に自分も自分の心の中でハッカソンしてみようということで、一旦Obejective-Cの勉強をストップして、自分の業務で使用する原稿作成ツールをPHPで作成することに取り組んでみました。
PHPを勉強したのがもう半年以上前で、ほとんど真っ白になっていたので、ひたすらググりながら作業(汗

実際の業務で使用しているメルマガのテンプレートは勤務先にあるので、とりあえずプロトタイプだけ作って、勤務先に送って、後は就業時間中にちょこちょこ仕上げていくという形

環境は、自分はMacなのでMAMP、勤務先はWindowsなので、XAMPPを導入。

メルマガのテンプレートはTableレイアウトなので、「<tr>〜</tr>」でそれぞれのパートを分割して、必要に応じて組み合わせられるように。
必要な情報をフォームから入力したら、htmlメルマガとテキストメルマガの完成系が表示、出力され、それぞれ日付の入ったファイル名で保存できるようにしました。

まずフォームのページ(自分しか見ないのだけど、とりあえずtwitter bootstarpを使用してみた)

【参考にさせていただいたページ】
初めての Twitter Bootstrap その1 - たなかたろーのにっき
フォームからの入力 | PHP Labo
フォームの基本 - PHP入門 - ポンクソフト

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>メルマガ原稿作成ツール</title>
<link href="css/bootstrap.css" rel="stylesheet" type="text/css">
<script src="js/bootstrap.js"></script>
</head>
<body>
<div class="navbar">
  <div class="navbar-inner">
    <a class="brand" href="#">メルマガ原稿作成ツール</a>
  </div>
</div>
<div class="container">
<form action="melmaga.php" method="post">
  お知らせ:<br />
  <input type="text" name="info" size="85" value="" /><br />
  お知らせのリンク先URL:<br />
  <input type="text" name="info_url" size="85" value="" /><br />
  お店から一言:<br />
  <textarea name="comment" cols="90" rows="7"></textarea><br />
  <br />
  <input type="submit" value="確認する" />
</form>
</div>
</body>
</html>

次に結果を吐き出すページ「melmaga.php
まず完成系の見た目を表示する部分、次にtextareaにメルマガ配信ツールのhtmlメールのフォームにコピペするhtmlを出力、最後のtextareaにメルマガ配信ツールのテキストメールのフォームにコピペするテキストを出力するという3パートになっています。

【参考にさせていただいたページ】
変数の初期化とNULL - 変数 - PHP入門
文字列の連結 - 文字列 - PHP入門
シングルとダブルで大違い! ~PHPに仕組まれた改行コードの罠~ | 76bit Cafe
【PHP】!empty()とisset()関数の違い | WEBマスターの知恵ブログ
PHPスクリプト講座:requireとrequire_once | そふぃのphp入門
フォームから別ウィンドウを開く方法のまとめ: 小粋空間
10日で覚えるPHPのキソ 第 10 回 セッション(SESSION) | バシャログ。
WEBデザイナーでもできちゃう!phpを使ったHTMLのテンプレート化 | WEBデザインファクトリー

<?php
    session_start();
    require_once "melmaga_regist.php";
 ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>メルマガ作成ツール</title>

</head>
<body style="width:650px">
<div style="margin-bottom:15px">
<?php 
    include("header.php");  
    echo $table;
    include("footer.php");
?>
<input type="button" onclick="self.history.back()" value="入力画面に戻る"  style="margin-top:10px"/>
</div>
<textarea  cols="80" rows="5">
<?php 
    include("header.php");  
    echo $table;
    include("footer.php");
?>
</textarea>
<form action="html_output.php" target="_blank">
  <input type="submit" value="出力する">
</form>
<textarea  cols="80" rows="5">
<?php
    include("header.txt"); 
    echo $table_t;
    include("footer.txt"); 
  ?>
</textarea>
<form action="text_output.php" target="_blank" >
  <input type="submit" value="出力する">
</form>
</body>
</html>

ロジックのページ「melmaga_regist.php

【参考にさせていただいたページ】
ob_get_contentsを使用した簡単テンプレート:PHPプロ!TIPS+

<?php
 //お知らせ
if(!empty($_POST["info"])){
    ob_start(); 
    include("./html/info.php"); 
    $info = ob_get_contents(); 
    ob_end_clean();
    
    $info_t = htmlspecialchars($_POST["info"], ENT_QUOTES) ."\n"."\n".htmlspecialchars($_POST["info_url"], ENT_QUOTES)."\n".'--------------------'. "\n";
}else{
    $info = null;
    $info_t = null;
}

 //お店から一言
if(!empty($_POST["comment"])){
    ob_start(); 
    include("./html/comment.php"); 
    $comment = ob_get_contents(); 
    ob_end_clean();

    $comment_t = htmlspecialchars($_POST["comment"], ENT_QUOTES). "\n".'--------------------'. "\n";
}else{
    $comment= null;
    $commetn_t = null;
}

$table = $info.$comment;
$table_t = "\n".$info_t.$comment_t;

$_SESSION["table"] = $table;
$_SESSION["table_t"] = $table_t;

お知らせのhtmlテンプレートファイル「info.php

<tr bgcolor="#FFFFFF"><td width= "25%">お知らせ</td><td width="75%"><a href="<?php echo htmlspecialchars($_POST["info_url"], ENT_QUOTES)  ?>"><?php echo htmlspecialchars($_POST["info"], ENT_QUOTES) ?></a></td></tr>

お店から一言のhtmlテンプレートファイル「comment.php

<tr bgcolor="#FFFFFF"><td width= "25%">お店から一言</td><td width="75%"><?php echo nl2br(htmlspecialchars($_POST["comment"], ENT_QUOTES)) ?></td></tr>

htmlファイル出力ファイル「html_output.php

【参考にさせていただいたページ】
PHP関数 - 文字列をファイルに書き込む - file_put_contents() - PHP入門のカルマ
日時を取得する(time, date) - 日付関数 - PHP関数

<?php
session_start();
 
// 出力のバッファリングを有効にする
ob_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample</title>
</head>
<body>
<?php 
    include("header.php");  
    echo $_SESSION["table"] 
    include("footer.php");
?>
</body>
</html>
<?php
// 同階層の 日付_mail.html にphp実行結果を出力
file_put_contents( date(ymd).'_mail.html', ob_get_contents() );
 
// 出力用バッファをクリア(消去)し、出力のバッファリングをオフにする
ob_end_clean();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>出力されました!</title>
</head>
<body>
<p>出力されました!</p>
</body>
</html>

こんな感じ〜

frog377/Tooltonewsletter · GitHub