Last active
August 29, 2015 14:05
-
-
Save fddcddhdd/afc948c61f1d4177cf42 to your computer and use it in GitHub Desktop.
kintoneのアプリテンプレートのjson構造を解析して、Webフォームを自動生成するプログラム
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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