Skip to content

Instantly share code, notes, and snippets.

@fddcddhdd
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fddcddhdd/afc948c61f1d4177cf42 to your computer and use it in GitHub Desktop.
Save fddcddhdd/afc948c61f1d4177cf42 to your computer and use it in GitHub Desktop.
kintoneのアプリテンプレートのjson構造を解析して、Webフォームを自動生成するプログラム
<?php
// フォームからPOSTされたら表示する。
if(!empty($_POST)){
print_r($_POST);
}
// ファイルからJSONを読み込み
$json = file_get_contents("template.json");
// 文字化けするかもしれないのでUTF-8に変換
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
// オブジェクト毎にパース
// trueを付けると連想配列として分解して格納してくれます。
$obj = json_decode($json, true);
// パースに失敗した時は処理終了
if ($obj === NULL) {
return;
}
//とりあえず、テーブル構造の階層まで指定する
$arr_data = $obj['apps'][0]['schema']['table']['fieldList'];
echo '<form method="post">';
echo '<table border=1><tr><th>項目名</th><th>入力欄</th></tr>';
//カラム名&データ型を表示する
foreach ($arr_data as $key => $value){
//システム系で入力不可フィールドは表示しない
if(
$arr_data[$key]['label'] === 'レコード番号' ||
$arr_data[$key]['label'] === '更新者' ||
$arr_data[$key]['label'] === '作成者' ||
$arr_data[$key]['label'] === '更新日時' ||
$arr_data[$key]['label'] === '作成日時' ||
$arr_data[$key]['label'] === 'ステータス' ||
$arr_data[$key]['label'] === '作業者' ||
$arr_data[$key]['label'] === 'カテゴリー'
){
// ユーザが作成したフィールドだけ使う
}else{
// フィールド名
echo "<tr><td>".$arr_data[$key]['label'] ."(".$arr_data[$key]['type'].")</td><td>";
switch($arr_data[$key]['type']){
// 一行入力
case 'SINGLE_LINE_TEXT':
echo '<input type=text name='.$arr_data[$key]['var'].'>';
break;
// 複数行入力
case 'MULTIPLE_LINE_TEXT':
echo '<textarea cols="50" rows="5" name='.$arr_data[$key]['var'].'></textarea>';
break;
// 数字入力
case 'DECIMAL':
echo '<input type=number name='.$arr_data[$key]['var'].'>';
break;
// 日付入力
case 'DATE':
echo '<input type=date name='.$arr_data[$key]['var'].' value="1984-01-01">';
break;
//ラジオボタン入力
case 'SINGLE_CHECK':
// 項目を取得
foreach ($arr_data[$key]['properties']['options'] as $radio_key => $radio_value){
$rv = $radio_value['label'];
echo '<input type=radio name="'.$arr_data[$key]['var']. '[]" value="'.$rv.'">'. $rv;
}
break;
//チェックボックス入力
case 'MULTIPLE_CHECK':
// 項目を取得
foreach ($arr_data[$key]['properties']['options'] as $radio_key => $radio_value){
$rv = $radio_value['label'];
echo '<input type="checkbox" name="'.$arr_data[$key]['var']. '[]" value="'.$rv.'">'. $rv;
}
break;
//ドロップダウン入力
case 'SINGLE_SELECT':
// 項目を取得
echo '<select name='. $arr_data[$key]['var'] .'>';
foreach ($arr_data[$key]['properties']['options'] as $radio_key => $radio_value){
$rv = $radio_value['label'];
echo '<option value=' . $rv . '>'. $rv . '</option>';
}
echo '</select>';
break;
default:
}
echo "</td></tr>\n";
}
}
echo '</table>';
echo '<input type=submit>';
echo '</form>';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment